Show More
The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,156 b'' | |||||
|
1 | |RCE| 4.19.0 |RNS| | |||
|
2 | ------------------ | |||
|
3 | ||||
|
4 | Release Date | |||
|
5 | ^^^^^^^^^^^^ | |||
|
6 | ||||
|
7 | - 2020-05-22 | |||
|
8 | ||||
|
9 | ||||
|
10 | New Features | |||
|
11 | ^^^^^^^^^^^^ | |||
|
12 | ||||
|
13 | - Pull requests: add information about changes in source repositories in pull-request show page. | |||
|
14 | Fixes #5611, Fixes #5561 | |||
|
15 | Added new preview for size (commits/files) of PRs before opening, this is now based | |||
|
16 | on the special logic that calculates common ancestor and has access to preview diff | |||
|
17 | Store common ancestor in DB so updates of pull-requests are consistent | |||
|
18 | - Pull requests: fixed case for GIT repositories when a merge check failed due to | |||
|
19 | merge conflicts the pull request wrongly reported missing commits. | |||
|
20 | we're now searching for dangling commits in a repo that has them and cannot see them | |||
|
21 | because of failed merge checks. | |||
|
22 | - Pull requests: allow filter displayed results by author | |||
|
23 | - Pull requests: added filters to my account pull requests page. | |||
|
24 | - Quick search: added ability to search for pull-requests using `pr:` prefix. | |||
|
25 | Permissions are checked against the access to target repositories, and users | |||
|
26 | can now search for pull request number, description or title. | |||
|
27 | - UI: replaced js prompts with sweet-alert prompts. | |||
|
28 | - SVN: bumped shipped SVN to 1.13.0 release. | |||
|
29 | - Integration Hooks: added new hooks for comments on pull requests and commits. | |||
|
30 | Allows writing custom actions on top of commenting. | |||
|
31 | E.g `@CI-BOT re-test` could trigger CI job to re-test a pull requests or commit. | |||
|
32 | Added new rcextension hooks, Fixes #5583, and added examples on how to trigger CI build on certain comments. | |||
|
33 | - Exception tracker: added possibility to send notification email when server encountered an unhandled exception. | |||
|
34 | new .ini file flag: `exception_tracker.send_email = false` and `exception_tracker.send_email_recipients =` | |||
|
35 | can be set to enable this function. | |||
|
36 | - Mercurial: enable enhanced diffs for Mercurial that show context of changed functions inside the diff. | |||
|
37 | This makes diff actually more consistent with how GIT backend shows them. Fixes #5614 | |||
|
38 | ||||
|
39 | ||||
|
40 | General | |||
|
41 | ^^^^^^^ | |||
|
42 | ||||
|
43 | - Pull requests: fixed small UI glitches in pull request view. | |||
|
44 | - System Info: Python packages now expose the package location info. | |||
|
45 | - API: added new flag to comment api to disable email sending when creating a comment. | |||
|
46 | - Exceptions: don't report lookup errors as exceptions stored in the exception store. | |||
|
47 | Those are regular not found problems that don't indicate any exceptional case | |||
|
48 | also make the errors report nicer, not as KeyError, or generic Exception | |||
|
49 | - Exception tracker: store request info if available to track which URL caused an error. | |||
|
50 | - Integrations: handle new commenting events and optimize calls for Jira/Redmine | |||
|
51 | Speed up issue fetching by optimizing how Jira/Redmine client behaves | |||
|
52 | For redmine we don't iterate issues anymore which is *much* faster, and makes pushes with tickets faster. | |||
|
53 | - SVN: allow to specify any svn compatible version string not only hardcoded values. | |||
|
54 | The new SVN code allows to specify this by numeric values now. e.g 1.13 etc. | |||
|
55 | Fixes #5605. | |||
|
56 | - Emails: added `premailer` parsing for inline style formatting to make emails render | |||
|
57 | nicer on all email clients. | |||
|
58 | - Repositories: switched repo type selector to radio buttons and preserve order of | |||
|
59 | enabled backends inside .ini files. | |||
|
60 | - Repositories: show recommendation for updating hooks if they are outdated. | |||
|
61 | - Files: add pre-commit checks on file edit/delete/add operations. This prevents | |||
|
62 | loosing content while editing when repositories changes during those operations. | |||
|
63 | Fixes #5607. | |||
|
64 | - Files: changed the copy path label to indicate we're actually copying only the path. | |||
|
65 | Added copy permalink helper to copy the url quickly. Fixes #5602 | |||
|
66 | - LDAP: updated ldap plugin to help with debug and support by extending logging and | |||
|
67 | improving error messages. | |||
|
68 | - LDAP: fixed example LDAPs port. | |||
|
69 | - Dependencies: bump redmine client. | |||
|
70 | - Dependencies: bumped bleach==3.1.3 | |||
|
71 | - Dependencies: bumped webtest==2.0.34 | |||
|
72 | - Dependencies: bumped packaging==20.3 | |||
|
73 | - Dependencies: bumped pyparsing==2.4.7 | |||
|
74 | - Dependencies: bumped sqlalchemy==1.3.15 | |||
|
75 | - Dependencies: bumped hupper==1.10.2 | |||
|
76 | - Dependencies: bumped alembic==1.4.2 | |||
|
77 | - Dependencies: bumped wcwidth==0.1.9 | |||
|
78 | - Dependencies: bumped python-ldap==3.2.0 | |||
|
79 | - Dependencies: bumped importlib-metadata==1.5.0 | |||
|
80 | - Dependencies: bumped redis==3.4.1 | |||
|
81 | - Dependencies: bumped importlib-metadata==1.6.0 | |||
|
82 | - Dependencies: bumped pytz==2019.3 | |||
|
83 | - Dependencies: bumped paste==3.4.0 | |||
|
84 | - Dependencies: bumped weberror==0.13.1 | |||
|
85 | - Dependencies: bumped pyparsing==2.4.6 | |||
|
86 | - Dependencies: bumped ipdb==0.13.2 | |||
|
87 | - Dependencies: bumped pastedeploy==2.1.0 | |||
|
88 | - Dependencies: bumped docutils==0.16.0 | |||
|
89 | - Dependencies: bumped pyramid-debugtoolbar==4.6.1 | |||
|
90 | - Dependencies: bumped gevent==1.5.0 | |||
|
91 | - Dependencies: bumped psutil==5.7.0 | |||
|
92 | ||||
|
93 | ||||
|
94 | Security | |||
|
95 | ^^^^^^^^ | |||
|
96 | ||||
|
97 | - Logging: expose usernames in the logs for each request made to RhodeCode. | |||
|
98 | This enables auditing capabilities for all actions against the web interface. | |||
|
99 | - Users: increased security on the way we're displaying authentication tokens. | |||
|
100 | We don't expose all on single page. Request needs a validation before viewing of each token. | |||
|
101 | - Logging: added some nicer logging for file path ACL checks. | |||
|
102 | - Audit Log: extend the commit api data with references to commit_id or pull_request_id. | |||
|
103 | This allows tracking those in the audit-logs. | |||
|
104 | ||||
|
105 | ||||
|
106 | Performance | |||
|
107 | ^^^^^^^^^^^ | |||
|
108 | ||||
|
109 | - Exception Tracker: optimized the check for smtp_server before doing heavy lifting | |||
|
110 | of exception email sending. | |||
|
111 | - Auth: enabled cache flags for fetching ACL ids. | |||
|
112 | Those are now safe to cache since we have a proper cache invalidation logic for | |||
|
113 | permissions of users, for lots of repo this makes our goto switcher much much faster. | |||
|
114 | - Application: use simpler way to extract default_user_id, this will be now registered | |||
|
115 | at server boot, reducing number of times we fetch this from database. | |||
|
116 | - Pull requests: changed reviewers metadata function for optimizing the diff calculations. | |||
|
117 | We're now doing a single request to calculate reviewers and diff preview instead of twice like before. | |||
|
118 | ||||
|
119 | ||||
|
120 | Fixes | |||
|
121 | ^^^^^ | |||
|
122 | ||||
|
123 | - GIT: fixed readme searcher for Git repositories using libgit2 and non-ascii directories. | |||
|
124 | - Full text search: fixed error while highlighting special search terms e.g 'enabled \= ' | |||
|
125 | - Full text search: fixed problems with non-ascii files indexing. | |||
|
126 | - Diffs: improve text on unresolved comments attached to files that no longer exist in the review. | |||
|
127 | Fixes #5615. | |||
|
128 | - Auth: fixed generation of authomatic secrets for new plugins. | |||
|
129 | - Auth: failsafe github auth if it doesn't provide full name for users. | |||
|
130 | - Permissions: fixed problem with permissions changes from permission page due to missing cache flush. | |||
|
131 | This caused certain permission changed be visible after some time of the edit. | |||
|
132 | We now ensure *all* caches used for permissions are properly flushed right after the change. | |||
|
133 | - SVN: explicitly specify tunnel-user to properly map rhodecode username on svn commit | |||
|
134 | via SSH backend. Fixes #5608. | |||
|
135 | - SVN: fixed case of wrong extracted repository name for SSH backend. In cases | |||
|
136 | where we commit to a nested subdirs SVN reported the access path with the subdir paths in it. | |||
|
137 | We couldn't then match that extended name into proper rhodecode repository for ACL checks. | |||
|
138 | Current implementation gives an slight overhead as we have to lookup all repositories. | |||
|
139 | Fixes #5606 | |||
|
140 | - SVN: fixed problem with special characters inside subdirectories. | |||
|
141 | - SVN: fixed SVN refs switcher on files that used old format of diff url. Fixes #5599, #5610 | |||
|
142 | - Search: remove excessive quoting on search pagination. Fixes #5604 | |||
|
143 | - File browser: fixed the repo switcher `?at=` flag being lost when walking on the file tree. | |||
|
144 | - File browser: fixed unicode problems on image preview, and make images center, no-stretch. | |||
|
145 | - DB migrations: fixed db migrate for latest sqlite version. | |||
|
146 | - Feed generator: fixed missing utc definition that could cause server 500 error. | |||
|
147 | ||||
|
148 | ||||
|
149 | Upgrade notes | |||
|
150 | ^^^^^^^^^^^^^ | |||
|
151 | ||||
|
152 | - RhodeCode has been tested on CentOS/RHEL 8 and we added those as officially supported platforms. | |||
|
153 | - This release introduces lots of optimizations and changes how the pull requests reviewers, | |||
|
154 | and diff preview is made. We cut the pull request creation time by 50%. | |||
|
155 | Please look closer to this new logic na report any potential problems with this change. | |||
|
156 | - SVN was bumped to 1.13 version. No newline at end of file |
@@ -0,0 +1,60 b'' | |||||
|
1 | # Example to trigger a CI call action on specific comment text, e.g chatops and ci | |||
|
2 | # rebuild on mention of ci bot | |||
|
3 | ||||
|
4 | @has_kwargs({ | |||
|
5 | 'repo_name': '', | |||
|
6 | 'repo_type': '', | |||
|
7 | 'description': '', | |||
|
8 | 'private': '', | |||
|
9 | 'created_on': '', | |||
|
10 | 'enable_downloads': '', | |||
|
11 | 'repo_id': '', | |||
|
12 | 'user_id': '', | |||
|
13 | 'enable_statistics': '', | |||
|
14 | 'clone_uri': '', | |||
|
15 | 'fork_id': '', | |||
|
16 | 'group_id': '', | |||
|
17 | 'created_by': '', | |||
|
18 | 'repository': '', | |||
|
19 | 'comment': '', | |||
|
20 | 'commit': '' | |||
|
21 | }) | |||
|
22 | def _comment_commit_repo_hook(*args, **kwargs): | |||
|
23 | """ | |||
|
24 | POST CREATE REPOSITORY COMMENT ON COMMIT HOOK. This function will be executed after | |||
|
25 | a comment is made on this repository commit. | |||
|
26 | ||||
|
27 | """ | |||
|
28 | from .helpers import http_call, extra_fields | |||
|
29 | from .utils import UrlTemplate | |||
|
30 | # returns list of dicts with key-val fetched from extra fields | |||
|
31 | repo_extra_fields = extra_fields.run(**kwargs) | |||
|
32 | ||||
|
33 | import rhodecode | |||
|
34 | from rc_integrations.jenkins_ci import csrf_call, get_auth, requests_retry_call | |||
|
35 | ||||
|
36 | endpoint_url = extra_fields.get_field( | |||
|
37 | repo_extra_fields, key='ci_endpoint_url', | |||
|
38 | default='http://ci.rc.com/job/rc-ce-commits/build?COMMIT_ID=${commit}') | |||
|
39 | mention_text = extra_fields.get_field( | |||
|
40 | repo_extra_fields, key='ci_mention_text', | |||
|
41 | default='@jenkins build') | |||
|
42 | ||||
|
43 | endpoint_url = UrlTemplate(endpoint_url).safe_substitute( | |||
|
44 | commit=kwargs['commit']['raw_id']) | |||
|
45 | ||||
|
46 | trigger_ci = False | |||
|
47 | comment = kwargs['comment']['comment_text'] | |||
|
48 | if mention_text in comment: | |||
|
49 | trigger_ci = True | |||
|
50 | ||||
|
51 | if trigger_ci is False: | |||
|
52 | return HookResponse(0, '') | |||
|
53 | ||||
|
54 | # call some CI based on the special coment mention marker | |||
|
55 | data = { | |||
|
56 | 'project': kwargs['repository'], | |||
|
57 | } | |||
|
58 | response = http_call.run(url=endpoint_url, params=data) | |||
|
59 | ||||
|
60 | return HookResponse(0, '') No newline at end of file |
1 | NO CONTENT: new file 100644 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 | [bumpversion] |
|
1 | [bumpversion] | |
2 |
current_version = 4.1 |
|
2 | current_version = 4.19.0 | |
3 | message = release: Bump version {current_version} to {new_version} |
|
3 | message = release: Bump version {current_version} to {new_version} | |
4 |
|
4 | |||
5 | [bumpversion:file:rhodecode/VERSION] |
|
5 | [bumpversion:file:rhodecode/VERSION] |
@@ -5,25 +5,20 b' done = false' | |||||
5 | done = true |
|
5 | done = true | |
6 |
|
6 | |||
7 | [task:rc_tools_pinned] |
|
7 | [task:rc_tools_pinned] | |
8 | done = true |
|
|||
9 |
|
8 | |||
10 | [task:fixes_on_stable] |
|
9 | [task:fixes_on_stable] | |
11 | done = true |
|
|||
12 |
|
10 | |||
13 | [task:pip2nix_generated] |
|
11 | [task:pip2nix_generated] | |
14 | done = true |
|
|||
15 |
|
12 | |||
16 | [task:changelog_updated] |
|
13 | [task:changelog_updated] | |
17 | done = true |
|
|||
18 |
|
14 | |||
19 | [task:generate_api_docs] |
|
15 | [task:generate_api_docs] | |
20 | done = true |
|
16 | ||
|
17 | [task:updated_translation] | |||
21 |
|
18 | |||
22 | [release] |
|
19 | [release] | |
23 |
state = |
|
20 | state = in_progress | |
24 |
version = 4.1 |
|
21 | version = 4.19.0 | |
25 |
|
||||
26 | [task:updated_translation] |
|
|||
27 |
|
22 | |||
28 | [task:generate_js_routes] |
|
23 | [task:generate_js_routes] | |
29 |
|
24 |
@@ -1,10 +1,11 b'' | |||||
1 |
|
1 | |||
2 | .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build generate-pkgs |
|
2 | .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build generate-pkgs pip-packages | |
3 |
|
3 | |||
4 | NODE_PATH=./node_modules |
|
4 | NODE_PATH=./node_modules | |
5 | WEBPACK=./node_binaries/webpack |
|
5 | WEBPACK=./node_binaries/webpack | |
6 | GRUNT=./node_binaries/grunt |
|
6 | GRUNT=./node_binaries/grunt | |
7 |
|
7 | # set by: PATH_TO_OUTDATED_PACKAGES=/some/path/outdated_packages.py | ||
|
8 | OUTDATED_PACKAGES = ${PATH_TO_OUTDATED_PACKAGES} | |||
8 |
|
9 | |||
9 | clean: |
|
10 | clean: | |
10 | make test-clean |
|
11 | make test-clean | |
@@ -55,6 +56,9 b' web-build:' | |||||
55 | generate-pkgs: |
|
56 | generate-pkgs: | |
56 | nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses" |
|
57 | nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses" | |
57 |
|
58 | |||
|
59 | pip-packages: | |||
|
60 | python ${OUTDATED_PACKAGES} | |||
|
61 | ||||
58 | generate-js-pkgs: |
|
62 | generate-js-pkgs: | |
59 | rm -rf node_modules && \ |
|
63 | rm -rf node_modules && \ | |
60 | nix-shell pkgs/shell-generate.nix --command "node2nix --input package.json -o pkgs/node-packages.nix -e pkgs/node-env.nix -c pkgs/node-default.nix -d --flatten --nodejs-8" && \ |
|
64 | nix-shell pkgs/shell-generate.nix --command "node2nix --input package.json -o pkgs/node-packages.nix -e pkgs/node-env.nix -c pkgs/node-default.nix -d --flatten --nodejs-8" && \ |
@@ -350,6 +350,17 b' labs_settings_active = true' | |||||
350 | ; This is used to store exception from RhodeCode in shared directory |
|
350 | ; This is used to store exception from RhodeCode in shared directory | |
351 | #exception_tracker.store_path = |
|
351 | #exception_tracker.store_path = | |
352 |
|
352 | |||
|
353 | ; Send email with exception details when it happens | |||
|
354 | #exception_tracker.send_email = false | |||
|
355 | ||||
|
356 | ; Comma separated list of recipients for exception emails, | |||
|
357 | ; e.g admin@rhodecode.com,devops@rhodecode.com | |||
|
358 | ; Can be left empty, then emails will be sent to ALL super-admins | |||
|
359 | #exception_tracker.send_email_recipients = | |||
|
360 | ||||
|
361 | ; optional prefix to Add to email Subject | |||
|
362 | #exception_tracker.email_prefix = [RHODECODE ERROR] | |||
|
363 | ||||
353 | ; File store configuration. This is used to store and serve uploaded files |
|
364 | ; File store configuration. This is used to store and serve uploaded files | |
354 | file_store.enabled = true |
|
365 | file_store.enabled = true | |
355 |
|
366 | |||
@@ -605,8 +616,9 b' vcs.backends = hg, git, svn' | |||||
605 | vcs.connection_timeout = 3600 |
|
616 | vcs.connection_timeout = 3600 | |
606 |
|
617 | |||
607 | ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out. |
|
618 | ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out. | |
608 | ; Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible |
|
619 | ; Set a numeric version for your current SVN e.g 1.8, or 1.12 | |
609 | #vcs.svn.compatible_version = pre-1.8-compatible |
|
620 | ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible | |
|
621 | #vcs.svn.compatible_version = 1.8 | |||
610 |
|
622 | |||
611 |
|
623 | |||
612 | ; #################################################### |
|
624 | ; #################################################### |
@@ -301,6 +301,17 b' labs_settings_active = true' | |||||
301 | ; This is used to store exception from RhodeCode in shared directory |
|
301 | ; This is used to store exception from RhodeCode in shared directory | |
302 | #exception_tracker.store_path = |
|
302 | #exception_tracker.store_path = | |
303 |
|
303 | |||
|
304 | ; Send email with exception details when it happens | |||
|
305 | #exception_tracker.send_email = false | |||
|
306 | ||||
|
307 | ; Comma separated list of recipients for exception emails, | |||
|
308 | ; e.g admin@rhodecode.com,devops@rhodecode.com | |||
|
309 | ; Can be left empty, then emails will be sent to ALL super-admins | |||
|
310 | #exception_tracker.send_email_recipients = | |||
|
311 | ||||
|
312 | ; optional prefix to Add to email Subject | |||
|
313 | #exception_tracker.email_prefix = [RHODECODE ERROR] | |||
|
314 | ||||
304 | ; File store configuration. This is used to store and serve uploaded files |
|
315 | ; File store configuration. This is used to store and serve uploaded files | |
305 | file_store.enabled = true |
|
316 | file_store.enabled = true | |
306 |
|
317 | |||
@@ -556,8 +567,9 b' vcs.backends = hg, git, svn' | |||||
556 | vcs.connection_timeout = 3600 |
|
567 | vcs.connection_timeout = 3600 | |
557 |
|
568 | |||
558 | ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out. |
|
569 | ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out. | |
559 | ; Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible |
|
570 | ; Set a numeric version for your current SVN e.g 1.8, or 1.12 | |
560 | #vcs.svn.compatible_version = pre-1.8-compatible |
|
571 | ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible | |
|
572 | #vcs.svn.compatible_version = 1.8 | |||
561 |
|
573 | |||
562 |
|
574 | |||
563 | ; #################################################### |
|
575 | ; #################################################### |
@@ -59,3 +59,46 b' exit the ishell after the execution::' | |||||
59 |
|
59 | |||
60 | echo "%run repo_delete_task.py" | rccontrol ishell enterprise-1 |
|
60 | echo "%run repo_delete_task.py" | rccontrol ishell enterprise-1 | |
61 |
|
61 | |||
|
62 | ||||
|
63 | ||||
|
64 | ||||
|
65 | Bulk edit permissions for all repositories or groups | |||
|
66 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |||
|
67 | ||||
|
68 | In case when a permissions should be applied in bulk here are two ways to apply | |||
|
69 | the permissions onto *all* repositories and/or repository groups. | |||
|
70 | ||||
|
71 | 1) Start by running the interactive ishell interface | |||
|
72 | ||||
|
73 | .. code-block:: bash | |||
|
74 | :dedent: 1 | |||
|
75 | ||||
|
76 | # starts the ishell interactive prompt | |||
|
77 | $ rccontrol ishell enterprise-1 | |||
|
78 | ||||
|
79 | ||||
|
80 | 2a) Add user called 'admin' into all repositories with write permission. | |||
|
81 | Permissions can be also `repository.read`, `repository.admin`, `repository.none` | |||
|
82 | ||||
|
83 | .. code-block:: python | |||
|
84 | :dedent: 1 | |||
|
85 | ||||
|
86 | In [1]: from rhodecode.model.repo import RepoModel | |||
|
87 | In [2]: user = User.get_by_username('admin') | |||
|
88 | In [3]: permission_name = 'repository.write' | |||
|
89 | In [4]: for repo in Repository.get_all(): | |||
|
90 | ...: RepoModel().grant_user_permission(repo, user, permission_name) | |||
|
91 | ...: Session().commit() | |||
|
92 | ||||
|
93 | 2b) Add user called 'admin' into all repository groups with write permission. | |||
|
94 | Permissions can be also can be `group.read`, `group.admin`, `group.none` | |||
|
95 | ||||
|
96 | .. code-block:: python | |||
|
97 | :dedent: 1 | |||
|
98 | ||||
|
99 | In [1]: from rhodecode.model.repo import RepoModel | |||
|
100 | In [2]: user = User.get_by_username('admin') | |||
|
101 | In [3]: permission_name = 'group.write' | |||
|
102 | In [4]: for repo_group in RepoGroup.get_all(): | |||
|
103 | ...: RepoGroupModel().grant_user_permission(repo_group, user, permission_name) | |||
|
104 | ...: Session().commit() No newline at end of file |
@@ -22,8 +22,9 b' Supported Operating Systems' | |||||
22 | Linux |
|
22 | Linux | |
23 | ^^^^^ |
|
23 | ^^^^^ | |
24 |
|
24 | |||
25 | * Ubuntu 14.04 |
|
25 | * Ubuntu 14.04+ | |
26 |
* CentOS 6.2 |
|
26 | * CentOS 6.2, 7 and 8 | |
|
27 | * RHEL 6.2, 7 and 8 | |||
27 | * Debian 7.8 |
|
28 | * Debian 7.8 | |
28 | * RedHat Fedora |
|
29 | * RedHat Fedora | |
29 | * Arch Linux |
|
30 | * Arch Linux |
@@ -39,7 +39,7 b' close_pull_request' | |||||
39 | comment_pull_request |
|
39 | comment_pull_request | |
40 | -------------------- |
|
40 | -------------------- | |
41 |
|
41 | |||
42 | .. py:function:: comment_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, message=<Optional:None>, commit_id=<Optional:None>, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, extra_recipients=<Optional:[]>, userid=<Optional:<OptionalAttr:apiuser>>) |
|
42 | .. py:function:: comment_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, message=<Optional:None>, commit_id=<Optional:None>, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, extra_recipients=<Optional:[]>, userid=<Optional:<OptionalAttr:apiuser>>, send_email=<Optional:True>) | |
43 |
|
43 | |||
44 | Comment on the pull request specified with the `pullrequestid`, |
|
44 | Comment on the pull request specified with the `pullrequestid`, | |
45 | in the |repo| specified by the `repoid`, and optionally change the |
|
45 | in the |repo| specified by the `repoid`, and optionally change the | |
@@ -70,6 +70,8 b' comment_pull_request' | |||||
70 | :type extra_recipients: Optional(list) |
|
70 | :type extra_recipients: Optional(list) | |
71 | :param userid: Comment on the pull request as this user |
|
71 | :param userid: Comment on the pull request as this user | |
72 | :type userid: Optional(str or int) |
|
72 | :type userid: Optional(str or int) | |
|
73 | :param send_email: Define if this comment should also send email notification | |||
|
74 | :type send_email: Optional(bool) | |||
73 |
|
75 | |||
74 | Example output: |
|
76 | Example output: | |
75 |
|
77 | |||
@@ -160,6 +162,7 b' get_pull_request' | |||||
160 | "status" : "<status>", |
|
162 | "status" : "<status>", | |
161 | "created_on": "<date_time_created>", |
|
163 | "created_on": "<date_time_created>", | |
162 | "updated_on": "<date_time_updated>", |
|
164 | "updated_on": "<date_time_updated>", | |
|
165 | "versions": "<number_or_versions_of_pr>", | |||
163 | "commit_ids": [ |
|
166 | "commit_ids": [ | |
164 | ... |
|
167 | ... | |
165 | "<commit_id>", |
|
168 | "<commit_id>", | |
@@ -249,7 +252,9 b' get_pull_request_comments' | |||||
249 | }, |
|
252 | }, | |
250 | "comment_text": "Example text", |
|
253 | "comment_text": "Example text", | |
251 | "comment_type": null, |
|
254 | "comment_type": null, | |
252 | "pull_request_version": null |
|
255 | "pull_request_version": null, | |
|
256 | "comment_commit_id": None, | |||
|
257 | "comment_pull_request_id": <pull_request_id> | |||
253 | } |
|
258 | } | |
254 | ], |
|
259 | ], | |
255 | error : null |
|
260 | error : null |
@@ -28,7 +28,7 b' add_field_to_repo' | |||||
28 | comment_commit |
|
28 | comment_commit | |
29 | -------------- |
|
29 | -------------- | |
30 |
|
30 | |||
31 | .. py:function:: comment_commit(apiuser, repoid, commit_id, message, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, extra_recipients=<Optional:[]>, userid=<Optional:<OptionalAttr:apiuser>>) |
|
31 | .. py:function:: comment_commit(apiuser, repoid, commit_id, message, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, extra_recipients=<Optional:[]>, userid=<Optional:<OptionalAttr:apiuser>>, send_email=<Optional:True>) | |
32 |
|
32 | |||
33 | Set a commit comment, and optionally change the status of the commit. |
|
33 | Set a commit comment, and optionally change the status of the commit. | |
34 |
|
34 | |||
@@ -52,6 +52,8 b' comment_commit' | |||||
52 | :type extra_recipients: Optional(list) |
|
52 | :type extra_recipients: Optional(list) | |
53 | :param userid: Set the user name of the comment creator. |
|
53 | :param userid: Set the user name of the comment creator. | |
54 | :type userid: Optional(str or int) |
|
54 | :type userid: Optional(str or int) | |
|
55 | :param send_email: Define if this comment should also send email notification | |||
|
56 | :type send_email: Optional(bool) | |||
55 |
|
57 | |||
56 | Example error output: |
|
58 | Example error output: | |
57 |
|
59 |
@@ -3,6 +3,21 b'' | |||||
3 | search methods |
|
3 | search methods | |
4 | ============== |
|
4 | ============== | |
5 |
|
5 | |||
|
6 | get_audit_logs | |||
|
7 | -------------- | |||
|
8 | ||||
|
9 | .. py:function:: get_audit_logs(apiuser, query) | |||
|
10 | ||||
|
11 | return full audit logs based on the query. | |||
|
12 | ||||
|
13 | Please see `example query in admin > settings > audit logs` for examples | |||
|
14 | ||||
|
15 | :param apiuser: This is filled automatically from the |authtoken|. | |||
|
16 | :type apiuser: AuthUser | |||
|
17 | :param query: filter query, example: action:repo.artifact.add date:[20200401 TO 20200601]" | |||
|
18 | :type query: str | |||
|
19 | ||||
|
20 | ||||
6 | search |
|
21 | search | |
7 | ------ |
|
22 | ------ | |
8 |
|
23 |
@@ -68,7 +68,7 b' Below is example setup that can be used ' | |||||
68 | # Multiple servers can be specified using commas |
|
68 | # Multiple servers can be specified using commas | |
69 |
|
69 | |||
70 | *option*: `port` => `389` |
|
70 | *option*: `port` => `389` | |
71 |
# Custom port that the LDAP server is listening on. Default value is: 389, use 6 |
|
71 | # Custom port that the LDAP server is listening on. Default value is: 389, use 636 for LDAPS(SSL) | |
72 |
|
72 | |||
73 | *option*: `timeout` => `300` |
|
73 | *option*: `timeout` => `300` | |
74 | # Timeout for LDAP connection |
|
74 | # Timeout for LDAP connection |
@@ -58,7 +58,7 b' Below is example setup that can be used ' | |||||
58 | # Multiple servers can be specified using commas |
|
58 | # Multiple servers can be specified using commas | |
59 |
|
59 | |||
60 | *option*: `port` => `389` |
|
60 | *option*: `port` => `389` | |
61 |
# Custom port that the LDAP server is listening on. Default value is: 389, use 6 |
|
61 | # Custom port that the LDAP server is listening on. Default value is: 389, use 636 for LDAPS(SSL) | |
62 |
|
62 | |||
63 | *option*: `timeout` => `300` |
|
63 | *option*: `timeout` => `300` | |
64 | # Timeout for LDAP connection |
|
64 | # Timeout for LDAP connection |
@@ -22,7 +22,7 b' authentication::' | |||||
22 | # Multiple servers can be specified using commas |
|
22 | # Multiple servers can be specified using commas | |
23 |
|
23 | |||
24 | *option*: `port` => `389` |
|
24 | *option*: `port` => `389` | |
25 |
# Custom port that the LDAP server is listening on. Default value is: 389, use 6 |
|
25 | # Custom port that the LDAP server is listening on. Default value is: 389, use 636 for LDAPS(SSL) | |
26 |
|
26 | |||
27 | *option*: `timeout` => `300` |
|
27 | *option*: `timeout` => `300` | |
28 | # Timeout for LDAP connection |
|
28 | # Timeout for LDAP connection |
@@ -19,7 +19,7 b' Setup Nix Package Manager' | |||||
19 |
|
19 | |||
20 | To install the Nix Package Manager, please run:: |
|
20 | To install the Nix Package Manager, please run:: | |
21 |
|
21 | |||
22 |
$ curl https://nixos.org/ |
|
22 | $ curl https://releases.nixos.org/nix/nix-2.3.4/install | sh | |
23 |
|
23 | |||
24 | or go to https://nixos.org/nix/ and follow the installation instructions. |
|
24 | or go to https://nixos.org/nix/ and follow the installation instructions. | |
25 | Once this is correctly set up on your system, you should be able to use the |
|
25 | Once this is correctly set up on your system, you should be able to use the | |
@@ -47,12 +47,12 b' Switch nix to the latest STABLE channel' | |||||
47 |
|
47 | |||
48 | run:: |
|
48 | run:: | |
49 |
|
49 | |||
50 |
nix-channel --add https://nixos.org/channels/nixos- |
|
50 | nix-channel --add https://nixos.org/channels/nixos-20.03 nixpkgs | |
51 |
|
51 | |||
52 | Followed by:: |
|
52 | Followed by:: | |
53 |
|
53 | |||
54 | nix-channel --update |
|
54 | nix-channel --update | |
55 |
nix-env -i nix-2. |
|
55 | nix-env -i nix-2.3.4 | |
56 |
|
56 | |||
57 |
|
57 | |||
58 | Install required binaries |
|
58 | Install required binaries |
@@ -3,20 +3,6 b'' | |||||
3 | Known Issues |
|
3 | Known Issues | |
4 | ============ |
|
4 | ============ | |
5 |
|
5 | |||
6 | Subversion Issues |
|
|||
7 | ----------------- |
|
|||
8 |
|
||||
9 | Limited |svn| support has been achieved for this release, |
|
|||
10 | |release|. The following known issues are in development for improvement. |
|
|||
11 |
|
||||
12 | * |svn| |repo| creation: |
|
|||
13 | Terminating the VCS Server during remote importation of |svn| |repos| leaves |
|
|||
14 | the the process still running in the background. |
|
|||
15 |
|
||||
16 | * |svn| |repo| checkin/checkout: |
|
|||
17 | |svn| cloning support is not enabled by default. Please contact support if |
|
|||
18 | you want it enabled. |
|
|||
19 |
|
||||
20 | Windows Upload |
|
6 | Windows Upload | |
21 | -------------- |
|
7 | -------------- | |
22 |
|
8 | |||
@@ -49,12 +35,16 b' shipped with the optimal configuration a' | |||||
49 | To fix this issue, upgrade to |RCE| 3.3.2 or greater, and if you discover |
|
35 | To fix this issue, upgrade to |RCE| 3.3.2 or greater, and if you discover | |
50 | memory consumption issues check the VCS Server settings. |
|
36 | memory consumption issues check the VCS Server settings. | |
51 |
|
37 | |||
52 | Fedora 23 / Ubuntu 18.04 |
|
38 | Newer Operating system locales | |
53 | ------------------------ |
|
39 | ------------------------------ | |
54 |
|
40 | |||
55 | |RCC| has a know problem with locales, due to changes in glibc 2.27+ which affects |
|
41 | |RCC| has a know problem with locales, due to changes in glibc 2.27+ which affects | |
56 | the local-archive format, which is now incompatible with our used glibc 2.26. |
|
42 | the local-archive format, which is now incompatible with our used glibc 2.26. | |
57 |
|
43 | |||
|
44 | Mostly affected are: | |||
|
45 | - Fedora 23+ | |||
|
46 | - Ubuntu 18.04 | |||
|
47 | - CentOS / RHEL 8 | |||
58 |
|
48 | |||
59 | To work around this problem, you need set path to ``$LOCAL_ARCHIVE`` to the |
|
49 | To work around this problem, you need set path to ``$LOCAL_ARCHIVE`` to the | |
60 | locale package in older pre glibc 2.27 format, or set `LC_ALL=C` in your enviroment. |
|
50 | locale package in older pre glibc 2.27 format, or set `LC_ALL=C` in your enviroment. | |
@@ -74,8 +64,15 b' 2. Point ``$LOCAL_ARCHIVE`` to the local' | |||||
74 |
|
64 | |||
75 | $ export LOCALE_ARCHIVE=/home/USER/locale-archive # change to your path |
|
65 | $ export LOCALE_ARCHIVE=/home/USER/locale-archive # change to your path | |
76 |
|
66 | |||
77 |
This |
|
67 | This should be added *both* in `enviroment` variable of `~/.rccontrol/supervisor/supervisord.ini` | |
78 | or in user .bashrc/.zshrc etc, or via a startup script that |
|
68 | e.g | |
|
69 | ||||
|
70 | ``` | |||
|
71 | [supervisord] | |||
|
72 | environment = HOME=/home/user/rhodecode,LOCALE_ARCHIVE=/YOUR-PATH/locale-archive` | |||
|
73 | ``` | |||
|
74 | ||||
|
75 | and in user .bashrc/.zshrc etc, or via a startup script that | |||
79 | runs `rccontrol self-init` |
|
76 | runs `rccontrol self-init` | |
80 |
|
77 | |||
81 | If you happen to be running |RCC| from systemd, use the following |
|
78 | If you happen to be running |RCC| from systemd, use the following |
@@ -9,6 +9,7 b' Release Notes' | |||||
9 | .. toctree:: |
|
9 | .. toctree:: | |
10 | :maxdepth: 1 |
|
10 | :maxdepth: 1 | |
11 |
|
11 | |||
|
12 | release-notes-4.19.0.rst | |||
12 | release-notes-4.18.3.rst |
|
13 | release-notes-4.18.3.rst | |
13 | release-notes-4.18.2.rst |
|
14 | release-notes-4.18.2.rst | |
14 | release-notes-4.18.1.rst |
|
15 | release-notes-4.18.1.rst |
@@ -1,7 +1,7 b'' | |||||
1 | sphinx==1.8.2 |
|
1 | sphinx==1.8.2 | |
2 | six==1.11.0 |
|
2 | six==1.11.0 | |
3 | sphinx_rtd_theme==0.4.1 |
|
3 | sphinx_rtd_theme==0.4.1 | |
4 |
docutils==0.1 |
|
4 | docutils==0.16.0 | |
5 | pygments==2.3.0 |
|
5 | pygments==2.3.0 | |
6 | markupsafe==1.0.0 |
|
6 | markupsafe==1.0.0 | |
7 | jinja2==2.9.6 |
|
7 | jinja2==2.9.6 |
@@ -35,7 +35,8 b'' | |||||
35 | "<%= dirs.js.node_modules %>/moment/min/moment.min.js", |
|
35 | "<%= dirs.js.node_modules %>/moment/min/moment.min.js", | |
36 | "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js", |
|
36 | "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js", | |
37 | "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js", |
|
37 | "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js", | |
38 | "<%= dirs.js.node_modules %>/dropzone/dist/dropzone.js", |
|
38 | "<%= dirs.js.node_modules %>/dropzone/dist/min/dropzone.min.js", | |
|
39 | "<%= dirs.js.node_modules %>/sweetalert2/dist/sweetalert2.min.js", | |||
39 | "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js", |
|
40 | "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js", | |
40 | "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js", |
|
41 | "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js", | |
41 | "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js", |
|
42 | "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js", |
@@ -23,6 +23,7 b'' | |||||
23 | "grunt-contrib-watch": "^0.6.1", |
|
23 | "grunt-contrib-watch": "^0.6.1", | |
24 | "grunt-webpack": "^3.1.3", |
|
24 | "grunt-webpack": "^3.1.3", | |
25 | "grunt-contrib-uglify": "^4.0.1", |
|
25 | "grunt-contrib-uglify": "^4.0.1", | |
|
26 | "sweetalert2": "^9.10.12", | |||
26 | "jquery": "1.11.3", |
|
27 | "jquery": "1.11.3", | |
27 | "mark.js": "8.11.1", |
|
28 | "mark.js": "8.11.1", | |
28 | "jshint": "^2.9.1-rc3", |
|
29 | "jshint": "^2.9.1-rc3", |
This diff has been collapsed as it changes many lines, (1065 lines changed) Show them Hide them | |||||
@@ -49,13 +49,13 b' let' | |||||
49 | sha512 = "7+TPEAfWsRdhj1Y8UeF1759ktpVu+c3sG16rJiUC3wF9+woQ9xI1zUm2d59i7Yc3aDEJrR/Q8Y262KlOvyGVNg=="; |
|
49 | sha512 = "7+TPEAfWsRdhj1Y8UeF1759ktpVu+c3sG16rJiUC3wF9+woQ9xI1zUm2d59i7Yc3aDEJrR/Q8Y262KlOvyGVNg=="; | |
50 | }; |
|
50 | }; | |
51 | }; |
|
51 | }; | |
52 |
"@polymer/iron-autogrow-textarea-3.0. |
|
52 | "@polymer/iron-autogrow-textarea-3.0.3" = { | |
53 | name = "_at_polymer_slash_iron-autogrow-textarea"; |
|
53 | name = "_at_polymer_slash_iron-autogrow-textarea"; | |
54 | packageName = "@polymer/iron-autogrow-textarea"; |
|
54 | packageName = "@polymer/iron-autogrow-textarea"; | |
55 |
version = "3.0. |
|
55 | version = "3.0.3"; | |
56 | src = fetchurl { |
|
56 | src = fetchurl { | |
57 |
url = "https://registry.npmjs.org/@polymer/iron-autogrow-textarea/-/iron-autogrow-textarea-3.0. |
|
57 | url = "https://registry.npmjs.org/@polymer/iron-autogrow-textarea/-/iron-autogrow-textarea-3.0.3.tgz"; | |
58 | sha512 = "FgSL7APrOSL9Vu812sBCFlQ17hvnJsBAV2C2e1UAiaHhB+dyfLq8gGdGUpqVWuGJ50q4Y/49QwCNnLf85AdVYA=="; |
|
58 | sha512 = "5r0VkWrIlm0JIp5E5wlnvkw7slK72lFRZXncmrsLZF+6n1dg2rI8jt7xpFzSmUWrqpcyXwyKaGaDvUjl3j4JLA=="; | |
59 | }; |
|
59 | }; | |
60 | }; |
|
60 | }; | |
61 | "@polymer/iron-behaviors-3.0.1" = { |
|
61 | "@polymer/iron-behaviors-3.0.1" = { | |
@@ -76,13 +76,13 b' let' | |||||
76 | sha512 = "aDr0cbCNVq49q+pOqa6CZutFh+wWpwPMLpEth9swx+GkAj+gCURhuQkaUYhIo5f2egDbEioR1aeHMnPlU9dQZA=="; |
|
76 | sha512 = "aDr0cbCNVq49q+pOqa6CZutFh+wWpwPMLpEth9swx+GkAj+gCURhuQkaUYhIo5f2egDbEioR1aeHMnPlU9dQZA=="; | |
77 | }; |
|
77 | }; | |
78 | }; |
|
78 | }; | |
79 |
"@polymer/iron-fit-behavior-3.0. |
|
79 | "@polymer/iron-fit-behavior-3.0.2" = { | |
80 | name = "_at_polymer_slash_iron-fit-behavior"; |
|
80 | name = "_at_polymer_slash_iron-fit-behavior"; | |
81 | packageName = "@polymer/iron-fit-behavior"; |
|
81 | packageName = "@polymer/iron-fit-behavior"; | |
82 |
version = "3.0. |
|
82 | version = "3.0.2"; | |
83 | src = fetchurl { |
|
83 | src = fetchurl { | |
84 |
url = "https://registry.npmjs.org/@polymer/iron-fit-behavior/-/iron-fit-behavior-3.0. |
|
84 | url = "https://registry.npmjs.org/@polymer/iron-fit-behavior/-/iron-fit-behavior-3.0.2.tgz"; | |
85 | sha512 = "/M0B1L30k31vmwNBaGuZcxzUAhJSHoGccb/DF0CDKI/hT8UlkTvcyemaWdOpmHHLgY52ceKIkRwA3AeXrKyvaQ=="; |
|
85 | sha512 = "JndryJYbBR3gSN5IlST4rCHsd01+OyvYpRO6z5Zd3C6u5V/m07TwAtcf3aXwZ8WBNt2eLG28OcvdSO7XR2v2pg=="; | |
86 | }; |
|
86 | }; | |
87 | }; |
|
87 | }; | |
88 | "@polymer/iron-flex-layout-3.0.1" = { |
|
88 | "@polymer/iron-flex-layout-3.0.1" = { | |
@@ -112,13 +112,13 b' let' | |||||
112 | sha512 = "pWguPugiLYmWFV9UWxLWzZ6gm4wBwQdDy4VULKwdHCqR7OP7u98h+XDdGZsSlDPv6qoryV/e3tGHlTIT0mbzJA=="; |
|
112 | sha512 = "pWguPugiLYmWFV9UWxLWzZ6gm4wBwQdDy4VULKwdHCqR7OP7u98h+XDdGZsSlDPv6qoryV/e3tGHlTIT0mbzJA=="; | |
113 | }; |
|
113 | }; | |
114 | }; |
|
114 | }; | |
115 |
"@polymer/iron-overlay-behavior-3.0. |
|
115 | "@polymer/iron-overlay-behavior-3.0.3" = { | |
116 | name = "_at_polymer_slash_iron-overlay-behavior"; |
|
116 | name = "_at_polymer_slash_iron-overlay-behavior"; | |
117 | packageName = "@polymer/iron-overlay-behavior"; |
|
117 | packageName = "@polymer/iron-overlay-behavior"; | |
118 |
version = "3.0. |
|
118 | version = "3.0.3"; | |
119 | src = fetchurl { |
|
119 | src = fetchurl { | |
120 |
url = "https://registry.npmjs.org/@polymer/iron-overlay-behavior/-/iron-overlay-behavior-3.0. |
|
120 | url = "https://registry.npmjs.org/@polymer/iron-overlay-behavior/-/iron-overlay-behavior-3.0.3.tgz"; | |
121 | sha512 = "j1qmt6mJHCwpe1mKOvqK5kcCUPQr5LSrlqpgRDbUuLgUfNJ/vGTipjrkBlfbEUagm5FEQdc1VLPLSQP6WVuP9g=="; |
|
121 | sha512 = "Q/Fp0+uOQQ145ebZ7T8Cxl4m1tUKYjyymkjcL2rXUm+aDQGb1wA1M1LYxUF5YBqd+9lipE0PTIiYwA2ZL/sznA=="; | |
122 | }; |
|
122 | }; | |
123 | }; |
|
123 | }; | |
124 | "@polymer/iron-resizable-behavior-3.0.1" = { |
|
124 | "@polymer/iron-resizable-behavior-3.0.1" = { | |
@@ -157,13 +157,13 b' let' | |||||
157 | sha512 = "JRNBc+Oj9EWnmyLr7FcCr8T1KAnEHPh6mosln9BUdkM+qYaYsudSICh3cjTIbnj6AuF5OJidoLkM1dlyj0j6Zg=="; |
|
157 | sha512 = "JRNBc+Oj9EWnmyLr7FcCr8T1KAnEHPh6mosln9BUdkM+qYaYsudSICh3cjTIbnj6AuF5OJidoLkM1dlyj0j6Zg=="; | |
158 | }; |
|
158 | }; | |
159 | }; |
|
159 | }; | |
160 |
"@polymer/paper-ripple-3.0. |
|
160 | "@polymer/paper-ripple-3.0.2" = { | |
161 | name = "_at_polymer_slash_paper-ripple"; |
|
161 | name = "_at_polymer_slash_paper-ripple"; | |
162 | packageName = "@polymer/paper-ripple"; |
|
162 | packageName = "@polymer/paper-ripple"; | |
163 |
version = "3.0. |
|
163 | version = "3.0.2"; | |
164 | src = fetchurl { |
|
164 | src = fetchurl { | |
165 |
url = "https://registry.npmjs.org/@polymer/paper-ripple/-/paper-ripple-3.0. |
|
165 | url = "https://registry.npmjs.org/@polymer/paper-ripple/-/paper-ripple-3.0.2.tgz"; | |
166 | sha512 = "dgOe12GyCF1VZBLUQqnzGWlf3xb255FajNCVB1VFj/AtskYtoamnafa7m3a+1vs+C8qbg4Benn5KwgxVDSW4cg=="; |
|
166 | sha512 = "DnLNvYIMsiayeICroYxx6Q6Hg1cUU8HN2sbutXazlemAlGqdq80qz3TIaVdbpbt/pvjcFGX2HtntMlPstCge8Q=="; | |
167 | }; |
|
167 | }; | |
168 | }; |
|
168 | }; | |
169 | "@polymer/paper-spinner-3.0.2" = { |
|
169 | "@polymer/paper-spinner-3.0.2" = { | |
@@ -211,13 +211,13 b' let' | |||||
211 | sha512 = "yiUk09opTEnE1lK+tb501ENb+yQBi4p++Ep0eGJAHesVYKVMPNgPphVKkIizkDaU+n0SE+zXfTsRbYyOMDYXSg=="; |
|
211 | sha512 = "yiUk09opTEnE1lK+tb501ENb+yQBi4p++Ep0eGJAHesVYKVMPNgPphVKkIizkDaU+n0SE+zXfTsRbYyOMDYXSg=="; | |
212 | }; |
|
212 | }; | |
213 | }; |
|
213 | }; | |
214 |
"@polymer/polymer-3.3. |
|
214 | "@polymer/polymer-3.3.1" = { | |
215 | name = "_at_polymer_slash_polymer"; |
|
215 | name = "_at_polymer_slash_polymer"; | |
216 | packageName = "@polymer/polymer"; |
|
216 | packageName = "@polymer/polymer"; | |
217 |
version = "3.3. |
|
217 | version = "3.3.1"; | |
218 | src = fetchurl { |
|
218 | src = fetchurl { | |
219 |
url = "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.3. |
|
219 | url = "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.3.1.tgz"; | |
220 | sha512 = "rij7suomS7DxdBamnwr/Xa0V5hpypf7I9oYKseF2FWz5Xh2a3wJNpVjgJy1adXVCxqIyPhghsrthnfCt7EblsQ=="; |
|
220 | sha512 = "8KaB48tzyMjdsHdxo5KvCAaqmTe7rYDzQAoj/pyEfq9Fp4YfUaS+/xqwYj0GbiDAUNzwkmEQ7dw9cgnRNdKO8A=="; | |
221 | }; |
|
221 | }; | |
222 | }; |
|
222 | }; | |
223 | "@types/clone-0.1.30" = { |
|
223 | "@types/clone-0.1.30" = { | |
@@ -229,13 +229,13 b' let' | |||||
229 | sha1 = "e7365648c1b42136a59c7d5040637b3b5c83b614"; |
|
229 | sha1 = "e7365648c1b42136a59c7d5040637b3b5c83b614"; | |
230 | }; |
|
230 | }; | |
231 | }; |
|
231 | }; | |
232 |
"@types/node-6.14. |
|
232 | "@types/node-6.14.10" = { | |
233 | name = "_at_types_slash_node"; |
|
233 | name = "_at_types_slash_node"; | |
234 | packageName = "@types/node"; |
|
234 | packageName = "@types/node"; | |
235 |
version = "6.14. |
|
235 | version = "6.14.10"; | |
236 | src = fetchurl { |
|
236 | src = fetchurl { | |
237 |
url = "https://registry.npmjs.org/@types/node/-/node-6.14. |
|
237 | url = "https://registry.npmjs.org/@types/node/-/node-6.14.10.tgz"; | |
238 | sha512 = "leP/gxHunuazPdZaCvsCefPQxinqUDsCxCR5xaDUrY2MkYxQRFZZwU5e7GojyYsGB7QVtCi7iVEl/hoFXQYc+w=="; |
|
238 | sha512 = "pF4HjZGSog75kGq7B1InK/wt/N08BuPATo+7HRfv7gZUzccebwv/fmWVGs/j6LvSiLWpCuGGhql51M/wcQsNzA=="; | |
239 | }; |
|
239 | }; | |
240 | }; |
|
240 | }; | |
241 | "@types/parse5-2.2.34" = { |
|
241 | "@types/parse5-2.2.34" = { | |
@@ -409,22 +409,22 b' let' | |||||
409 | sha512 = "mJ3QKWtCchL1vhU/kZlJnLPuQZnlDOdZsyP0bbLWPGdYsQDnSBvyTLhzwBA3QAMlzEL9V4JHygEmK6/OTEyytA=="; |
|
409 | sha512 = "mJ3QKWtCchL1vhU/kZlJnLPuQZnlDOdZsyP0bbLWPGdYsQDnSBvyTLhzwBA3QAMlzEL9V4JHygEmK6/OTEyytA=="; | |
410 | }; |
|
410 | }; | |
411 | }; |
|
411 | }; | |
412 |
"@webcomponents/shadycss-1.9. |
|
412 | "@webcomponents/shadycss-1.9.6" = { | |
413 | name = "_at_webcomponents_slash_shadycss"; |
|
413 | name = "_at_webcomponents_slash_shadycss"; | |
414 | packageName = "@webcomponents/shadycss"; |
|
414 | packageName = "@webcomponents/shadycss"; | |
415 |
version = "1.9. |
|
415 | version = "1.9.6"; | |
416 | src = fetchurl { |
|
416 | src = fetchurl { | |
417 |
url = "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.9. |
|
417 | url = "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.9.6.tgz"; | |
418 | sha512 = "GsD7RpDVrVdgC6e+D8zQia8RGNmEGQ9/qotnVPQYPrIXhGS5xSt6ZED9YmuHz3HbLqY+E54tE1EK3tjLzSCGrw=="; |
|
418 | sha512 = "5fFjvP0jQJZoXK6YzYeYcIDGJ5oEsdjr1L9VaYLw5yxNd4aRz4srMpwCwldeNG0A6Hvr9igbG7fCsBeiiCXd7A=="; | |
419 | }; |
|
419 | }; | |
420 | }; |
|
420 | }; | |
421 |
"@webcomponents/webcomponentsjs-2.3 |
|
421 | "@webcomponents/webcomponentsjs-2.4.3" = { | |
422 | name = "_at_webcomponents_slash_webcomponentsjs"; |
|
422 | name = "_at_webcomponents_slash_webcomponentsjs"; | |
423 | packageName = "@webcomponents/webcomponentsjs"; |
|
423 | packageName = "@webcomponents/webcomponentsjs"; | |
424 |
version = "2.3 |
|
424 | version = "2.4.3"; | |
425 | src = fetchurl { |
|
425 | src = fetchurl { | |
426 |
url = "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.3 |
|
426 | url = "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.4.3.tgz"; | |
427 | sha512 = "sR6FOrNnnncRuoJDqq9QxtRsJMbIvASw4vnJwIYKVlKO3AMc+NAr/bIQNnUiTTE9pBDTJkFpVaUdjJaRdsjmyA=="; |
|
427 | sha512 = "cV4+sAmshf8ysU2USutrSRYQkJzEYKHsRCGa0CkMElGpG5747VHtkfsW3NdVIBV/m2MDKXTDydT4lkrysH7IFA=="; | |
428 | }; |
|
428 | }; | |
429 | }; |
|
429 | }; | |
430 | "@xtuc/ieee754-1.2.0" = { |
|
430 | "@xtuc/ieee754-1.2.0" = { | |
@@ -463,13 +463,13 b' let' | |||||
463 | sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a"; |
|
463 | sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a"; | |
464 | }; |
|
464 | }; | |
465 | }; |
|
465 | }; | |
466 |
"acorn-5.7. |
|
466 | "acorn-5.7.4" = { | |
467 | name = "acorn"; |
|
467 | name = "acorn"; | |
468 | packageName = "acorn"; |
|
468 | packageName = "acorn"; | |
469 |
version = "5.7. |
|
469 | version = "5.7.4"; | |
470 | src = fetchurl { |
|
470 | src = fetchurl { | |
471 |
url = "https://registry.npmjs.org/acorn/-/acorn-5.7. |
|
471 | url = "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz"; | |
472 | sha512 = "T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="; |
|
472 | sha512 = "1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg=="; | |
473 | }; |
|
473 | }; | |
474 | }; |
|
474 | }; | |
475 | "acorn-dynamic-import-3.0.0" = { |
|
475 | "acorn-dynamic-import-3.0.0" = { | |
@@ -499,13 +499,13 b' let' | |||||
499 | sha1 = "82ffb02b29e662ae53bdc20af15947706739c536"; |
|
499 | sha1 = "82ffb02b29e662ae53bdc20af15947706739c536"; | |
500 | }; |
|
500 | }; | |
501 | }; |
|
501 | }; | |
502 |
"ajv-6.10 |
|
502 | "ajv-6.12.0" = { | |
503 | name = "ajv"; |
|
503 | name = "ajv"; | |
504 | packageName = "ajv"; |
|
504 | packageName = "ajv"; | |
505 |
version = "6.10 |
|
505 | version = "6.12.0"; | |
506 | src = fetchurl { |
|
506 | src = fetchurl { | |
507 |
url = "https://registry.npmjs.org/ajv/-/ajv-6.10 |
|
507 | url = "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz"; | |
508 | sha512 = "TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw=="; |
|
508 | sha512 = "D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw=="; | |
509 | }; |
|
509 | }; | |
510 | }; |
|
510 | }; | |
511 | "ajv-keywords-3.4.1" = { |
|
511 | "ajv-keywords-3.4.1" = { | |
@@ -860,13 +860,13 b' let' | |||||
860 | sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f"; |
|
860 | sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f"; | |
861 | }; |
|
861 | }; | |
862 | }; |
|
862 | }; | |
863 |
"aws4-1. |
|
863 | "aws4-1.9.1" = { | |
864 | name = "aws4"; |
|
864 | name = "aws4"; | |
865 | packageName = "aws4"; |
|
865 | packageName = "aws4"; | |
866 |
version = "1. |
|
866 | version = "1.9.1"; | |
867 | src = fetchurl { |
|
867 | src = fetchurl { | |
868 |
url = "https://registry.npmjs.org/aws4/-/aws4-1. |
|
868 | url = "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz"; | |
869 | sha512 = "ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="; |
|
869 | sha512 = "wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="; | |
870 | }; |
|
870 | }; | |
871 | }; |
|
871 | }; | |
872 | "babel-code-frame-6.26.0" = { |
|
872 | "babel-code-frame-6.26.0" = { | |
@@ -1445,13 +1445,22 b' let' | |||||
1445 | sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="; |
|
1445 | sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="; | |
1446 | }; |
|
1446 | }; | |
1447 | }; |
|
1447 | }; | |
1448 |
"b |
|
1448 | "bindings-1.5.0" = { | |
|
1449 | name = "bindings"; | |||
|
1450 | packageName = "bindings"; | |||
|
1451 | version = "1.5.0"; | |||
|
1452 | src = fetchurl { | |||
|
1453 | url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"; | |||
|
1454 | sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="; | |||
|
1455 | }; | |||
|
1456 | }; | |||
|
1457 | "bluebird-3.7.2" = { | |||
1449 | name = "bluebird"; |
|
1458 | name = "bluebird"; | |
1450 | packageName = "bluebird"; |
|
1459 | packageName = "bluebird"; | |
1451 |
version = "3.7. |
|
1460 | version = "3.7.2"; | |
1452 | src = fetchurl { |
|
1461 | src = fetchurl { | |
1453 |
url = "https://registry.npmjs.org/bluebird/-/bluebird-3.7. |
|
1462 | url = "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz"; | |
1454 | sha512 = "DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg=="; |
|
1463 | sha512 = "XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="; | |
1455 | }; |
|
1464 | }; | |
1456 | }; |
|
1465 | }; | |
1457 | "bn.js-4.11.8" = { |
|
1466 | "bn.js-4.11.8" = { | |
@@ -1580,13 +1589,13 b' let' | |||||
1580 | sha512 = "WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ=="; |
|
1589 | sha512 = "WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ=="; | |
1581 | }; |
|
1590 | }; | |
1582 | }; |
|
1591 | }; | |
1583 |
"buffer-4.9. |
|
1592 | "buffer-4.9.2" = { | |
1584 | name = "buffer"; |
|
1593 | name = "buffer"; | |
1585 | packageName = "buffer"; |
|
1594 | packageName = "buffer"; | |
1586 |
version = "4.9. |
|
1595 | version = "4.9.2"; | |
1587 | src = fetchurl { |
|
1596 | src = fetchurl { | |
1588 |
url = "https://registry.npmjs.org/buffer/-/buffer-4.9. |
|
1597 | url = "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz"; | |
1589 | sha1 = "6d1bb601b07a4efced97094132093027c95bc298"; |
|
1598 | sha512 = "xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="; | |
1590 | }; |
|
1599 | }; | |
1591 | }; |
|
1600 | }; | |
1592 | "buffer-from-1.1.1" = { |
|
1601 | "buffer-from-1.1.1" = { | |
@@ -1670,22 +1679,22 b' let' | |||||
1670 | sha1 = "b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"; |
|
1679 | sha1 = "b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"; | |
1671 | }; |
|
1680 | }; | |
1672 | }; |
|
1681 | }; | |
1673 |
"caniuse-db-1.0.300010 |
|
1682 | "caniuse-db-1.0.30001042" = { | |
1674 | name = "caniuse-db"; |
|
1683 | name = "caniuse-db"; | |
1675 | packageName = "caniuse-db"; |
|
1684 | packageName = "caniuse-db"; | |
1676 |
version = "1.0.300010 |
|
1685 | version = "1.0.30001042"; | |
1677 | src = fetchurl { |
|
1686 | src = fetchurl { | |
1678 |
url = "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.300010 |
|
1687 | url = "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001042.tgz"; | |
1679 | sha512 = "Xn25grc0GXATFnnEX+KP3IwEv6ZdHs4CALyLKvK8pBeeBe+hSpqy3/GyKBgEp4hn6o+bI+GNeNeQBf9PBOK0EQ=="; |
|
1688 | sha512 = "2RKrB2hkLCW/8Uj32oaXj0O+N9ROo0/BF0EueWHwgs6AeeSiL+rCSsbICR3ayBJOZavgcFx65ZCw7QiafsoUFQ=="; | |
1680 | }; |
|
1689 | }; | |
1681 | }; |
|
1690 | }; | |
1682 |
"caniuse-lite-1.0.300010 |
|
1691 | "caniuse-lite-1.0.30001042" = { | |
1683 | name = "caniuse-lite"; |
|
1692 | name = "caniuse-lite"; | |
1684 | packageName = "caniuse-lite"; |
|
1693 | packageName = "caniuse-lite"; | |
1685 |
version = "1.0.300010 |
|
1694 | version = "1.0.30001042"; | |
1686 | src = fetchurl { |
|
1695 | src = fetchurl { | |
1687 |
url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.300010 |
|
1696 | url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001042.tgz"; | |
1688 | sha512 = "MXnUVX27aGs/QINz+QG1sWSLDr3P1A3Hq5EUWoIt0T7K24DuvMxZEnh3Y5aHlJW6Bz2aApJdSewdYLd8zQnUuw=="; |
|
1697 | sha512 = "igMQ4dlqnf4tWv0xjaaE02op9AJ2oQzXKjWf4EuAHFN694Uo9/EfPVIPJcmn2WkU9RqozCxx5e2KPcVClHDbDw=="; | |
1689 | }; |
|
1698 | }; | |
1690 | }; |
|
1699 | }; | |
1691 | "caseless-0.12.0" = { |
|
1700 | "caseless-0.12.0" = { | |
@@ -1742,13 +1751,13 b' let' | |||||
1742 | sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="; |
|
1751 | sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="; | |
1743 | }; |
|
1752 | }; | |
1744 | }; |
|
1753 | }; | |
1745 |
"chownr-1.1. |
|
1754 | "chownr-1.1.4" = { | |
1746 | name = "chownr"; |
|
1755 | name = "chownr"; | |
1747 | packageName = "chownr"; |
|
1756 | packageName = "chownr"; | |
1748 |
version = "1.1. |
|
1757 | version = "1.1.4"; | |
1749 | src = fetchurl { |
|
1758 | src = fetchurl { | |
1750 |
url = "https://registry.npmjs.org/chownr/-/chownr-1.1. |
|
1759 | url = "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"; | |
1751 | sha512 = "i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw=="; |
|
1760 | sha512 = "jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="; | |
1752 | }; |
|
1761 | }; | |
1753 | }; |
|
1762 | }; | |
1754 | "chrome-trace-event-1.0.2" = { |
|
1763 | "chrome-trace-event-1.0.2" = { | |
@@ -1787,13 +1796,13 b' let' | |||||
1787 | sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg=="; |
|
1796 | sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg=="; | |
1788 | }; |
|
1797 | }; | |
1789 | }; |
|
1798 | }; | |
1790 |
"clean-css-4.2. |
|
1799 | "clean-css-4.2.3" = { | |
1791 | name = "clean-css"; |
|
1800 | name = "clean-css"; | |
1792 | packageName = "clean-css"; |
|
1801 | packageName = "clean-css"; | |
1793 |
version = "4.2. |
|
1802 | version = "4.2.3"; | |
1794 | src = fetchurl { |
|
1803 | src = fetchurl { | |
1795 |
url = "https://registry.npmjs.org/clean-css/-/clean-css-4.2. |
|
1804 | url = "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz"; | |
1796 | sha512 = "4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g=="; |
|
1805 | sha512 = "VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA=="; | |
1797 | }; |
|
1806 | }; | |
1798 | }; |
|
1807 | }; | |
1799 | "cli-1.0.1" = { |
|
1808 | "cli-1.0.1" = { | |
@@ -1805,13 +1814,13 b' let' | |||||
1805 | sha1 = "22817534f24bfa4950c34d532d48ecbc621b8c14"; |
|
1814 | sha1 = "22817534f24bfa4950c34d532d48ecbc621b8c14"; | |
1806 | }; |
|
1815 | }; | |
1807 | }; |
|
1816 | }; | |
1808 |
"clipboard-2.0. |
|
1817 | "clipboard-2.0.6" = { | |
1809 | name = "clipboard"; |
|
1818 | name = "clipboard"; | |
1810 | packageName = "clipboard"; |
|
1819 | packageName = "clipboard"; | |
1811 |
version = "2.0. |
|
1820 | version = "2.0.6"; | |
1812 | src = fetchurl { |
|
1821 | src = fetchurl { | |
1813 |
url = "https://registry.npmjs.org/clipboard/-/clipboard-2.0. |
|
1822 | url = "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz"; | |
1814 | sha512 = "Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ=="; |
|
1823 | sha512 = "g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg=="; | |
1815 | }; |
|
1824 | }; | |
1816 | }; |
|
1825 | }; | |
1817 | "cliui-2.1.0" = { |
|
1826 | "cliui-2.1.0" = { | |
@@ -2066,13 +2075,13 b' let' | |||||
2066 | sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; |
|
2075 | sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; | |
2067 | }; |
|
2076 | }; | |
2068 | }; |
|
2077 | }; | |
2069 |
"convert-source-map-1. |
|
2078 | "convert-source-map-1.7.0" = { | |
2070 | name = "convert-source-map"; |
|
2079 | name = "convert-source-map"; | |
2071 | packageName = "convert-source-map"; |
|
2080 | packageName = "convert-source-map"; | |
2072 |
version = "1. |
|
2081 | version = "1.7.0"; | |
2073 | src = fetchurl { |
|
2082 | src = fetchurl { | |
2074 |
url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1. |
|
2083 | url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz"; | |
2075 | sha512 = "eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A=="; |
|
2084 | sha512 = "4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA=="; | |
2076 | }; |
|
2085 | }; | |
2077 | }; |
|
2086 | }; | |
2078 | "copy-concurrently-1.0.5" = { |
|
2087 | "copy-concurrently-1.0.5" = { | |
@@ -2102,13 +2111,13 b' let' | |||||
2102 | sha512 = "Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA=="; |
|
2111 | sha512 = "Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA=="; | |
2103 | }; |
|
2112 | }; | |
2104 | }; |
|
2113 | }; | |
2105 |
"core-js-2.6.1 |
|
2114 | "core-js-2.6.11" = { | |
2106 | name = "core-js"; |
|
2115 | name = "core-js"; | |
2107 | packageName = "core-js"; |
|
2116 | packageName = "core-js"; | |
2108 |
version = "2.6.1 |
|
2117 | version = "2.6.11"; | |
2109 | src = fetchurl { |
|
2118 | src = fetchurl { | |
2110 |
url = "https://registry.npmjs.org/core-js/-/core-js-2.6.1 |
|
2119 | url = "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz"; | |
2111 | sha512 = "I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA=="; |
|
2120 | sha512 = "5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="; | |
2112 | }; |
|
2121 | }; | |
2113 | }; |
|
2122 | }; | |
2114 | "core-util-is-1.0.2" = { |
|
2123 | "core-util-is-1.0.2" = { | |
@@ -2201,13 +2210,13 b' let' | |||||
2201 | sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858"; |
|
2210 | sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858"; | |
2202 | }; |
|
2211 | }; | |
2203 | }; |
|
2212 | }; | |
2204 |
"css-selector-tokenizer-0.7. |
|
2213 | "css-selector-tokenizer-0.7.2" = { | |
2205 | name = "css-selector-tokenizer"; |
|
2214 | name = "css-selector-tokenizer"; | |
2206 | packageName = "css-selector-tokenizer"; |
|
2215 | packageName = "css-selector-tokenizer"; | |
2207 |
version = "0.7. |
|
2216 | version = "0.7.2"; | |
2208 | src = fetchurl { |
|
2217 | src = fetchurl { | |
2209 |
url = "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7. |
|
2218 | url = "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz"; | |
2210 | sha512 = "xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA=="; |
|
2219 | sha512 = "yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw=="; | |
2211 | }; |
|
2220 | }; | |
2212 | }; |
|
2221 | }; | |
2213 | "css-what-2.1.3" = { |
|
2222 | "css-what-2.1.3" = { | |
@@ -2219,13 +2228,13 b' let' | |||||
2219 | sha512 = "a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="; |
|
2228 | sha512 = "a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="; | |
2220 | }; |
|
2229 | }; | |
2221 | }; |
|
2230 | }; | |
2222 |
"cssesc-0 |
|
2231 | "cssesc-3.0.0" = { | |
2223 | name = "cssesc"; |
|
2232 | name = "cssesc"; | |
2224 | packageName = "cssesc"; |
|
2233 | packageName = "cssesc"; | |
2225 |
version = "0 |
|
2234 | version = "3.0.0"; | |
2226 | src = fetchurl { |
|
2235 | src = fetchurl { | |
2227 |
url = "https://registry.npmjs.org/cssesc/-/cssesc-0 |
|
2236 | url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"; | |
2228 | sha1 = "c814903e45623371a0477b40109aaafbeeaddbb4"; |
|
2237 | sha512 = "/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="; | |
2229 | }; |
|
2238 | }; | |
2230 | }; |
|
2239 | }; | |
2231 | "cssnano-3.10.0" = { |
|
2240 | "cssnano-3.10.0" = { | |
@@ -2390,13 +2399,13 b' let' | |||||
2390 | sha512 = "IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="; |
|
2399 | sha512 = "IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="; | |
2391 | }; |
|
2400 | }; | |
2392 | }; |
|
2401 | }; | |
2393 |
"des.js-1.0. |
|
2402 | "des.js-1.0.1" = { | |
2394 | name = "des.js"; |
|
2403 | name = "des.js"; | |
2395 | packageName = "des.js"; |
|
2404 | packageName = "des.js"; | |
2396 |
version = "1.0. |
|
2405 | version = "1.0.1"; | |
2397 | src = fetchurl { |
|
2406 | src = fetchurl { | |
2398 |
url = "https://registry.npmjs.org/des.js/-/des.js-1.0. |
|
2407 | url = "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz"; | |
2399 | sha1 = "c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"; |
|
2408 | sha512 = "Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA=="; | |
2400 | }; |
|
2409 | }; | |
2401 | }; |
|
2410 | }; | |
2402 | "detect-file-1.0.0" = { |
|
2411 | "detect-file-1.0.0" = { | |
@@ -2444,13 +2453,13 b' let' | |||||
2444 | sha512 = "gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA=="; |
|
2453 | sha512 = "gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA=="; | |
2445 | }; |
|
2454 | }; | |
2446 | }; |
|
2455 | }; | |
2447 |
"dom-serializer-0.2. |
|
2456 | "dom-serializer-0.2.2" = { | |
2448 | name = "dom-serializer"; |
|
2457 | name = "dom-serializer"; | |
2449 | packageName = "dom-serializer"; |
|
2458 | packageName = "dom-serializer"; | |
2450 |
version = "0.2. |
|
2459 | version = "0.2.2"; | |
2451 | src = fetchurl { |
|
2460 | src = fetchurl { | |
2452 |
url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2. |
|
2461 | url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz"; | |
2453 | sha512 = "sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q=="; |
|
2462 | sha512 = "2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="; | |
2454 | }; |
|
2463 | }; | |
2455 | }; |
|
2464 | }; | |
2456 | "dom5-2.3.0" = { |
|
2465 | "dom5-2.3.0" = { | |
@@ -2507,13 +2516,13 b' let' | |||||
2507 | sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf"; |
|
2516 | sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf"; | |
2508 | }; |
|
2517 | }; | |
2509 | }; |
|
2518 | }; | |
2510 |
"dropzone-5. |
|
2519 | "dropzone-5.7.0" = { | |
2511 | name = "dropzone"; |
|
2520 | name = "dropzone"; | |
2512 | packageName = "dropzone"; |
|
2521 | packageName = "dropzone"; | |
2513 |
version = "5. |
|
2522 | version = "5.7.0"; | |
2514 | src = fetchurl { |
|
2523 | src = fetchurl { | |
2515 |
url = "https://registry.npmjs.org/dropzone/-/dropzone-5. |
|
2524 | url = "https://registry.npmjs.org/dropzone/-/dropzone-5.7.0.tgz"; | |
2516 | sha512 = "3VduRWLxx9hbVr42QieQN25mx/I61/mRdUSuxAmDGdDqZIN8qtP7tcKMa3KfpJjuGjOJGYYUzzeq6eGDnkzesA=="; |
|
2525 | sha512 = "kOltiZXH5cO/72I22JjE+w6BoT6uaVLfWdFMsi1PMKFkU6BZWpqRwjnsRm0o6ANGTBuZar5Piu7m/CbKqRPiYg=="; | |
2517 | }; |
|
2526 | }; | |
2518 | }; |
|
2527 | }; | |
2519 | "duplexer-0.1.1" = { |
|
2528 | "duplexer-0.1.1" = { | |
@@ -2543,22 +2552,22 b' let' | |||||
2543 | sha1 = "3a83a904e54353287874c564b7549386849a98c9"; |
|
2552 | sha1 = "3a83a904e54353287874c564b7549386849a98c9"; | |
2544 | }; |
|
2553 | }; | |
2545 | }; |
|
2554 | }; | |
2546 |
"electron-to-chromium-1.3. |
|
2555 | "electron-to-chromium-1.3.412" = { | |
2547 | name = "electron-to-chromium"; |
|
2556 | name = "electron-to-chromium"; | |
2548 | packageName = "electron-to-chromium"; |
|
2557 | packageName = "electron-to-chromium"; | |
2549 |
version = "1.3. |
|
2558 | version = "1.3.412"; | |
2550 | src = fetchurl { |
|
2559 | src = fetchurl { | |
2551 |
url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3. |
|
2560 | url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.412.tgz"; | |
2552 | sha512 = "1qConyiVEbj4xZRBXqtGR003+9tV0rJF0PS6aeO0Ln/UL637js9hdwweCl07meh/kJoI2N4W8q3R3g3F5z46ww=="; |
|
2561 | sha512 = "4bVdSeJScR8fT7ERveLWbxemY5uXEHVseqMRyORosiKcTUSGtVwBkV8uLjXCqoFLeImA57Z9hbz3TOid01U4Hw=="; | |
2553 | }; |
|
2562 | }; | |
2554 | }; |
|
2563 | }; | |
2555 |
"elliptic-6.5. |
|
2564 | "elliptic-6.5.2" = { | |
2556 | name = "elliptic"; |
|
2565 | name = "elliptic"; | |
2557 | packageName = "elliptic"; |
|
2566 | packageName = "elliptic"; | |
2558 |
version = "6.5. |
|
2567 | version = "6.5.2"; | |
2559 | src = fetchurl { |
|
2568 | src = fetchurl { | |
2560 |
url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5. |
|
2569 | url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz"; | |
2561 | sha512 = "xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg=="; |
|
2570 | sha512 = "f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw=="; | |
2562 | }; |
|
2571 | }; | |
2563 | }; |
|
2572 | }; | |
2564 | "emojis-list-2.1.0" = { |
|
2573 | "emojis-list-2.1.0" = { | |
@@ -2570,6 +2579,15 b' let' | |||||
2570 | sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389"; |
|
2579 | sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389"; | |
2571 | }; |
|
2580 | }; | |
2572 | }; |
|
2581 | }; | |
|
2582 | "emojis-list-3.0.0" = { | |||
|
2583 | name = "emojis-list"; | |||
|
2584 | packageName = "emojis-list"; | |||
|
2585 | version = "3.0.0"; | |||
|
2586 | src = fetchurl { | |||
|
2587 | url = "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz"; | |||
|
2588 | sha512 = "/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="; | |||
|
2589 | }; | |||
|
2590 | }; | |||
2573 | "end-of-stream-1.4.4" = { |
|
2591 | "end-of-stream-1.4.4" = { | |
2574 | name = "end-of-stream"; |
|
2592 | name = "end-of-stream"; | |
2575 | packageName = "end-of-stream"; |
|
2593 | packageName = "end-of-stream"; | |
@@ -2624,22 +2642,22 b' let' | |||||
2624 | sha512 = "MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg=="; |
|
2642 | sha512 = "MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg=="; | |
2625 | }; |
|
2643 | }; | |
2626 | }; |
|
2644 | }; | |
2627 |
"es-abstract-1.1 |
|
2645 | "es-abstract-1.17.5" = { | |
2628 | name = "es-abstract"; |
|
2646 | name = "es-abstract"; | |
2629 | packageName = "es-abstract"; |
|
2647 | packageName = "es-abstract"; | |
2630 |
version = "1.1 |
|
2648 | version = "1.17.5"; | |
2631 | src = fetchurl { |
|
2649 | src = fetchurl { | |
2632 |
url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.1 |
|
2650 | url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz"; | |
2633 | sha512 = "xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg=="; |
|
2651 | sha512 = "BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg=="; | |
2634 | }; |
|
2652 | }; | |
2635 | }; |
|
2653 | }; | |
2636 |
"es-to-primitive-1.2. |
|
2654 | "es-to-primitive-1.2.1" = { | |
2637 | name = "es-to-primitive"; |
|
2655 | name = "es-to-primitive"; | |
2638 | packageName = "es-to-primitive"; |
|
2656 | packageName = "es-to-primitive"; | |
2639 |
version = "1.2. |
|
2657 | version = "1.2.1"; | |
2640 | src = fetchurl { |
|
2658 | src = fetchurl { | |
2641 |
url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2. |
|
2659 | url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz"; | |
2642 | sha512 = "qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg=="; |
|
2660 | sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="; | |
2643 | }; |
|
2661 | }; | |
2644 | }; |
|
2662 | }; | |
2645 | "es6-templates-0.2.3" = { |
|
2663 | "es6-templates-0.2.3" = { | |
@@ -2741,13 +2759,13 b' let' | |||||
2741 | sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab"; |
|
2759 | sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab"; | |
2742 | }; |
|
2760 | }; | |
2743 | }; |
|
2761 | }; | |
2744 |
"events-3. |
|
2762 | "events-3.1.0" = { | |
2745 | name = "events"; |
|
2763 | name = "events"; | |
2746 | packageName = "events"; |
|
2764 | packageName = "events"; | |
2747 |
version = "3. |
|
2765 | version = "3.1.0"; | |
2748 | src = fetchurl { |
|
2766 | src = fetchurl { | |
2749 |
url = "https://registry.npmjs.org/events/-/events-3. |
|
2767 | url = "https://registry.npmjs.org/events/-/events-3.1.0.tgz"; | |
2750 | sha512 = "Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA=="; |
|
2768 | sha512 = "Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="; | |
2751 | }; |
|
2769 | }; | |
2752 | }; |
|
2770 | }; | |
2753 | "evp_bytestokey-1.0.3" = { |
|
2771 | "evp_bytestokey-1.0.3" = { | |
@@ -2849,22 +2867,22 b' let' | |||||
2849 | sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; |
|
2867 | sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; | |
2850 | }; |
|
2868 | }; | |
2851 | }; |
|
2869 | }; | |
2852 |
"fast-deep-equal- |
|
2870 | "fast-deep-equal-3.1.1" = { | |
2853 | name = "fast-deep-equal"; |
|
2871 | name = "fast-deep-equal"; | |
2854 | packageName = "fast-deep-equal"; |
|
2872 | packageName = "fast-deep-equal"; | |
2855 |
version = " |
|
2873 | version = "3.1.1"; | |
2856 | src = fetchurl { |
|
2874 | src = fetchurl { | |
2857 |
url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal- |
|
2875 | url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"; | |
2858 | sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"; |
|
2876 | sha512 = "8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="; | |
2859 | }; |
|
2877 | }; | |
2860 | }; |
|
2878 | }; | |
2861 |
"fast-json-stable-stringify-2. |
|
2879 | "fast-json-stable-stringify-2.1.0" = { | |
2862 | name = "fast-json-stable-stringify"; |
|
2880 | name = "fast-json-stable-stringify"; | |
2863 | packageName = "fast-json-stable-stringify"; |
|
2881 | packageName = "fast-json-stable-stringify"; | |
2864 |
version = "2. |
|
2882 | version = "2.1.0"; | |
2865 | src = fetchurl { |
|
2883 | src = fetchurl { | |
2866 |
url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2. |
|
2884 | url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; | |
2867 | sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; |
|
2885 | sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="; | |
2868 | }; |
|
2886 | }; | |
2869 | }; |
|
2887 | }; | |
2870 | "fastparse-1.1.2" = { |
|
2888 | "fastparse-1.1.2" = { | |
@@ -2912,6 +2930,15 b' let' | |||||
2912 | sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b"; |
|
2930 | sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b"; | |
2913 | }; |
|
2931 | }; | |
2914 | }; |
|
2932 | }; | |
|
2933 | "file-uri-to-path-1.0.0" = { | |||
|
2934 | name = "file-uri-to-path"; | |||
|
2935 | packageName = "file-uri-to-path"; | |||
|
2936 | version = "1.0.0"; | |||
|
2937 | src = fetchurl { | |||
|
2938 | url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"; | |||
|
2939 | sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="; | |||
|
2940 | }; | |||
|
2941 | }; | |||
2915 | "fill-range-4.0.0" = { |
|
2942 | "fill-range-4.0.0" = { | |
2916 | name = "fill-range"; |
|
2943 | name = "fill-range"; | |
2917 | packageName = "fill-range"; |
|
2944 | packageName = "fill-range"; | |
@@ -3074,13 +3101,13 b' let' | |||||
3074 | sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; |
|
3101 | sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; | |
3075 | }; |
|
3102 | }; | |
3076 | }; |
|
3103 | }; | |
3077 |
"fsevents-1.2. |
|
3104 | "fsevents-1.2.12" = { | |
3078 | name = "fsevents"; |
|
3105 | name = "fsevents"; | |
3079 | packageName = "fsevents"; |
|
3106 | packageName = "fsevents"; | |
3080 |
version = "1.2. |
|
3107 | version = "1.2.12"; | |
3081 | src = fetchurl { |
|
3108 | src = fetchurl { | |
3082 |
url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2. |
|
3109 | url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz"; | |
3083 | sha512 = "oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw=="; |
|
3110 | sha512 = "Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q=="; | |
3084 | }; |
|
3111 | }; | |
3085 | }; |
|
3112 | }; | |
3086 | "function-bind-1.1.1" = { |
|
3113 | "function-bind-1.1.1" = { | |
@@ -3164,13 +3191,13 b' let' | |||||
3164 | sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d"; |
|
3191 | sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d"; | |
3165 | }; |
|
3192 | }; | |
3166 | }; |
|
3193 | }; | |
3167 |
"glob-7.1. |
|
3194 | "glob-7.1.6" = { | |
3168 | name = "glob"; |
|
3195 | name = "glob"; | |
3169 | packageName = "glob"; |
|
3196 | packageName = "glob"; | |
3170 |
version = "7.1. |
|
3197 | version = "7.1.6"; | |
3171 | src = fetchurl { |
|
3198 | src = fetchurl { | |
3172 |
url = "https://registry.npmjs.org/glob/-/glob-7.1. |
|
3199 | url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"; | |
3173 | sha512 = "J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ=="; |
|
3200 | sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA=="; | |
3174 | }; |
|
3201 | }; | |
3175 | }; |
|
3202 | }; | |
3176 | "glob-parent-3.1.0" = { |
|
3203 | "glob-parent-3.1.0" = { | |
@@ -3452,13 +3479,13 b' let' | |||||
3452 | sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; |
|
3479 | sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; | |
3453 | }; |
|
3480 | }; | |
3454 | }; |
|
3481 | }; | |
3455 |
"has-symbols-1.0. |
|
3482 | "has-symbols-1.0.1" = { | |
3456 | name = "has-symbols"; |
|
3483 | name = "has-symbols"; | |
3457 | packageName = "has-symbols"; |
|
3484 | packageName = "has-symbols"; | |
3458 |
version = "1.0. |
|
3485 | version = "1.0.1"; | |
3459 | src = fetchurl { |
|
3486 | src = fetchurl { | |
3460 |
url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0. |
|
3487 | url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz"; | |
3461 | sha1 = "ba1a8f1af2a0fc39650f5c850367704122063b44"; |
|
3488 | sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="; | |
3462 | }; |
|
3489 | }; | |
3463 | }; |
|
3490 | }; | |
3464 | "has-value-0.3.1" = { |
|
3491 | "has-value-0.3.1" = { | |
@@ -3884,13 +3911,13 b' let' | |||||
3884 | sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="; |
|
3911 | sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="; | |
3885 | }; |
|
3912 | }; | |
3886 | }; |
|
3913 | }; | |
3887 |
"is-callable-1.1. |
|
3914 | "is-callable-1.1.5" = { | |
3888 | name = "is-callable"; |
|
3915 | name = "is-callable"; | |
3889 | packageName = "is-callable"; |
|
3916 | packageName = "is-callable"; | |
3890 |
version = "1.1. |
|
3917 | version = "1.1.5"; | |
3891 | src = fetchurl { |
|
3918 | src = fetchurl { | |
3892 |
url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1. |
|
3919 | url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz"; | |
3893 | sha512 = "r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="; |
|
3920 | sha512 = "ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="; | |
3894 | }; |
|
3921 | }; | |
3895 | }; |
|
3922 | }; | |
3896 | "is-data-descriptor-0.1.4" = { |
|
3923 | "is-data-descriptor-0.1.4" = { | |
@@ -3911,13 +3938,13 b' let' | |||||
3911 | sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ=="; |
|
3938 | sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ=="; | |
3912 | }; |
|
3939 | }; | |
3913 | }; |
|
3940 | }; | |
3914 |
"is-date-object-1.0. |
|
3941 | "is-date-object-1.0.2" = { | |
3915 | name = "is-date-object"; |
|
3942 | name = "is-date-object"; | |
3916 | packageName = "is-date-object"; |
|
3943 | packageName = "is-date-object"; | |
3917 |
version = "1.0. |
|
3944 | version = "1.0.2"; | |
3918 | src = fetchurl { |
|
3945 | src = fetchurl { | |
3919 |
url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0. |
|
3946 | url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz"; | |
3920 | sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"; |
|
3947 | sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="; | |
3921 | }; |
|
3948 | }; | |
3922 | }; |
|
3949 | }; | |
3923 | "is-descriptor-0.1.6" = { |
|
3950 | "is-descriptor-0.1.6" = { | |
@@ -3965,13 +3992,13 b' let' | |||||
3965 | sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; |
|
3992 | sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; | |
3966 | }; |
|
3993 | }; | |
3967 | }; |
|
3994 | }; | |
3968 |
"is-finite-1.0 |
|
3995 | "is-finite-1.1.0" = { | |
3969 | name = "is-finite"; |
|
3996 | name = "is-finite"; | |
3970 | packageName = "is-finite"; |
|
3997 | packageName = "is-finite"; | |
3971 |
version = "1.0 |
|
3998 | version = "1.1.0"; | |
3972 | src = fetchurl { |
|
3999 | src = fetchurl { | |
3973 |
url = "https://registry.npmjs.org/is-finite/-/is-finite-1.0 |
|
4000 | url = "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz"; | |
3974 | sha1 = "cc6677695602be550ef11e8b4aa6305342b6d0aa"; |
|
4001 | sha512 = "cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="; | |
3975 | }; |
|
4002 | }; | |
3976 | }; |
|
4003 | }; | |
3977 | "is-fullwidth-code-point-1.0.0" = { |
|
4004 | "is-fullwidth-code-point-1.0.0" = { | |
@@ -4037,13 +4064,13 b' let' | |||||
4037 | sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="; |
|
4064 | sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="; | |
4038 | }; |
|
4065 | }; | |
4039 | }; |
|
4066 | }; | |
4040 |
"is-regex-1.0. |
|
4067 | "is-regex-1.0.5" = { | |
4041 | name = "is-regex"; |
|
4068 | name = "is-regex"; | |
4042 | packageName = "is-regex"; |
|
4069 | packageName = "is-regex"; | |
4043 |
version = "1.0. |
|
4070 | version = "1.0.5"; | |
4044 | src = fetchurl { |
|
4071 | src = fetchurl { | |
4045 |
url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0. |
|
4072 | url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz"; | |
4046 | sha1 = "5517489b547091b0930e095654ced25ee97e9491"; |
|
4073 | sha512 = "vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ=="; | |
4047 | }; |
|
4074 | }; | |
4048 | }; |
|
4075 | }; | |
4049 | "is-relative-1.0.0" = { |
|
4076 | "is-relative-1.0.0" = { | |
@@ -4073,13 +4100,13 b' let' | |||||
4073 | sha1 = "cf61090da0d9efbcab8722deba6f032208dbb0e9"; |
|
4100 | sha1 = "cf61090da0d9efbcab8722deba6f032208dbb0e9"; | |
4074 | }; |
|
4101 | }; | |
4075 | }; |
|
4102 | }; | |
4076 |
"is-symbol-1.0. |
|
4103 | "is-symbol-1.0.3" = { | |
4077 | name = "is-symbol"; |
|
4104 | name = "is-symbol"; | |
4078 | packageName = "is-symbol"; |
|
4105 | packageName = "is-symbol"; | |
4079 |
version = "1.0. |
|
4106 | version = "1.0.3"; | |
4080 | src = fetchurl { |
|
4107 | src = fetchurl { | |
4081 |
url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0. |
|
4108 | url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz"; | |
4082 | sha512 = "HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw=="; |
|
4109 | sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ=="; | |
4083 | }; |
|
4110 | }; | |
4084 | }; |
|
4111 | }; | |
4085 | "is-typedarray-1.0.0" = { |
|
4112 | "is-typedarray-1.0.0" = { | |
@@ -4172,13 +4199,13 b' let' | |||||
4172 | sha1 = "dd8b74278b27102d29df63eae28308a8cfa1b583"; |
|
4199 | sha1 = "dd8b74278b27102d29df63eae28308a8cfa1b583"; | |
4173 | }; |
|
4200 | }; | |
4174 | }; |
|
4201 | }; | |
4175 |
"js-base64-2.5. |
|
4202 | "js-base64-2.5.2" = { | |
4176 | name = "js-base64"; |
|
4203 | name = "js-base64"; | |
4177 | packageName = "js-base64"; |
|
4204 | packageName = "js-base64"; | |
4178 |
version = "2.5. |
|
4205 | version = "2.5.2"; | |
4179 | src = fetchurl { |
|
4206 | src = fetchurl { | |
4180 |
url = "https://registry.npmjs.org/js-base64/-/js-base64-2.5. |
|
4207 | url = "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz"; | |
4181 | sha512 = "M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw=="; |
|
4208 | sha512 = "Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ=="; | |
4182 | }; |
|
4209 | }; | |
4183 | }; |
|
4210 | }; | |
4184 | "js-tokens-3.0.2" = { |
|
4211 | "js-tokens-3.0.2" = { | |
@@ -4235,13 +4262,13 b' let' | |||||
4235 | sha1 = "46c3fec8c1892b12b0833db9bc7622176dbab34b"; |
|
4262 | sha1 = "46c3fec8c1892b12b0833db9bc7622176dbab34b"; | |
4236 | }; |
|
4263 | }; | |
4237 | }; |
|
4264 | }; | |
4238 |
"jshint-2.10 |
|
4265 | "jshint-2.11.0" = { | |
4239 | name = "jshint"; |
|
4266 | name = "jshint"; | |
4240 | packageName = "jshint"; |
|
4267 | packageName = "jshint"; | |
4241 |
version = "2.10 |
|
4268 | version = "2.11.0"; | |
4242 | src = fetchurl { |
|
4269 | src = fetchurl { | |
4243 |
url = "https://registry.npmjs.org/jshint/-/jshint-2.10 |
|
4270 | url = "https://registry.npmjs.org/jshint/-/jshint-2.11.0.tgz"; | |
4244 | sha512 = "e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA=="; |
|
4271 | sha512 = "ooaD/hrBPhu35xXW4gn+o3SOuzht73gdBuffgJzrZBJZPGgGiiTvJEgTyxFvBO2nz0+X1G6etF8SzUODTlLY6Q=="; | |
4245 | }; |
|
4272 | }; | |
4246 | }; |
|
4273 | }; | |
4247 | "jshint-2.9.7" = { |
|
4274 | "jshint-2.9.7" = { | |
@@ -4361,13 +4388,13 b' let' | |||||
4361 | sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="; |
|
4388 | sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="; | |
4362 | }; |
|
4389 | }; | |
4363 | }; |
|
4390 | }; | |
4364 |
"kind-of-6.0. |
|
4391 | "kind-of-6.0.3" = { | |
4365 | name = "kind-of"; |
|
4392 | name = "kind-of"; | |
4366 | packageName = "kind-of"; |
|
4393 | packageName = "kind-of"; | |
4367 |
version = "6.0. |
|
4394 | version = "6.0.3"; | |
4368 | src = fetchurl { |
|
4395 | src = fetchurl { | |
4369 |
url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0. |
|
4396 | url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"; | |
4370 | sha512 = "s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="; |
|
4397 | sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="; | |
4371 | }; |
|
4398 | }; | |
4372 | }; |
|
4399 | }; | |
4373 | "lazy-cache-1.0.4" = { |
|
4400 | "lazy-cache-1.0.4" = { | |
@@ -4424,13 +4451,13 b' let' | |||||
4424 | sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348"; |
|
4451 | sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348"; | |
4425 | }; |
|
4452 | }; | |
4426 | }; |
|
4453 | }; | |
4427 |
"loader-utils-1. |
|
4454 | "loader-utils-1.4.0" = { | |
4428 | name = "loader-utils"; |
|
4455 | name = "loader-utils"; | |
4429 | packageName = "loader-utils"; |
|
4456 | packageName = "loader-utils"; | |
4430 |
version = "1. |
|
4457 | version = "1.4.0"; | |
4431 | src = fetchurl { |
|
4458 | src = fetchurl { | |
4432 |
url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1. |
|
4459 | url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz"; | |
4433 | sha512 = "fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA=="; |
|
4460 | sha512 = "qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA=="; | |
4434 | }; |
|
4461 | }; | |
4435 | }; |
|
4462 | }; | |
4436 | "locate-path-2.0.0" = { |
|
4463 | "locate-path-2.0.0" = { | |
@@ -4622,13 +4649,13 b' let' | |||||
4622 | sha1 = "180f1f9ebef8b0e638e4166ad52db879beb2ffc5"; |
|
4649 | sha1 = "180f1f9ebef8b0e638e4166ad52db879beb2ffc5"; | |
4623 | }; |
|
4650 | }; | |
4624 | }; |
|
4651 | }; | |
4625 |
"math-expression-evaluator-1.2. |
|
4652 | "math-expression-evaluator-1.2.22" = { | |
4626 | name = "math-expression-evaluator"; |
|
4653 | name = "math-expression-evaluator"; | |
4627 | packageName = "math-expression-evaluator"; |
|
4654 | packageName = "math-expression-evaluator"; | |
4628 |
version = "1.2. |
|
4655 | version = "1.2.22"; | |
4629 | src = fetchurl { |
|
4656 | src = fetchurl { | |
4630 |
url = "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2. |
|
4657 | url = "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz"; | |
4631 | sha1 = "de819fdbcd84dccd8fae59c6aeb79615b9d266ac"; |
|
4658 | sha512 = "L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ=="; | |
4632 | }; |
|
4659 | }; | |
4633 | }; |
|
4660 | }; | |
4634 | "maxmin-2.1.0" = { |
|
4661 | "maxmin-2.1.0" = { | |
@@ -4703,22 +4730,22 b' let' | |||||
4703 | sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="; |
|
4730 | sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="; | |
4704 | }; |
|
4731 | }; | |
4705 | }; |
|
4732 | }; | |
4706 |
"mime-db-1.4 |
|
4733 | "mime-db-1.43.0" = { | |
4707 | name = "mime-db"; |
|
4734 | name = "mime-db"; | |
4708 | packageName = "mime-db"; |
|
4735 | packageName = "mime-db"; | |
4709 |
version = "1.4 |
|
4736 | version = "1.43.0"; | |
4710 | src = fetchurl { |
|
4737 | src = fetchurl { | |
4711 |
url = "https://registry.npmjs.org/mime-db/-/mime-db-1.4 |
|
4738 | url = "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz"; | |
4712 | sha512 = "jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="; |
|
4739 | sha512 = "+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="; | |
4713 | }; |
|
4740 | }; | |
4714 | }; |
|
4741 | }; | |
4715 |
"mime-types-2.1.2 |
|
4742 | "mime-types-2.1.26" = { | |
4716 | name = "mime-types"; |
|
4743 | name = "mime-types"; | |
4717 | packageName = "mime-types"; |
|
4744 | packageName = "mime-types"; | |
4718 |
version = "2.1.2 |
|
4745 | version = "2.1.26"; | |
4719 | src = fetchurl { |
|
4746 | src = fetchurl { | |
4720 |
url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.2 |
|
4747 | url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz"; | |
4721 | sha512 = "WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ=="; |
|
4748 | sha512 = "01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ=="; | |
4722 | }; |
|
4749 | }; | |
4723 | }; |
|
4750 | }; | |
4724 | "mimic-fn-2.1.0" = { |
|
4751 | "mimic-fn-2.1.0" = { | |
@@ -4775,22 +4802,13 b' let' | |||||
4775 | sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="; |
|
4802 | sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="; | |
4776 | }; |
|
4803 | }; | |
4777 | }; |
|
4804 | }; | |
4778 |
"minimist- |
|
4805 | "minimist-1.2.5" = { | |
4779 | name = "minimist"; |
|
4806 | name = "minimist"; | |
4780 | packageName = "minimist"; |
|
4807 | packageName = "minimist"; | |
4781 |
version = " |
|
4808 | version = "1.2.5"; | |
4782 | src = fetchurl { |
|
4809 | src = fetchurl { | |
4783 |
url = "https://registry.npmjs.org/minimist/-/minimist- |
|
4810 | url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"; | |
4784 | sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; |
|
4811 | sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="; | |
4785 | }; |
|
|||
4786 | }; |
|
|||
4787 | "minimist-1.2.0" = { |
|
|||
4788 | name = "minimist"; |
|
|||
4789 | packageName = "minimist"; |
|
|||
4790 | version = "1.2.0"; |
|
|||
4791 | src = fetchurl { |
|
|||
4792 | url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz"; |
|
|||
4793 | sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; |
|
|||
4794 | }; |
|
4812 | }; | |
4795 | }; |
|
4813 | }; | |
4796 | "mississippi-2.0.0" = { |
|
4814 | "mississippi-2.0.0" = { | |
@@ -4811,13 +4829,13 b' let' | |||||
4811 | sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA=="; |
|
4829 | sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA=="; | |
4812 | }; |
|
4830 | }; | |
4813 | }; |
|
4831 | }; | |
4814 |
"mkdirp-0.5. |
|
4832 | "mkdirp-0.5.5" = { | |
4815 | name = "mkdirp"; |
|
4833 | name = "mkdirp"; | |
4816 | packageName = "mkdirp"; |
|
4834 | packageName = "mkdirp"; | |
4817 |
version = "0.5. |
|
4835 | version = "0.5.5"; | |
4818 | src = fetchurl { |
|
4836 | src = fetchurl { | |
4819 |
url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5. |
|
4837 | url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"; | |
4820 | sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; |
|
4838 | sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=="; | |
4821 | }; |
|
4839 | }; | |
4822 | }; |
|
4840 | }; | |
4823 | "moment-2.24.0" = { |
|
4841 | "moment-2.24.0" = { | |
@@ -4829,13 +4847,13 b' let' | |||||
4829 | sha512 = "bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="; |
|
4847 | sha512 = "bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="; | |
4830 | }; |
|
4848 | }; | |
4831 | }; |
|
4849 | }; | |
4832 |
"mousetrap-1.6. |
|
4850 | "mousetrap-1.6.5" = { | |
4833 | name = "mousetrap"; |
|
4851 | name = "mousetrap"; | |
4834 | packageName = "mousetrap"; |
|
4852 | packageName = "mousetrap"; | |
4835 |
version = "1.6. |
|
4853 | version = "1.6.5"; | |
4836 | src = fetchurl { |
|
4854 | src = fetchurl { | |
4837 |
url = "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6. |
|
4855 | url = "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz"; | |
4838 | sha512 = "bd+nzwhhs9ifsUrC2tWaSgm24/oo2c83zaRyZQF06hYA6sANfsXHtnZ19AbbbDXCDzeH5nZBSQ4NvCjgD62tJA=="; |
|
4856 | sha512 = "QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA=="; | |
4839 | }; |
|
4857 | }; | |
4840 | }; |
|
4858 | }; | |
4841 | "move-concurrently-1.0.1" = { |
|
4859 | "move-concurrently-1.0.1" = { | |
@@ -4928,13 +4946,13 b' let' | |||||
4928 | sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d"; |
|
4946 | sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d"; | |
4929 | }; |
|
4947 | }; | |
4930 | }; |
|
4948 | }; | |
4931 |
"nopt-4.0. |
|
4949 | "nopt-4.0.3" = { | |
4932 | name = "nopt"; |
|
4950 | name = "nopt"; | |
4933 | packageName = "nopt"; |
|
4951 | packageName = "nopt"; | |
4934 |
version = "4.0. |
|
4952 | version = "4.0.3"; | |
4935 | src = fetchurl { |
|
4953 | src = fetchurl { | |
4936 |
url = "https://registry.npmjs.org/nopt/-/nopt-4.0. |
|
4954 | url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz"; | |
4937 | sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d"; |
|
4955 | sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg=="; | |
4938 | }; |
|
4956 | }; | |
4939 | }; |
|
4957 | }; | |
4940 | "noptify-0.0.3" = { |
|
4958 | "noptify-0.0.3" = { | |
@@ -5045,13 +5063,13 b' let' | |||||
5045 | sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; |
|
5063 | sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; | |
5046 | }; |
|
5064 | }; | |
5047 | }; |
|
5065 | }; | |
5048 |
"object-inspect-1. |
|
5066 | "object-inspect-1.7.0" = { | |
5049 | name = "object-inspect"; |
|
5067 | name = "object-inspect"; | |
5050 | packageName = "object-inspect"; |
|
5068 | packageName = "object-inspect"; | |
5051 |
version = "1. |
|
5069 | version = "1.7.0"; | |
5052 | src = fetchurl { |
|
5070 | src = fetchurl { | |
5053 |
url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1. |
|
5071 | url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz"; | |
5054 | sha512 = "GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ=="; |
|
5072 | sha512 = "a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="; | |
5055 | }; |
|
5073 | }; | |
5056 | }; |
|
5074 | }; | |
5057 | "object-keys-1.1.1" = { |
|
5075 | "object-keys-1.1.1" = { | |
@@ -5072,6 +5090,15 b' let' | |||||
5072 | sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; |
|
5090 | sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; | |
5073 | }; |
|
5091 | }; | |
5074 | }; |
|
5092 | }; | |
|
5093 | "object.assign-4.1.0" = { | |||
|
5094 | name = "object.assign"; | |||
|
5095 | packageName = "object.assign"; | |||
|
5096 | version = "4.1.0"; | |||
|
5097 | src = fetchurl { | |||
|
5098 | url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz"; | |||
|
5099 | sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w=="; | |||
|
5100 | }; | |||
|
5101 | }; | |||
5075 | "object.defaults-1.1.0" = { |
|
5102 | "object.defaults-1.1.0" = { | |
5076 | name = "object.defaults"; |
|
5103 | name = "object.defaults"; | |
5077 | packageName = "object.defaults"; |
|
5104 | packageName = "object.defaults"; | |
@@ -5081,13 +5108,13 b' let' | |||||
5081 | sha1 = "3a7f868334b407dea06da16d88d5cd29e435fecf"; |
|
5108 | sha1 = "3a7f868334b407dea06da16d88d5cd29e435fecf"; | |
5082 | }; |
|
5109 | }; | |
5083 | }; |
|
5110 | }; | |
5084 |
"object.getownpropertydescriptors-2.0 |
|
5111 | "object.getownpropertydescriptors-2.1.0" = { | |
5085 | name = "object.getownpropertydescriptors"; |
|
5112 | name = "object.getownpropertydescriptors"; | |
5086 | packageName = "object.getownpropertydescriptors"; |
|
5113 | packageName = "object.getownpropertydescriptors"; | |
5087 |
version = "2.0 |
|
5114 | version = "2.1.0"; | |
5088 | src = fetchurl { |
|
5115 | src = fetchurl { | |
5089 |
url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0 |
|
5116 | url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz"; | |
5090 | sha1 = "8758c846f5b407adab0f236e0986f14b051caa16"; |
|
5117 | sha512 = "Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg=="; | |
5091 | }; |
|
5118 | }; | |
5092 | }; |
|
5119 | }; | |
5093 | "object.map-1.0.1" = { |
|
5120 | "object.map-1.0.1" = { | |
@@ -5198,13 +5225,13 b' let' | |||||
5198 | sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="; |
|
5225 | sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="; | |
5199 | }; |
|
5226 | }; | |
5200 | }; |
|
5227 | }; | |
5201 |
"p-limit-2. |
|
5228 | "p-limit-2.3.0" = { | |
5202 | name = "p-limit"; |
|
5229 | name = "p-limit"; | |
5203 | packageName = "p-limit"; |
|
5230 | packageName = "p-limit"; | |
5204 |
version = "2. |
|
5231 | version = "2.3.0"; | |
5205 | src = fetchurl { |
|
5232 | src = fetchurl { | |
5206 |
url = "https://registry.npmjs.org/p-limit/-/p-limit-2. |
|
5233 | url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"; | |
5207 | sha512 = "85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg=="; |
|
5234 | sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="; | |
5208 | }; |
|
5235 | }; | |
5209 | }; |
|
5236 | }; | |
5210 | "p-locate-2.0.0" = { |
|
5237 | "p-locate-2.0.0" = { | |
@@ -5243,13 +5270,13 b' let' | |||||
5243 | sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="; |
|
5270 | sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="; | |
5244 | }; |
|
5271 | }; | |
5245 | }; |
|
5272 | }; | |
5246 |
"pako-1.0.1 |
|
5273 | "pako-1.0.11" = { | |
5247 | name = "pako"; |
|
5274 | name = "pako"; | |
5248 | packageName = "pako"; |
|
5275 | packageName = "pako"; | |
5249 |
version = "1.0.1 |
|
5276 | version = "1.0.11"; | |
5250 | src = fetchurl { |
|
5277 | src = fetchurl { | |
5251 |
url = "https://registry.npmjs.org/pako/-/pako-1.0.1 |
|
5278 | url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz"; | |
5252 | sha512 = "0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="; |
|
5279 | sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="; | |
5253 | }; |
|
5280 | }; | |
5254 | }; |
|
5281 | }; | |
5255 | "parallel-transform-1.2.0" = { |
|
5282 | "parallel-transform-1.2.0" = { | |
@@ -6035,13 +6062,13 b' let' | |||||
6035 | sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9"; |
|
6062 | sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9"; | |
6036 | }; |
|
6063 | }; | |
6037 | }; |
|
6064 | }; | |
6038 |
"readable-stream-2.3. |
|
6065 | "readable-stream-2.3.7" = { | |
6039 | name = "readable-stream"; |
|
6066 | name = "readable-stream"; | |
6040 | packageName = "readable-stream"; |
|
6067 | packageName = "readable-stream"; | |
6041 |
version = "2.3. |
|
6068 | version = "2.3.7"; | |
6042 | src = fetchurl { |
|
6069 | src = fetchurl { | |
6043 |
url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3. |
|
6070 | url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"; | |
6044 | sha512 = "tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw=="; |
|
6071 | sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="; | |
6045 | }; |
|
6072 | }; | |
6046 | }; |
|
6073 | }; | |
6047 | "readdirp-2.2.1" = { |
|
6074 | "readdirp-2.2.1" = { | |
@@ -6098,6 +6125,15 b' let' | |||||
6098 | sha512 = "1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="; |
|
6125 | sha512 = "1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="; | |
6099 | }; |
|
6126 | }; | |
6100 | }; |
|
6127 | }; | |
|
6128 | "regenerate-unicode-properties-8.2.0" = { | |||
|
6129 | name = "regenerate-unicode-properties"; | |||
|
6130 | packageName = "regenerate-unicode-properties"; | |||
|
6131 | version = "8.2.0"; | |||
|
6132 | src = fetchurl { | |||
|
6133 | url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz"; | |||
|
6134 | sha512 = "F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA=="; | |||
|
6135 | }; | |||
|
6136 | }; | |||
6101 | "regenerator-runtime-0.11.1" = { |
|
6137 | "regenerator-runtime-0.11.1" = { | |
6102 | name = "regenerator-runtime"; |
|
6138 | name = "regenerator-runtime"; | |
6103 | packageName = "regenerator-runtime"; |
|
6139 | packageName = "regenerator-runtime"; | |
@@ -6125,15 +6161,6 b' let' | |||||
6125 | sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A=="; |
|
6161 | sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A=="; | |
6126 | }; |
|
6162 | }; | |
6127 | }; |
|
6163 | }; | |
6128 | "regexpu-core-1.0.0" = { |
|
|||
6129 | name = "regexpu-core"; |
|
|||
6130 | packageName = "regexpu-core"; |
|
|||
6131 | version = "1.0.0"; |
|
|||
6132 | src = fetchurl { |
|
|||
6133 | url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz"; |
|
|||
6134 | sha1 = "86a763f58ee4d7c2f6b102e4764050de7ed90c6b"; |
|
|||
6135 | }; |
|
|||
6136 | }; |
|
|||
6137 | "regexpu-core-2.0.0" = { |
|
6164 | "regexpu-core-2.0.0" = { | |
6138 | name = "regexpu-core"; |
|
6165 | name = "regexpu-core"; | |
6139 | packageName = "regexpu-core"; |
|
6166 | packageName = "regexpu-core"; | |
@@ -6143,6 +6170,15 b' let' | |||||
6143 | sha1 = "49d038837b8dcf8bfa5b9a42139938e6ea2ae240"; |
|
6170 | sha1 = "49d038837b8dcf8bfa5b9a42139938e6ea2ae240"; | |
6144 | }; |
|
6171 | }; | |
6145 | }; |
|
6172 | }; | |
|
6173 | "regexpu-core-4.7.0" = { | |||
|
6174 | name = "regexpu-core"; | |||
|
6175 | packageName = "regexpu-core"; | |||
|
6176 | version = "4.7.0"; | |||
|
6177 | src = fetchurl { | |||
|
6178 | url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz"; | |||
|
6179 | sha512 = "TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ=="; | |||
|
6180 | }; | |||
|
6181 | }; | |||
6146 | "regjsgen-0.2.0" = { |
|
6182 | "regjsgen-0.2.0" = { | |
6147 | name = "regjsgen"; |
|
6183 | name = "regjsgen"; | |
6148 | packageName = "regjsgen"; |
|
6184 | packageName = "regjsgen"; | |
@@ -6152,6 +6188,15 b' let' | |||||
6152 | sha1 = "6c016adeac554f75823fe37ac05b92d5a4edb1f7"; |
|
6188 | sha1 = "6c016adeac554f75823fe37ac05b92d5a4edb1f7"; | |
6153 | }; |
|
6189 | }; | |
6154 | }; |
|
6190 | }; | |
|
6191 | "regjsgen-0.5.1" = { | |||
|
6192 | name = "regjsgen"; | |||
|
6193 | packageName = "regjsgen"; | |||
|
6194 | version = "0.5.1"; | |||
|
6195 | src = fetchurl { | |||
|
6196 | url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz"; | |||
|
6197 | sha512 = "5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg=="; | |||
|
6198 | }; | |||
|
6199 | }; | |||
6155 | "regjsparser-0.1.5" = { |
|
6200 | "regjsparser-0.1.5" = { | |
6156 | name = "regjsparser"; |
|
6201 | name = "regjsparser"; | |
6157 | packageName = "regjsparser"; |
|
6202 | packageName = "regjsparser"; | |
@@ -6161,6 +6206,15 b' let' | |||||
6161 | sha1 = "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"; |
|
6206 | sha1 = "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"; | |
6162 | }; |
|
6207 | }; | |
6163 | }; |
|
6208 | }; | |
|
6209 | "regjsparser-0.6.4" = { | |||
|
6210 | name = "regjsparser"; | |||
|
6211 | packageName = "regjsparser"; | |||
|
6212 | version = "0.6.4"; | |||
|
6213 | src = fetchurl { | |||
|
6214 | url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz"; | |||
|
6215 | sha512 = "64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw=="; | |||
|
6216 | }; | |||
|
6217 | }; | |||
6164 | "relateurl-0.2.7" = { |
|
6218 | "relateurl-0.2.7" = { | |
6165 | name = "relateurl"; |
|
6219 | name = "relateurl"; | |
6166 | packageName = "relateurl"; |
|
6220 | packageName = "relateurl"; | |
@@ -6242,13 +6296,13 b' let' | |||||
6242 | sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1"; |
|
6296 | sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1"; | |
6243 | }; |
|
6297 | }; | |
6244 | }; |
|
6298 | }; | |
6245 |
"resolve-1.1 |
|
6299 | "resolve-1.16.0" = { | |
6246 | name = "resolve"; |
|
6300 | name = "resolve"; | |
6247 | packageName = "resolve"; |
|
6301 | packageName = "resolve"; | |
6248 |
version = "1.1 |
|
6302 | version = "1.16.0"; | |
6249 | src = fetchurl { |
|
6303 | src = fetchurl { | |
6250 |
url = "https://registry.npmjs.org/resolve/-/resolve-1.1 |
|
6304 | url = "https://registry.npmjs.org/resolve/-/resolve-1.16.0.tgz"; | |
6251 | sha512 = "B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w=="; |
|
6305 | sha512 = "LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA=="; | |
6252 | }; |
|
6306 | }; | |
6253 | }; |
|
6307 | }; | |
6254 | "resolve-cwd-2.0.0" = { |
|
6308 | "resolve-cwd-2.0.0" = { | |
@@ -6494,13 +6548,13 b' let' | |||||
6494 | sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; |
|
6548 | sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; | |
6495 | }; |
|
6549 | }; | |
6496 | }; |
|
6550 | }; | |
6497 |
"signal-exit-3.0. |
|
6551 | "signal-exit-3.0.3" = { | |
6498 | name = "signal-exit"; |
|
6552 | name = "signal-exit"; | |
6499 | packageName = "signal-exit"; |
|
6553 | packageName = "signal-exit"; | |
6500 |
version = "3.0. |
|
6554 | version = "3.0.3"; | |
6501 | src = fetchurl { |
|
6555 | src = fetchurl { | |
6502 |
url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0. |
|
6556 | url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz"; | |
6503 | sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d"; |
|
6557 | sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="; | |
6504 | }; |
|
6558 | }; | |
6505 | }; |
|
6559 | }; | |
6506 | "slash-1.0.0" = { |
|
6560 | "slash-1.0.0" = { | |
@@ -6611,13 +6665,13 b' let' | |||||
6611 | sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="; |
|
6665 | sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="; | |
6612 | }; |
|
6666 | }; | |
6613 | }; |
|
6667 | }; | |
6614 |
"source-map-resolve-0.5. |
|
6668 | "source-map-resolve-0.5.3" = { | |
6615 | name = "source-map-resolve"; |
|
6669 | name = "source-map-resolve"; | |
6616 | packageName = "source-map-resolve"; |
|
6670 | packageName = "source-map-resolve"; | |
6617 |
version = "0.5. |
|
6671 | version = "0.5.3"; | |
6618 | src = fetchurl { |
|
6672 | src = fetchurl { | |
6619 |
url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5. |
|
6673 | url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz"; | |
6620 | sha512 = "MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA=="; |
|
6674 | sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw=="; | |
6621 | }; |
|
6675 | }; | |
6622 | }; |
|
6676 | }; | |
6623 | "source-map-support-0.4.18" = { |
|
6677 | "source-map-support-0.4.18" = { | |
@@ -6719,13 +6773,13 b' let' | |||||
6719 | sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw=="; |
|
6773 | sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw=="; | |
6720 | }; |
|
6774 | }; | |
6721 | }; |
|
6775 | }; | |
6722 |
"stream-shift-1.0. |
|
6776 | "stream-shift-1.0.1" = { | |
6723 | name = "stream-shift"; |
|
6777 | name = "stream-shift"; | |
6724 | packageName = "stream-shift"; |
|
6778 | packageName = "stream-shift"; | |
6725 |
version = "1.0. |
|
6779 | version = "1.0.1"; | |
6726 | src = fetchurl { |
|
6780 | src = fetchurl { | |
6727 |
url = "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0. |
|
6781 | url = "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz"; | |
6728 | sha1 = "d5c752825e5367e786f78e18e445ea223a155952"; |
|
6782 | sha512 = "AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="; | |
6729 | }; |
|
6783 | }; | |
6730 | }; |
|
6784 | }; | |
6731 | "strict-uri-encode-1.1.0" = { |
|
6785 | "strict-uri-encode-1.1.0" = { | |
@@ -6755,22 +6809,40 b' let' | |||||
6755 | sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="; |
|
6809 | sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="; | |
6756 | }; |
|
6810 | }; | |
6757 | }; |
|
6811 | }; | |
6758 |
"string.prototype.trim |
|
6812 | "string.prototype.trimend-1.0.1" = { | |
|
6813 | name = "string.prototype.trimend"; | |||
|
6814 | packageName = "string.prototype.trimend"; | |||
|
6815 | version = "1.0.1"; | |||
|
6816 | src = fetchurl { | |||
|
6817 | url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz"; | |||
|
6818 | sha512 = "LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g=="; | |||
|
6819 | }; | |||
|
6820 | }; | |||
|
6821 | "string.prototype.trimleft-2.1.2" = { | |||
6759 | name = "string.prototype.trimleft"; |
|
6822 | name = "string.prototype.trimleft"; | |
6760 | packageName = "string.prototype.trimleft"; |
|
6823 | packageName = "string.prototype.trimleft"; | |
6761 |
version = "2.1. |
|
6824 | version = "2.1.2"; | |
6762 | src = fetchurl { |
|
6825 | src = fetchurl { | |
6763 |
url = "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1. |
|
6826 | url = "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz"; | |
6764 | sha512 = "FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw=="; |
|
6827 | sha512 = "gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw=="; | |
6765 | }; |
|
6828 | }; | |
6766 | }; |
|
6829 | }; | |
6767 |
"string.prototype.trimright-2.1. |
|
6830 | "string.prototype.trimright-2.1.2" = { | |
6768 | name = "string.prototype.trimright"; |
|
6831 | name = "string.prototype.trimright"; | |
6769 | packageName = "string.prototype.trimright"; |
|
6832 | packageName = "string.prototype.trimright"; | |
6770 |
version = "2.1. |
|
6833 | version = "2.1.2"; | |
6771 | src = fetchurl { |
|
6834 | src = fetchurl { | |
6772 |
url = "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1. |
|
6835 | url = "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz"; | |
6773 | sha512 = "fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg=="; |
|
6836 | sha512 = "ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg=="; | |
|
6837 | }; | |||
|
6838 | }; | |||
|
6839 | "string.prototype.trimstart-1.0.1" = { | |||
|
6840 | name = "string.prototype.trimstart"; | |||
|
6841 | packageName = "string.prototype.trimstart"; | |||
|
6842 | version = "1.0.1"; | |||
|
6843 | src = fetchurl { | |||
|
6844 | url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz"; | |||
|
6845 | sha512 = "XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw=="; | |||
6774 | }; |
|
6846 | }; | |
6775 | }; |
|
6847 | }; | |
6776 | "string_decoder-0.10.31" = { |
|
6848 | "string_decoder-0.10.31" = { | |
@@ -6908,6 +6980,15 b' let' | |||||
6908 | sha1 = "9f5772413952135c6fefbf40afe6a4faa88b4bb5"; |
|
6980 | sha1 = "9f5772413952135c6fefbf40afe6a4faa88b4bb5"; | |
6909 | }; |
|
6981 | }; | |
6910 | }; |
|
6982 | }; | |
|
6983 | "sweetalert2-9.10.12" = { | |||
|
6984 | name = "sweetalert2"; | |||
|
6985 | packageName = "sweetalert2"; | |||
|
6986 | version = "9.10.12"; | |||
|
6987 | src = fetchurl { | |||
|
6988 | url = "https://registry.npmjs.org/sweetalert2/-/sweetalert2-9.10.12.tgz"; | |||
|
6989 | sha512 = "RnarmbDGTPmwecJbaVdq5LvlzbVReIOtPk0huPnXOE19G00xMxGcTY0wjt9AjwsexUnLivLXc3b6nD6+D6NlGg=="; | |||
|
6990 | }; | |||
|
6991 | }; | |||
6911 | "tapable-0.2.9" = { |
|
6992 | "tapable-0.2.9" = { | |
6912 | name = "tapable"; |
|
6993 | name = "tapable"; | |
6913 | packageName = "tapable"; |
|
6994 | packageName = "tapable"; | |
@@ -7052,13 +7133,13 b' let' | |||||
7052 | sha1 = "30c6203e1e66b841a88701ed8858f1725d94b026"; |
|
7133 | sha1 = "30c6203e1e66b841a88701ed8858f1725d94b026"; | |
7053 | }; |
|
7134 | }; | |
7054 | }; |
|
7135 | }; | |
7055 |
"tslib-1.1 |
|
7136 | "tslib-1.11.1" = { | |
7056 | name = "tslib"; |
|
7137 | name = "tslib"; | |
7057 | packageName = "tslib"; |
|
7138 | packageName = "tslib"; | |
7058 |
version = "1.1 |
|
7139 | version = "1.11.1"; | |
7059 | src = fetchurl { |
|
7140 | src = fetchurl { | |
7060 |
url = "https://registry.npmjs.org/tslib/-/tslib-1.1 |
|
7141 | url = "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz"; | |
7061 | sha512 = "qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="; |
|
7142 | sha512 = "aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="; | |
7062 | }; |
|
7143 | }; | |
7063 | }; |
|
7144 | }; | |
7064 | "tty-browserify-0.0.0" = { |
|
7145 | "tty-browserify-0.0.0" = { | |
@@ -7124,13 +7205,13 b' let' | |||||
7124 | sha512 = "Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw=="; |
|
7205 | sha512 = "Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw=="; | |
7125 | }; |
|
7206 | }; | |
7126 | }; |
|
7207 | }; | |
7127 |
"uglify-js-3. |
|
7208 | "uglify-js-3.9.1" = { | |
7128 | name = "uglify-js"; |
|
7209 | name = "uglify-js"; | |
7129 | packageName = "uglify-js"; |
|
7210 | packageName = "uglify-js"; | |
7130 |
version = "3. |
|
7211 | version = "3.9.1"; | |
7131 | src = fetchurl { |
|
7212 | src = fetchurl { | |
7132 |
url = "https://registry.npmjs.org/uglify-js/-/uglify-js-3. |
|
7213 | url = "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz"; | |
7133 | sha512 = "4sXQDzmdnoXiO+xvmTzQsfIiwrjUCSA95rSP4SEd8tDb51W2TiDOlL76Hl+Kw0Ie42PSItCW8/t6pBNCF2R48A=="; |
|
7214 | sha512 = "JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA=="; | |
7134 | }; |
|
7215 | }; | |
7135 | }; |
|
7216 | }; | |
7136 | "uglify-to-browserify-1.0.2" = { |
|
7217 | "uglify-to-browserify-1.0.2" = { | |
@@ -7196,6 +7277,42 b' let' | |||||
7196 | sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b"; |
|
7277 | sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b"; | |
7197 | }; |
|
7278 | }; | |
7198 | }; |
|
7279 | }; | |
|
7280 | "unicode-canonical-property-names-ecmascript-1.0.4" = { | |||
|
7281 | name = "unicode-canonical-property-names-ecmascript"; | |||
|
7282 | packageName = "unicode-canonical-property-names-ecmascript"; | |||
|
7283 | version = "1.0.4"; | |||
|
7284 | src = fetchurl { | |||
|
7285 | url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz"; | |||
|
7286 | sha512 = "jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="; | |||
|
7287 | }; | |||
|
7288 | }; | |||
|
7289 | "unicode-match-property-ecmascript-1.0.4" = { | |||
|
7290 | name = "unicode-match-property-ecmascript"; | |||
|
7291 | packageName = "unicode-match-property-ecmascript"; | |||
|
7292 | version = "1.0.4"; | |||
|
7293 | src = fetchurl { | |||
|
7294 | url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz"; | |||
|
7295 | sha512 = "L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg=="; | |||
|
7296 | }; | |||
|
7297 | }; | |||
|
7298 | "unicode-match-property-value-ecmascript-1.2.0" = { | |||
|
7299 | name = "unicode-match-property-value-ecmascript"; | |||
|
7300 | packageName = "unicode-match-property-value-ecmascript"; | |||
|
7301 | version = "1.2.0"; | |||
|
7302 | src = fetchurl { | |||
|
7303 | url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz"; | |||
|
7304 | sha512 = "wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="; | |||
|
7305 | }; | |||
|
7306 | }; | |||
|
7307 | "unicode-property-aliases-ecmascript-1.1.0" = { | |||
|
7308 | name = "unicode-property-aliases-ecmascript"; | |||
|
7309 | packageName = "unicode-property-aliases-ecmascript"; | |||
|
7310 | version = "1.1.0"; | |||
|
7311 | src = fetchurl { | |||
|
7312 | url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz"; | |||
|
7313 | sha512 = "PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="; | |||
|
7314 | }; | |||
|
7315 | }; | |||
7199 | "union-value-1.0.1" = { |
|
7316 | "union-value-1.0.1" = { | |
7200 | name = "union-value"; |
|
7317 | name = "union-value"; | |
7201 | packageName = "union-value"; |
|
7318 | packageName = "union-value"; | |
@@ -7358,13 +7475,13 b' let' | |||||
7358 | sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c"; |
|
7475 | sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c"; | |
7359 | }; |
|
7476 | }; | |
7360 | }; |
|
7477 | }; | |
7361 |
"uuid-3. |
|
7478 | "uuid-3.4.0" = { | |
7362 | name = "uuid"; |
|
7479 | name = "uuid"; | |
7363 | packageName = "uuid"; |
|
7480 | packageName = "uuid"; | |
7364 |
version = "3. |
|
7481 | version = "3.4.0"; | |
7365 | src = fetchurl { |
|
7482 | src = fetchurl { | |
7366 |
url = "https://registry.npmjs.org/uuid/-/uuid-3. |
|
7483 | url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"; | |
7367 | sha512 = "pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="; |
|
7484 | sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="; | |
7368 | }; |
|
7485 | }; | |
7369 | }; |
|
7486 | }; | |
7370 | "v8-compile-cache-2.1.0" = { |
|
7487 | "v8-compile-cache-2.1.0" = { | |
@@ -7385,13 +7502,13 b' let' | |||||
7385 | sha512 = "amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w=="; |
|
7502 | sha512 = "amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w=="; | |
7386 | }; |
|
7503 | }; | |
7387 | }; |
|
7504 | }; | |
7388 |
"vendors-1.0. |
|
7505 | "vendors-1.0.4" = { | |
7389 | name = "vendors"; |
|
7506 | name = "vendors"; | |
7390 | packageName = "vendors"; |
|
7507 | packageName = "vendors"; | |
7391 |
version = "1.0. |
|
7508 | version = "1.0.4"; | |
7392 | src = fetchurl { |
|
7509 | src = fetchurl { | |
7393 |
url = "https://registry.npmjs.org/vendors/-/vendors-1.0. |
|
7510 | url = "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz"; | |
7394 | sha512 = "fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw=="; |
|
7511 | sha512 = "/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w=="; | |
7395 | }; |
|
7512 | }; | |
7396 | }; |
|
7513 | }; | |
7397 | "verror-1.10.0" = { |
|
7514 | "verror-1.10.0" = { | |
@@ -7403,22 +7520,22 b' let' | |||||
7403 | sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; |
|
7520 | sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; | |
7404 | }; |
|
7521 | }; | |
7405 | }; |
|
7522 | }; | |
7406 |
"vm-browserify-1.1. |
|
7523 | "vm-browserify-1.1.2" = { | |
7407 | name = "vm-browserify"; |
|
7524 | name = "vm-browserify"; | |
7408 | packageName = "vm-browserify"; |
|
7525 | packageName = "vm-browserify"; | |
7409 |
version = "1.1. |
|
7526 | version = "1.1.2"; | |
7410 | src = fetchurl { |
|
7527 | src = fetchurl { | |
7411 |
url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1. |
|
7528 | url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz"; | |
7412 | sha512 = "iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw=="; |
|
7529 | sha512 = "2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="; | |
7413 | }; |
|
7530 | }; | |
7414 | }; |
|
7531 | }; | |
7415 |
"watchpack-1.6. |
|
7532 | "watchpack-1.6.1" = { | |
7416 | name = "watchpack"; |
|
7533 | name = "watchpack"; | |
7417 | packageName = "watchpack"; |
|
7534 | packageName = "watchpack"; | |
7418 |
version = "1.6. |
|
7535 | version = "1.6.1"; | |
7419 | src = fetchurl { |
|
7536 | src = fetchurl { | |
7420 |
url = "https://registry.npmjs.org/watchpack/-/watchpack-1.6. |
|
7537 | url = "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz"; | |
7421 | sha512 = "i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA=="; |
|
7538 | sha512 = "+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA=="; | |
7422 | }; |
|
7539 | }; | |
7423 | }; |
|
7540 | }; | |
7424 | "waypoints-4.0.1" = { |
|
7541 | "waypoints-4.0.1" = { | |
@@ -7622,27 +7739,27 b' let' | |||||
7622 | sources."@polymer/iron-a11y-keys-3.0.1" |
|
7739 | sources."@polymer/iron-a11y-keys-3.0.1" | |
7623 | sources."@polymer/iron-a11y-keys-behavior-3.0.1" |
|
7740 | sources."@polymer/iron-a11y-keys-behavior-3.0.1" | |
7624 | sources."@polymer/iron-ajax-3.0.1" |
|
7741 | sources."@polymer/iron-ajax-3.0.1" | |
7625 |
sources."@polymer/iron-autogrow-textarea-3.0. |
|
7742 | sources."@polymer/iron-autogrow-textarea-3.0.3" | |
7626 | sources."@polymer/iron-behaviors-3.0.1" |
|
7743 | sources."@polymer/iron-behaviors-3.0.1" | |
7627 | sources."@polymer/iron-checked-element-behavior-3.0.1" |
|
7744 | sources."@polymer/iron-checked-element-behavior-3.0.1" | |
7628 |
sources."@polymer/iron-fit-behavior-3.0. |
|
7745 | sources."@polymer/iron-fit-behavior-3.0.2" | |
7629 | sources."@polymer/iron-flex-layout-3.0.1" |
|
7746 | sources."@polymer/iron-flex-layout-3.0.1" | |
7630 | sources."@polymer/iron-form-element-behavior-3.0.1" |
|
7747 | sources."@polymer/iron-form-element-behavior-3.0.1" | |
7631 | sources."@polymer/iron-meta-3.0.1" |
|
7748 | sources."@polymer/iron-meta-3.0.1" | |
7632 |
sources."@polymer/iron-overlay-behavior-3.0. |
|
7749 | sources."@polymer/iron-overlay-behavior-3.0.3" | |
7633 | sources."@polymer/iron-resizable-behavior-3.0.1" |
|
7750 | sources."@polymer/iron-resizable-behavior-3.0.1" | |
7634 | sources."@polymer/iron-validatable-behavior-3.0.1" |
|
7751 | sources."@polymer/iron-validatable-behavior-3.0.1" | |
7635 | sources."@polymer/paper-behaviors-3.0.1" |
|
7752 | sources."@polymer/paper-behaviors-3.0.1" | |
7636 | sources."@polymer/paper-button-3.0.1" |
|
7753 | sources."@polymer/paper-button-3.0.1" | |
7637 |
sources."@polymer/paper-ripple-3.0. |
|
7754 | sources."@polymer/paper-ripple-3.0.2" | |
7638 | sources."@polymer/paper-spinner-3.0.2" |
|
7755 | sources."@polymer/paper-spinner-3.0.2" | |
7639 | sources."@polymer/paper-styles-3.0.1" |
|
7756 | sources."@polymer/paper-styles-3.0.1" | |
7640 | sources."@polymer/paper-toast-3.0.1" |
|
7757 | sources."@polymer/paper-toast-3.0.1" | |
7641 | sources."@polymer/paper-toggle-button-3.0.1" |
|
7758 | sources."@polymer/paper-toggle-button-3.0.1" | |
7642 | sources."@polymer/paper-tooltip-3.0.1" |
|
7759 | sources."@polymer/paper-tooltip-3.0.1" | |
7643 |
sources."@polymer/polymer-3.3. |
|
7760 | sources."@polymer/polymer-3.3.1" | |
7644 | sources."@types/clone-0.1.30" |
|
7761 | sources."@types/clone-0.1.30" | |
7645 |
sources."@types/node-6.14. |
|
7762 | sources."@types/node-6.14.10" | |
7646 | sources."@types/parse5-2.2.34" |
|
7763 | sources."@types/parse5-2.2.34" | |
7647 | sources."@webassemblyjs/ast-1.7.10" |
|
7764 | sources."@webassemblyjs/ast-1.7.10" | |
7648 | sources."@webassemblyjs/floating-point-hex-parser-1.7.10" |
|
7765 | sources."@webassemblyjs/floating-point-hex-parser-1.7.10" | |
@@ -7662,12 +7779,12 b' let' | |||||
7662 | sources."@webassemblyjs/wasm-parser-1.7.10" |
|
7779 | sources."@webassemblyjs/wasm-parser-1.7.10" | |
7663 | sources."@webassemblyjs/wast-parser-1.7.10" |
|
7780 | sources."@webassemblyjs/wast-parser-1.7.10" | |
7664 | sources."@webassemblyjs/wast-printer-1.7.10" |
|
7781 | sources."@webassemblyjs/wast-printer-1.7.10" | |
7665 |
sources."@webcomponents/shadycss-1.9. |
|
7782 | sources."@webcomponents/shadycss-1.9.6" | |
7666 |
sources."@webcomponents/webcomponentsjs-2.3 |
|
7783 | sources."@webcomponents/webcomponentsjs-2.4.3" | |
7667 | sources."@xtuc/ieee754-1.2.0" |
|
7784 | sources."@xtuc/ieee754-1.2.0" | |
7668 | sources."@xtuc/long-4.2.1" |
|
7785 | sources."@xtuc/long-4.2.1" | |
7669 | sources."abbrev-1.1.1" |
|
7786 | sources."abbrev-1.1.1" | |
7670 |
sources."acorn-5.7. |
|
7787 | sources."acorn-5.7.4" | |
7671 | sources."acorn-dynamic-import-3.0.0" |
|
7788 | sources."acorn-dynamic-import-3.0.0" | |
7672 | (sources."acorn-jsx-3.0.1" // { |
|
7789 | (sources."acorn-jsx-3.0.1" // { | |
7673 | dependencies = [ |
|
7790 | dependencies = [ | |
@@ -7727,7 +7844,7 b' let' | |||||
7727 | ]; |
|
7844 | ]; | |
7728 | }) |
|
7845 | }) | |
7729 | sources."aws-sign2-0.6.0" |
|
7846 | sources."aws-sign2-0.6.0" | |
7730 |
sources."aws4-1. |
|
7847 | sources."aws4-1.9.1" | |
7731 | (sources."babel-code-frame-6.26.0" // { |
|
7848 | (sources."babel-code-frame-6.26.0" // { | |
7732 | dependencies = [ |
|
7849 | dependencies = [ | |
7733 | sources."ansi-regex-2.1.1" |
|
7850 | sources."ansi-regex-2.1.1" | |
@@ -7841,7 +7958,8 b' let' | |||||
7841 | sources."bcrypt-pbkdf-1.0.2" |
|
7958 | sources."bcrypt-pbkdf-1.0.2" | |
7842 | sources."big.js-5.2.2" |
|
7959 | sources."big.js-5.2.2" | |
7843 | sources."binary-extensions-1.13.1" |
|
7960 | sources."binary-extensions-1.13.1" | |
7844 |
sources."b |
|
7961 | sources."bindings-1.5.0" | |
|
7962 | sources."bluebird-3.7.2" | |||
7845 | sources."bn.js-4.11.8" |
|
7963 | sources."bn.js-4.11.8" | |
7846 | sources."boolbase-1.0.0" |
|
7964 | sources."boolbase-1.0.0" | |
7847 | sources."boom-2.10.1" |
|
7965 | sources."boom-2.10.1" | |
@@ -7859,13 +7977,13 b' let' | |||||
7859 | sources."browserify-sign-4.0.4" |
|
7977 | sources."browserify-sign-4.0.4" | |
7860 | sources."browserify-zlib-0.2.0" |
|
7978 | sources."browserify-zlib-0.2.0" | |
7861 | sources."browserslist-3.2.8" |
|
7979 | sources."browserslist-3.2.8" | |
7862 |
sources."buffer-4.9. |
|
7980 | sources."buffer-4.9.2" | |
7863 | sources."buffer-from-1.1.1" |
|
7981 | sources."buffer-from-1.1.1" | |
7864 | sources."buffer-xor-1.0.3" |
|
7982 | sources."buffer-xor-1.0.3" | |
7865 | sources."builtin-status-codes-3.0.0" |
|
7983 | sources."builtin-status-codes-3.0.0" | |
7866 | (sources."cacache-10.0.4" // { |
|
7984 | (sources."cacache-10.0.4" // { | |
7867 | dependencies = [ |
|
7985 | dependencies = [ | |
7868 |
sources."glob-7.1. |
|
7986 | sources."glob-7.1.6" | |
7869 | sources."graceful-fs-4.2.3" |
|
7987 | sources."graceful-fs-4.2.3" | |
7870 | sources."lru-cache-4.1.5" |
|
7988 | sources."lru-cache-4.1.5" | |
7871 | sources."minimatch-3.0.4" |
|
7989 | sources."minimatch-3.0.4" | |
@@ -7880,8 +7998,8 b' let' | |||||
7880 | sources."browserslist-1.7.7" |
|
7998 | sources."browserslist-1.7.7" | |
7881 | ]; |
|
7999 | ]; | |
7882 | }) |
|
8000 | }) | |
7883 |
sources."caniuse-db-1.0.300010 |
|
8001 | sources."caniuse-db-1.0.30001042" | |
7884 |
sources."caniuse-lite-1.0.300010 |
|
8002 | sources."caniuse-lite-1.0.30001042" | |
7885 | sources."caseless-0.12.0" |
|
8003 | sources."caseless-0.12.0" | |
7886 | sources."center-align-0.1.3" |
|
8004 | sources."center-align-0.1.3" | |
7887 | sources."chalk-0.5.1" |
|
8005 | sources."chalk-0.5.1" | |
@@ -7890,7 +8008,7 b' let' | |||||
7890 | sources."is-glob-4.0.1" |
|
8008 | sources."is-glob-4.0.1" | |
7891 | ]; |
|
8009 | ]; | |
7892 | }) |
|
8010 | }) | |
7893 |
sources."chownr-1.1. |
|
8011 | sources."chownr-1.1.4" | |
7894 | sources."chrome-trace-event-1.0.2" |
|
8012 | sources."chrome-trace-event-1.0.2" | |
7895 | sources."cipher-base-1.0.4" |
|
8013 | sources."cipher-base-1.0.4" | |
7896 | (sources."clap-1.2.3" // { |
|
8014 | (sources."clap-1.2.3" // { | |
@@ -7920,18 +8038,18 b' let' | |||||
7920 | sources."kind-of-5.1.0" |
|
8038 | sources."kind-of-5.1.0" | |
7921 | ]; |
|
8039 | ]; | |
7922 | }) |
|
8040 | }) | |
7923 |
(sources."clean-css-4.2. |
|
8041 | (sources."clean-css-4.2.3" // { | |
7924 | dependencies = [ |
|
8042 | dependencies = [ | |
7925 | sources."source-map-0.6.1" |
|
8043 | sources."source-map-0.6.1" | |
7926 | ]; |
|
8044 | ]; | |
7927 | }) |
|
8045 | }) | |
7928 | (sources."cli-1.0.1" // { |
|
8046 | (sources."cli-1.0.1" // { | |
7929 | dependencies = [ |
|
8047 | dependencies = [ | |
7930 |
sources."glob-7.1. |
|
8048 | sources."glob-7.1.6" | |
7931 | sources."minimatch-3.0.4" |
|
8049 | sources."minimatch-3.0.4" | |
7932 | ]; |
|
8050 | ]; | |
7933 | }) |
|
8051 | }) | |
7934 |
sources."clipboard-2.0. |
|
8052 | sources."clipboard-2.0.6" | |
7935 | (sources."cliui-4.1.0" // { |
|
8053 | (sources."cliui-4.1.0" // { | |
7936 | dependencies = [ |
|
8054 | dependencies = [ | |
7937 | sources."ansi-regex-3.0.0" |
|
8055 | sources."ansi-regex-3.0.0" | |
@@ -7957,21 +8075,21 b' let' | |||||
7957 | sources."concat-map-0.0.1" |
|
8075 | sources."concat-map-0.0.1" | |
7958 | (sources."concat-stream-1.6.2" // { |
|
8076 | (sources."concat-stream-1.6.2" // { | |
7959 | dependencies = [ |
|
8077 | dependencies = [ | |
7960 |
sources."readable-stream-2.3. |
|
8078 | sources."readable-stream-2.3.7" | |
7961 | sources."safe-buffer-5.1.2" |
|
8079 | sources."safe-buffer-5.1.2" | |
7962 | sources."string_decoder-1.1.1" |
|
8080 | sources."string_decoder-1.1.1" | |
7963 | ]; |
|
8081 | ]; | |
7964 | }) |
|
8082 | }) | |
7965 | sources."console-browserify-1.1.0" |
|
8083 | sources."console-browserify-1.1.0" | |
7966 | sources."constants-browserify-1.0.0" |
|
8084 | sources."constants-browserify-1.0.0" | |
7967 |
(sources."convert-source-map-1. |
|
8085 | (sources."convert-source-map-1.7.0" // { | |
7968 | dependencies = [ |
|
8086 | dependencies = [ | |
7969 | sources."safe-buffer-5.1.2" |
|
8087 | sources."safe-buffer-5.1.2" | |
7970 | ]; |
|
8088 | ]; | |
7971 | }) |
|
8089 | }) | |
7972 | (sources."copy-concurrently-1.0.5" // { |
|
8090 | (sources."copy-concurrently-1.0.5" // { | |
7973 | dependencies = [ |
|
8091 | dependencies = [ | |
7974 |
sources."glob-7.1. |
|
8092 | sources."glob-7.1.6" | |
7975 | sources."minimatch-3.0.4" |
|
8093 | sources."minimatch-3.0.4" | |
7976 | sources."rimraf-2.7.1" |
|
8094 | sources."rimraf-2.7.1" | |
7977 | ]; |
|
8095 | ]; | |
@@ -7983,7 +8101,7 b' let' | |||||
7983 | sources."minimatch-3.0.4" |
|
8101 | sources."minimatch-3.0.4" | |
7984 | ]; |
|
8102 | ]; | |
7985 | }) |
|
8103 | }) | |
7986 |
sources."core-js-2.6.1 |
|
8104 | sources."core-js-2.6.11" | |
7987 | sources."core-util-is-1.0.2" |
|
8105 | sources."core-util-is-1.0.2" | |
7988 | sources."create-ecdh-4.0.3" |
|
8106 | sources."create-ecdh-4.0.3" | |
7989 | sources."create-hash-1.2.0" |
|
8107 | sources."create-hash-1.2.0" | |
@@ -7998,13 +8116,16 b' let' | |||||
7998 | sources."css-color-names-0.0.4" |
|
8116 | sources."css-color-names-0.0.4" | |
7999 | sources."css-loader-0.28.11" |
|
8117 | sources."css-loader-0.28.11" | |
8000 | sources."css-select-1.2.0" |
|
8118 | sources."css-select-1.2.0" | |
8001 |
(sources."css-selector-tokenizer-0.7. |
|
8119 | (sources."css-selector-tokenizer-0.7.2" // { | |
8002 | dependencies = [ |
|
8120 | dependencies = [ | |
8003 |
sources." |
|
8121 | sources."jsesc-0.5.0" | |
|
8122 | sources."regexpu-core-4.7.0" | |||
|
8123 | sources."regjsgen-0.5.1" | |||
|
8124 | sources."regjsparser-0.6.4" | |||
8004 | ]; |
|
8125 | ]; | |
8005 | }) |
|
8126 | }) | |
8006 | sources."css-what-2.1.3" |
|
8127 | sources."css-what-2.1.3" | |
8007 |
sources."cssesc-0 |
|
8128 | sources."cssesc-3.0.0" | |
8008 | sources."cssnano-3.10.0" |
|
8129 | sources."cssnano-3.10.0" | |
8009 | sources."csso-2.3.2" |
|
8130 | sources."csso-2.3.2" | |
8010 | sources."cyclist-1.0.1" |
|
8131 | sources."cyclist-1.0.1" | |
@@ -8024,13 +8145,13 b' let' | |||||
8024 | sources."defined-1.0.0" |
|
8145 | sources."defined-1.0.0" | |
8025 | sources."delayed-stream-1.0.0" |
|
8146 | sources."delayed-stream-1.0.0" | |
8026 | sources."delegate-3.2.0" |
|
8147 | sources."delegate-3.2.0" | |
8027 |
sources."des.js-1.0. |
|
8148 | sources."des.js-1.0.1" | |
8028 | sources."detect-file-1.0.0" |
|
8149 | sources."detect-file-1.0.0" | |
8029 | sources."detect-indent-4.0.0" |
|
8150 | sources."detect-indent-4.0.0" | |
8030 | sources."diffie-hellman-5.0.3" |
|
8151 | sources."diffie-hellman-5.0.3" | |
8031 | sources."dir-glob-2.2.2" |
|
8152 | sources."dir-glob-2.2.2" | |
8032 | sources."dom-converter-0.2.0" |
|
8153 | sources."dom-converter-0.2.0" | |
8033 |
(sources."dom-serializer-0.2. |
|
8154 | (sources."dom-serializer-0.2.2" // { | |
8034 | dependencies = [ |
|
8155 | dependencies = [ | |
8035 | sources."domelementtype-2.0.1" |
|
8156 | sources."domelementtype-2.0.1" | |
8036 | sources."entities-2.0.0" |
|
8157 | sources."entities-2.0.0" | |
@@ -8046,33 +8167,33 b' let' | |||||
8046 | sources."domelementtype-1.3.1" |
|
8167 | sources."domelementtype-1.3.1" | |
8047 | sources."domhandler-2.3.0" |
|
8168 | sources."domhandler-2.3.0" | |
8048 | sources."domutils-1.5.1" |
|
8169 | sources."domutils-1.5.1" | |
8049 |
sources."dropzone-5. |
|
8170 | sources."dropzone-5.7.0" | |
8050 | sources."duplexer-0.1.1" |
|
8171 | sources."duplexer-0.1.1" | |
8051 | (sources."duplexify-3.7.1" // { |
|
8172 | (sources."duplexify-3.7.1" // { | |
8052 | dependencies = [ |
|
8173 | dependencies = [ | |
8053 |
sources."readable-stream-2.3. |
|
8174 | sources."readable-stream-2.3.7" | |
8054 | sources."safe-buffer-5.1.2" |
|
8175 | sources."safe-buffer-5.1.2" | |
8055 | sources."string_decoder-1.1.1" |
|
8176 | sources."string_decoder-1.1.1" | |
8056 | ]; |
|
8177 | ]; | |
8057 | }) |
|
8178 | }) | |
8058 | sources."ecc-jsbn-0.1.2" |
|
8179 | sources."ecc-jsbn-0.1.2" | |
8059 |
sources."electron-to-chromium-1.3. |
|
8180 | sources."electron-to-chromium-1.3.412" | |
8060 |
sources."elliptic-6.5. |
|
8181 | sources."elliptic-6.5.2" | |
8061 |
sources."emojis-list- |
|
8182 | sources."emojis-list-3.0.0" | |
8062 | sources."end-of-stream-1.4.4" |
|
8183 | sources."end-of-stream-1.4.4" | |
8063 | (sources."enhanced-resolve-4.1.1" // { |
|
8184 | (sources."enhanced-resolve-4.1.1" // { | |
8064 | dependencies = [ |
|
8185 | dependencies = [ | |
8065 | sources."graceful-fs-4.2.3" |
|
8186 | sources."graceful-fs-4.2.3" | |
8066 | sources."memory-fs-0.5.0" |
|
8187 | sources."memory-fs-0.5.0" | |
8067 |
sources."readable-stream-2.3. |
|
8188 | sources."readable-stream-2.3.7" | |
8068 | sources."safe-buffer-5.1.2" |
|
8189 | sources."safe-buffer-5.1.2" | |
8069 | sources."string_decoder-1.1.1" |
|
8190 | sources."string_decoder-1.1.1" | |
8070 | ]; |
|
8191 | ]; | |
8071 | }) |
|
8192 | }) | |
8072 | sources."entities-1.0.0" |
|
8193 | sources."entities-1.0.0" | |
8073 | sources."errno-0.1.7" |
|
8194 | sources."errno-0.1.7" | |
8074 |
sources."es-abstract-1.1 |
|
8195 | sources."es-abstract-1.17.5" | |
8075 |
sources."es-to-primitive-1.2. |
|
8196 | sources."es-to-primitive-1.2.1" | |
8076 | sources."es6-templates-0.2.3" |
|
8197 | sources."es6-templates-0.2.3" | |
8077 | sources."escape-string-regexp-1.0.5" |
|
8198 | sources."escape-string-regexp-1.0.5" | |
8078 | sources."eslint-scope-4.0.3" |
|
8199 | sources."eslint-scope-4.0.3" | |
@@ -8082,7 +8203,7 b' let' | |||||
8082 | sources."estraverse-4.3.0" |
|
8203 | sources."estraverse-4.3.0" | |
8083 | sources."esutils-2.0.3" |
|
8204 | sources."esutils-2.0.3" | |
8084 | sources."eventemitter2-0.4.14" |
|
8205 | sources."eventemitter2-0.4.14" | |
8085 |
sources."events-3. |
|
8206 | sources."events-3.1.0" | |
8086 | sources."evp_bytestokey-1.0.3" |
|
8207 | sources."evp_bytestokey-1.0.3" | |
8087 | sources."execa-1.0.0" |
|
8208 | sources."execa-1.0.0" | |
8088 | sources."exit-0.1.2" |
|
8209 | sources."exit-0.1.2" | |
@@ -8119,13 +8240,14 b' let' | |||||
8119 | ]; |
|
8240 | ]; | |
8120 | }) |
|
8241 | }) | |
8121 | sources."extsprintf-1.3.0" |
|
8242 | sources."extsprintf-1.3.0" | |
8122 |
sources."fast-deep-equal- |
|
8243 | sources."fast-deep-equal-3.1.1" | |
8123 |
sources."fast-json-stable-stringify-2. |
|
8244 | sources."fast-json-stable-stringify-2.1.0" | |
8124 | sources."fastparse-1.1.2" |
|
8245 | sources."fastparse-1.1.2" | |
8125 | sources."favico.js-0.3.10" |
|
8246 | sources."favico.js-0.3.10" | |
8126 | sources."faye-websocket-0.4.4" |
|
8247 | sources."faye-websocket-0.4.4" | |
8127 | sources."figures-1.7.0" |
|
8248 | sources."figures-1.7.0" | |
8128 | sources."file-sync-cmp-0.1.1" |
|
8249 | sources."file-sync-cmp-0.1.1" | |
|
8250 | sources."file-uri-to-path-1.0.0" | |||
8129 | (sources."fill-range-4.0.0" // { |
|
8251 | (sources."fill-range-4.0.0" // { | |
8130 | dependencies = [ |
|
8252 | dependencies = [ | |
8131 | sources."extend-shallow-2.0.1" |
|
8253 | sources."extend-shallow-2.0.1" | |
@@ -8145,7 +8267,7 b' let' | |||||
8145 | sources."flatten-1.0.3" |
|
8267 | sources."flatten-1.0.3" | |
8146 | (sources."flush-write-stream-1.1.1" // { |
|
8268 | (sources."flush-write-stream-1.1.1" // { | |
8147 | dependencies = [ |
|
8269 | dependencies = [ | |
8148 |
sources."readable-stream-2.3. |
|
8270 | sources."readable-stream-2.3.7" | |
8149 | sources."safe-buffer-5.1.2" |
|
8271 | sources."safe-buffer-5.1.2" | |
8150 | sources."string_decoder-1.1.1" |
|
8272 | sources."string_decoder-1.1.1" | |
8151 | ]; |
|
8273 | ]; | |
@@ -8157,7 +8279,7 b' let' | |||||
8157 | sources."fragment-cache-0.2.1" |
|
8279 | sources."fragment-cache-0.2.1" | |
8158 | (sources."from2-2.3.0" // { |
|
8280 | (sources."from2-2.3.0" // { | |
8159 | dependencies = [ |
|
8281 | dependencies = [ | |
8160 |
sources."readable-stream-2.3. |
|
8282 | sources."readable-stream-2.3.7" | |
8161 | sources."safe-buffer-5.1.2" |
|
8283 | sources."safe-buffer-5.1.2" | |
8162 | sources."string_decoder-1.1.1" |
|
8284 | sources."string_decoder-1.1.1" | |
8163 | ]; |
|
8285 | ]; | |
@@ -8168,7 +8290,7 b' let' | |||||
8168 | ]; |
|
8290 | ]; | |
8169 | }) |
|
8291 | }) | |
8170 | sources."fs.realpath-1.0.0" |
|
8292 | sources."fs.realpath-1.0.0" | |
8171 |
sources."fsevents-1.2. |
|
8293 | sources."fsevents-1.2.12" | |
8172 | sources."function-bind-1.1.1" |
|
8294 | sources."function-bind-1.1.1" | |
8173 | sources."gaze-0.5.2" |
|
8295 | sources."gaze-0.5.2" | |
8174 | sources."get-caller-file-1.0.3" |
|
8296 | sources."get-caller-file-1.0.3" | |
@@ -8200,7 +8322,7 b' let' | |||||
8200 | sources."globals-9.18.0" |
|
8322 | sources."globals-9.18.0" | |
8201 | (sources."globby-7.1.1" // { |
|
8323 | (sources."globby-7.1.1" // { | |
8202 | dependencies = [ |
|
8324 | dependencies = [ | |
8203 |
sources."glob-7.1. |
|
8325 | sources."glob-7.1.6" | |
8204 | sources."minimatch-3.0.4" |
|
8326 | sources."minimatch-3.0.4" | |
8205 | ]; |
|
8327 | ]; | |
8206 | }) |
|
8328 | }) | |
@@ -8214,7 +8336,7 b' let' | |||||
8214 | sources."grunt-0.4.5" |
|
8336 | sources."grunt-0.4.5" | |
8215 | (sources."grunt-cli-1.3.2" // { |
|
8337 | (sources."grunt-cli-1.3.2" // { | |
8216 | dependencies = [ |
|
8338 | dependencies = [ | |
8217 |
sources."nopt-4.0. |
|
8339 | sources."nopt-4.0.3" | |
8218 | ]; |
|
8340 | ]; | |
8219 | }) |
|
8341 | }) | |
8220 | (sources."grunt-contrib-concat-0.5.1" // { |
|
8342 | (sources."grunt-contrib-concat-0.5.1" // { | |
@@ -8289,7 +8411,7 b' let' | |||||
8289 | sources."has-1.0.3" |
|
8411 | sources."has-1.0.3" | |
8290 | sources."has-ansi-0.1.0" |
|
8412 | sources."has-ansi-0.1.0" | |
8291 | sources."has-flag-3.0.0" |
|
8413 | sources."has-flag-3.0.0" | |
8292 |
sources."has-symbols-1.0. |
|
8414 | sources."has-symbols-1.0.1" | |
8293 | sources."has-value-1.0.0" |
|
8415 | sources."has-value-1.0.0" | |
8294 | (sources."has-values-1.0.0" // { |
|
8416 | (sources."has-values-1.0.0" // { | |
8295 | dependencies = [ |
|
8417 | dependencies = [ | |
@@ -8321,6 +8443,7 b' let' | |||||
8321 | (sources."html-webpack-plugin-3.2.0" // { |
|
8443 | (sources."html-webpack-plugin-3.2.0" // { | |
8322 | dependencies = [ |
|
8444 | dependencies = [ | |
8323 | sources."big.js-3.2.0" |
|
8445 | sources."big.js-3.2.0" | |
|
8446 | sources."emojis-list-2.1.0" | |||
8324 | sources."json5-0.5.1" |
|
8447 | sources."json5-0.5.1" | |
8325 | sources."loader-utils-0.2.17" |
|
8448 | sources."loader-utils-0.2.17" | |
8326 | sources."lodash-4.17.15" |
|
8449 | sources."lodash-4.17.15" | |
@@ -8348,7 +8471,7 b' let' | |||||
8348 | dependencies = [ |
|
8471 | dependencies = [ | |
8349 | sources."find-up-3.0.0" |
|
8472 | sources."find-up-3.0.0" | |
8350 | sources."locate-path-3.0.0" |
|
8473 | sources."locate-path-3.0.0" | |
8351 |
sources."p-limit-2. |
|
8474 | sources."p-limit-2.3.0" | |
8352 | sources."p-locate-3.0.0" |
|
8475 | sources."p-locate-3.0.0" | |
8353 | sources."p-try-2.2.0" |
|
8476 | sources."p-try-2.2.0" | |
8354 | sources."pkg-dir-3.0.0" |
|
8477 | sources."pkg-dir-3.0.0" | |
@@ -8368,13 +8491,13 b' let' | |||||
8368 | sources."is-accessor-descriptor-1.0.0" |
|
8491 | sources."is-accessor-descriptor-1.0.0" | |
8369 | sources."is-binary-path-1.0.1" |
|
8492 | sources."is-binary-path-1.0.1" | |
8370 | sources."is-buffer-1.1.6" |
|
8493 | sources."is-buffer-1.1.6" | |
8371 |
sources."is-callable-1.1. |
|
8494 | sources."is-callable-1.1.5" | |
8372 | sources."is-data-descriptor-1.0.0" |
|
8495 | sources."is-data-descriptor-1.0.0" | |
8373 |
sources."is-date-object-1.0. |
|
8496 | sources."is-date-object-1.0.2" | |
8374 | sources."is-descriptor-1.0.2" |
|
8497 | sources."is-descriptor-1.0.2" | |
8375 | sources."is-extendable-0.1.1" |
|
8498 | sources."is-extendable-0.1.1" | |
8376 | sources."is-extglob-2.1.1" |
|
8499 | sources."is-extglob-2.1.1" | |
8377 |
sources."is-finite-1.0 |
|
8500 | sources."is-finite-1.1.0" | |
8378 | sources."is-fullwidth-code-point-1.0.0" |
|
8501 | sources."is-fullwidth-code-point-1.0.0" | |
8379 | sources."is-glob-3.1.0" |
|
8502 | sources."is-glob-3.1.0" | |
8380 | (sources."is-number-3.0.0" // { |
|
8503 | (sources."is-number-3.0.0" // { | |
@@ -8384,11 +8507,11 b' let' | |||||
8384 | }) |
|
8507 | }) | |
8385 | sources."is-plain-obj-1.1.0" |
|
8508 | sources."is-plain-obj-1.1.0" | |
8386 | sources."is-plain-object-2.0.4" |
|
8509 | sources."is-plain-object-2.0.4" | |
8387 |
sources."is-regex-1.0. |
|
8510 | sources."is-regex-1.0.5" | |
8388 | sources."is-relative-1.0.0" |
|
8511 | sources."is-relative-1.0.0" | |
8389 | sources."is-stream-1.1.0" |
|
8512 | sources."is-stream-1.1.0" | |
8390 | sources."is-svg-2.1.0" |
|
8513 | sources."is-svg-2.1.0" | |
8391 |
sources."is-symbol-1.0. |
|
8514 | sources."is-symbol-1.0.3" | |
8392 | sources."is-typedarray-1.0.0" |
|
8515 | sources."is-typedarray-1.0.0" | |
8393 | sources."is-unc-path-1.0.0" |
|
8516 | sources."is-unc-path-1.0.0" | |
8394 | sources."is-windows-1.0.2" |
|
8517 | sources."is-windows-1.0.2" | |
@@ -8397,12 +8520,12 b' let' | |||||
8397 | sources."isobject-3.0.1" |
|
8520 | sources."isobject-3.0.1" | |
8398 | sources."isstream-0.1.2" |
|
8521 | sources."isstream-0.1.2" | |
8399 | sources."jquery-1.11.3" |
|
8522 | sources."jquery-1.11.3" | |
8400 |
sources."js-base64-2.5. |
|
8523 | sources."js-base64-2.5.2" | |
8401 | sources."js-tokens-3.0.2" |
|
8524 | sources."js-tokens-3.0.2" | |
8402 | sources."js-yaml-2.0.5" |
|
8525 | sources."js-yaml-2.0.5" | |
8403 | sources."jsbn-0.1.1" |
|
8526 | sources."jsbn-0.1.1" | |
8404 | sources."jsesc-1.3.0" |
|
8527 | sources."jsesc-1.3.0" | |
8405 |
(sources."jshint-2.10 |
|
8528 | (sources."jshint-2.11.0" // { | |
8406 | dependencies = [ |
|
8529 | dependencies = [ | |
8407 | sources."lodash-4.17.15" |
|
8530 | sources."lodash-4.17.15" | |
8408 | sources."minimatch-3.0.4" |
|
8531 | sources."minimatch-3.0.4" | |
@@ -8420,7 +8543,7 b' let' | |||||
8420 | sources."assert-plus-1.0.0" |
|
8543 | sources."assert-plus-1.0.0" | |
8421 | ]; |
|
8544 | ]; | |
8422 | }) |
|
8545 | }) | |
8423 |
sources."kind-of-6.0. |
|
8546 | sources."kind-of-6.0.3" | |
8424 | sources."lazy-cache-1.0.4" |
|
8547 | sources."lazy-cache-1.0.4" | |
8425 | sources."lcid-2.0.0" |
|
8548 | sources."lcid-2.0.0" | |
8426 | (sources."less-2.7.3" // { |
|
8549 | (sources."less-2.7.3" // { | |
@@ -8434,7 +8557,7 b' let' | |||||
8434 | ]; |
|
8557 | ]; | |
8435 | }) |
|
8558 | }) | |
8436 | sources."loader-runner-2.4.0" |
|
8559 | sources."loader-runner-2.4.0" | |
8437 |
sources."loader-utils-1. |
|
8560 | sources."loader-utils-1.4.0" | |
8438 | sources."locate-path-2.0.0" |
|
8561 | sources."locate-path-2.0.0" | |
8439 | sources."lodash-0.9.2" |
|
8562 | sources."lodash-0.9.2" | |
8440 | sources."lodash.camelcase-4.3.0" |
|
8563 | sources."lodash.camelcase-4.3.0" | |
@@ -8451,7 +8574,7 b' let' | |||||
8451 | sources."map-cache-0.2.2" |
|
8574 | sources."map-cache-0.2.2" | |
8452 | sources."map-visit-1.0.0" |
|
8575 | sources."map-visit-1.0.0" | |
8453 | sources."mark.js-8.11.1" |
|
8576 | sources."mark.js-8.11.1" | |
8454 |
sources."math-expression-evaluator-1.2. |
|
8577 | sources."math-expression-evaluator-1.2.22" | |
8455 | (sources."maxmin-2.1.0" // { |
|
8578 | (sources."maxmin-2.1.0" // { | |
8456 | dependencies = [ |
|
8579 | dependencies = [ | |
8457 | sources."ansi-regex-2.1.1" |
|
8580 | sources."ansi-regex-2.1.1" | |
@@ -8466,7 +8589,7 b' let' | |||||
8466 | sources."mem-4.3.0" |
|
8589 | sources."mem-4.3.0" | |
8467 | (sources."memory-fs-0.4.1" // { |
|
8590 | (sources."memory-fs-0.4.1" // { | |
8468 | dependencies = [ |
|
8591 | dependencies = [ | |
8469 |
sources."readable-stream-2.3. |
|
8592 | sources."readable-stream-2.3.7" | |
8470 | sources."safe-buffer-5.1.2" |
|
8593 | sources."safe-buffer-5.1.2" | |
8471 | sources."string_decoder-1.1.1" |
|
8594 | sources."string_decoder-1.1.1" | |
8472 | ]; |
|
8595 | ]; | |
@@ -8474,29 +8597,25 b' let' | |||||
8474 | sources."micromatch-3.1.10" |
|
8597 | sources."micromatch-3.1.10" | |
8475 | sources."miller-rabin-4.0.1" |
|
8598 | sources."miller-rabin-4.0.1" | |
8476 | sources."mime-1.6.0" |
|
8599 | sources."mime-1.6.0" | |
8477 |
sources."mime-db-1.4 |
|
8600 | sources."mime-db-1.43.0" | |
8478 |
sources."mime-types-2.1.2 |
|
8601 | sources."mime-types-2.1.26" | |
8479 | sources."mimic-fn-2.1.0" |
|
8602 | sources."mimic-fn-2.1.0" | |
8480 | sources."minimalistic-assert-1.0.1" |
|
8603 | sources."minimalistic-assert-1.0.1" | |
8481 | sources."minimalistic-crypto-utils-1.0.1" |
|
8604 | sources."minimalistic-crypto-utils-1.0.1" | |
8482 | sources."minimatch-0.2.14" |
|
8605 | sources."minimatch-0.2.14" | |
8483 |
sources."minimist-1.2. |
|
8606 | sources."minimist-1.2.5" | |
8484 | sources."mississippi-2.0.0" |
|
8607 | sources."mississippi-2.0.0" | |
8485 | (sources."mixin-deep-1.3.2" // { |
|
8608 | (sources."mixin-deep-1.3.2" // { | |
8486 | dependencies = [ |
|
8609 | dependencies = [ | |
8487 | sources."is-extendable-1.0.1" |
|
8610 | sources."is-extendable-1.0.1" | |
8488 | ]; |
|
8611 | ]; | |
8489 | }) |
|
8612 | }) | |
8490 |
|
|
8613 | sources."mkdirp-0.5.5" | |
8491 | dependencies = [ |
|
|||
8492 | sources."minimist-0.0.8" |
|
|||
8493 | ]; |
|
|||
8494 | }) |
|
|||
8495 | sources."moment-2.24.0" |
|
8614 | sources."moment-2.24.0" | |
8496 |
sources."mousetrap-1.6. |
|
8615 | sources."mousetrap-1.6.5" | |
8497 | (sources."move-concurrently-1.0.1" // { |
|
8616 | (sources."move-concurrently-1.0.1" // { | |
8498 | dependencies = [ |
|
8617 | dependencies = [ | |
8499 |
sources."glob-7.1. |
|
8618 | sources."glob-7.1.6" | |
8500 | sources."minimatch-3.0.4" |
|
8619 | sources."minimatch-3.0.4" | |
8501 | sources."rimraf-2.7.1" |
|
8620 | sources."rimraf-2.7.1" | |
8502 | ]; |
|
8621 | ]; | |
@@ -8509,7 +8628,7 b' let' | |||||
8509 | sources."no-case-2.3.2" |
|
8628 | sources."no-case-2.3.2" | |
8510 | (sources."node-libs-browser-2.2.1" // { |
|
8629 | (sources."node-libs-browser-2.2.1" // { | |
8511 | dependencies = [ |
|
8630 | dependencies = [ | |
8512 |
(sources."readable-stream-2.3. |
|
8631 | (sources."readable-stream-2.3.7" // { | |
8513 | dependencies = [ |
|
8632 | dependencies = [ | |
8514 | sources."string_decoder-1.1.1" |
|
8633 | sources."string_decoder-1.1.1" | |
8515 | ]; |
|
8634 | ]; | |
@@ -8550,11 +8669,12 b' let' | |||||
8550 | sources."kind-of-3.2.2" |
|
8669 | sources."kind-of-3.2.2" | |
8551 | ]; |
|
8670 | ]; | |
8552 | }) |
|
8671 | }) | |
8553 |
sources."object-inspect-1. |
|
8672 | sources."object-inspect-1.7.0" | |
8554 | sources."object-keys-1.1.1" |
|
8673 | sources."object-keys-1.1.1" | |
8555 | sources."object-visit-1.0.1" |
|
8674 | sources."object-visit-1.0.1" | |
|
8675 | sources."object.assign-4.1.0" | |||
8556 | sources."object.defaults-1.1.0" |
|
8676 | sources."object.defaults-1.1.0" | |
8557 |
sources."object.getownpropertydescriptors-2.0 |
|
8677 | sources."object.getownpropertydescriptors-2.1.0" | |
8558 | sources."object.map-1.0.1" |
|
8678 | sources."object.map-1.0.1" | |
8559 | sources."object.pick-1.3.0" |
|
8679 | sources."object.pick-1.3.0" | |
8560 | sources."once-1.4.0" |
|
8680 | sources."once-1.4.0" | |
@@ -8569,10 +8689,10 b' let' | |||||
8569 | sources."p-limit-1.3.0" |
|
8689 | sources."p-limit-1.3.0" | |
8570 | sources."p-locate-2.0.0" |
|
8690 | sources."p-locate-2.0.0" | |
8571 | sources."p-try-1.0.0" |
|
8691 | sources."p-try-1.0.0" | |
8572 |
sources."pako-1.0.1 |
|
8692 | sources."pako-1.0.11" | |
8573 | (sources."parallel-transform-1.2.0" // { |
|
8693 | (sources."parallel-transform-1.2.0" // { | |
8574 | dependencies = [ |
|
8694 | dependencies = [ | |
8575 |
sources."readable-stream-2.3. |
|
8695 | sources."readable-stream-2.3.7" | |
8576 | sources."safe-buffer-5.1.2" |
|
8696 | sources."safe-buffer-5.1.2" | |
8577 | sources."string_decoder-1.1.1" |
|
8697 | sources."string_decoder-1.1.1" | |
8578 | ]; |
|
8698 | ]; | |
@@ -8729,7 +8849,7 b' let' | |||||
8729 | (sources."readdirp-2.2.1" // { |
|
8849 | (sources."readdirp-2.2.1" // { | |
8730 | dependencies = [ |
|
8850 | dependencies = [ | |
8731 | sources."graceful-fs-4.2.3" |
|
8851 | sources."graceful-fs-4.2.3" | |
8732 |
sources."readable-stream-2.3. |
|
8852 | sources."readable-stream-2.3.7" | |
8733 | sources."safe-buffer-5.1.2" |
|
8853 | sources."safe-buffer-5.1.2" | |
8734 | sources."string_decoder-1.1.1" |
|
8854 | sources."string_decoder-1.1.1" | |
8735 | ]; |
|
8855 | ]; | |
@@ -8747,6 +8867,7 b' let' | |||||
8747 | }) |
|
8867 | }) | |
8748 | sources."reduce-function-call-1.0.3" |
|
8868 | sources."reduce-function-call-1.0.3" | |
8749 | sources."regenerate-1.4.0" |
|
8869 | sources."regenerate-1.4.0" | |
|
8870 | sources."regenerate-unicode-properties-8.2.0" | |||
8750 | sources."regenerator-runtime-0.11.1" |
|
8871 | sources."regenerator-runtime-0.11.1" | |
8751 | sources."regenerator-transform-0.10.1" |
|
8872 | sources."regenerator-transform-0.10.1" | |
8752 | sources."regex-not-1.0.2" |
|
8873 | sources."regex-not-1.0.2" | |
@@ -8771,7 +8892,7 b' let' | |||||
8771 | sources."request-2.81.0" |
|
8892 | sources."request-2.81.0" | |
8772 | sources."require-directory-2.1.1" |
|
8893 | sources."require-directory-2.1.1" | |
8773 | sources."require-main-filename-1.0.1" |
|
8894 | sources."require-main-filename-1.0.1" | |
8774 |
sources."resolve-1.1 |
|
8895 | sources."resolve-1.16.0" | |
8775 | sources."resolve-cwd-2.0.0" |
|
8896 | sources."resolve-cwd-2.0.0" | |
8776 | sources."resolve-dir-1.0.1" |
|
8897 | sources."resolve-dir-1.0.1" | |
8777 | sources."resolve-from-3.0.0" |
|
8898 | sources."resolve-from-3.0.0" | |
@@ -8787,7 +8908,7 b' let' | |||||
8787 | sources."sax-1.2.4" |
|
8908 | sources."sax-1.2.4" | |
8788 | (sources."schema-utils-0.4.7" // { |
|
8909 | (sources."schema-utils-0.4.7" // { | |
8789 | dependencies = [ |
|
8910 | dependencies = [ | |
8790 |
sources."ajv-6.10 |
|
8911 | sources."ajv-6.12.0" | |
8791 | ]; |
|
8912 | ]; | |
8792 | }) |
|
8913 | }) | |
8793 | sources."select-1.1.2" |
|
8914 | sources."select-1.1.2" | |
@@ -8805,7 +8926,7 b' let' | |||||
8805 | sources."shebang-regex-1.0.0" |
|
8926 | sources."shebang-regex-1.0.0" | |
8806 | sources."shelljs-0.3.0" |
|
8927 | sources."shelljs-0.3.0" | |
8807 | sources."sigmund-1.0.1" |
|
8928 | sources."sigmund-1.0.1" | |
8808 |
sources."signal-exit-3.0. |
|
8929 | sources."signal-exit-3.0.3" | |
8809 | sources."slash-1.0.0" |
|
8930 | sources."slash-1.0.0" | |
8810 | (sources."snapdragon-0.8.2" // { |
|
8931 | (sources."snapdragon-0.8.2" // { | |
8811 | dependencies = [ |
|
8932 | dependencies = [ | |
@@ -8839,7 +8960,7 b' let' | |||||
8839 | sources."sort-keys-1.1.2" |
|
8960 | sources."sort-keys-1.1.2" | |
8840 | sources."source-list-map-2.0.1" |
|
8961 | sources."source-list-map-2.0.1" | |
8841 | sources."source-map-0.5.7" |
|
8962 | sources."source-map-0.5.7" | |
8842 |
sources."source-map-resolve-0.5. |
|
8963 | sources."source-map-resolve-0.5.3" | |
8843 | sources."source-map-support-0.4.18" |
|
8964 | sources."source-map-support-0.4.18" | |
8844 | sources."source-map-url-0.4.0" |
|
8965 | sources."source-map-url-0.4.0" | |
8845 | sources."split-string-3.1.0" |
|
8966 | sources."split-string-3.1.0" | |
@@ -8870,7 +8991,7 b' let' | |||||
8870 | sources."sticky-sidebar-3.3.1" |
|
8991 | sources."sticky-sidebar-3.3.1" | |
8871 | (sources."stream-browserify-2.0.2" // { |
|
8992 | (sources."stream-browserify-2.0.2" // { | |
8872 | dependencies = [ |
|
8993 | dependencies = [ | |
8873 |
sources."readable-stream-2.3. |
|
8994 | sources."readable-stream-2.3.7" | |
8874 | sources."safe-buffer-5.1.2" |
|
8995 | sources."safe-buffer-5.1.2" | |
8875 | sources."string_decoder-1.1.1" |
|
8996 | sources."string_decoder-1.1.1" | |
8876 | ]; |
|
8997 | ]; | |
@@ -8878,12 +8999,12 b' let' | |||||
8878 | sources."stream-each-1.2.3" |
|
8999 | sources."stream-each-1.2.3" | |
8879 | (sources."stream-http-2.8.3" // { |
|
9000 | (sources."stream-http-2.8.3" // { | |
8880 | dependencies = [ |
|
9001 | dependencies = [ | |
8881 |
sources."readable-stream-2.3. |
|
9002 | sources."readable-stream-2.3.7" | |
8882 | sources."safe-buffer-5.1.2" |
|
9003 | sources."safe-buffer-5.1.2" | |
8883 | sources."string_decoder-1.1.1" |
|
9004 | sources."string_decoder-1.1.1" | |
8884 | ]; |
|
9005 | ]; | |
8885 | }) |
|
9006 | }) | |
8886 |
sources."stream-shift-1.0. |
|
9007 | sources."stream-shift-1.0.1" | |
8887 | sources."strict-uri-encode-1.1.0" |
|
9008 | sources."strict-uri-encode-1.1.0" | |
8888 | (sources."string-width-2.1.1" // { |
|
9009 | (sources."string-width-2.1.1" // { | |
8889 | dependencies = [ |
|
9010 | dependencies = [ | |
@@ -8892,8 +9013,10 b' let' | |||||
8892 | sources."strip-ansi-4.0.0" |
|
9013 | sources."strip-ansi-4.0.0" | |
8893 | ]; |
|
9014 | ]; | |
8894 | }) |
|
9015 | }) | |
8895 |
sources."string.prototype.trim |
|
9016 | sources."string.prototype.trimend-1.0.1" | |
8896 |
sources."string.prototype.trim |
|
9017 | sources."string.prototype.trimleft-2.1.2" | |
|
9018 | sources."string.prototype.trimright-2.1.2" | |||
|
9019 | sources."string.prototype.trimstart-1.0.1" | |||
8897 | sources."string_decoder-0.10.31" |
|
9020 | sources."string_decoder-0.10.31" | |
8898 | sources."stringstream-0.0.6" |
|
9021 | sources."stringstream-0.0.6" | |
8899 | sources."strip-ansi-0.3.0" |
|
9022 | sources."strip-ansi-0.3.0" | |
@@ -8909,11 +9032,12 b' let' | |||||
8909 | sources."js-yaml-3.7.0" |
|
9032 | sources."js-yaml-3.7.0" | |
8910 | ]; |
|
9033 | ]; | |
8911 | }) |
|
9034 | }) | |
|
9035 | sources."sweetalert2-9.10.12" | |||
8912 | sources."tapable-1.1.3" |
|
9036 | sources."tapable-1.1.3" | |
8913 | sources."through-2.3.8" |
|
9037 | sources."through-2.3.8" | |
8914 | (sources."through2-2.0.5" // { |
|
9038 | (sources."through2-2.0.5" // { | |
8915 | dependencies = [ |
|
9039 | dependencies = [ | |
8916 |
sources."readable-stream-2.3. |
|
9040 | sources."readable-stream-2.3.7" | |
8917 | sources."safe-buffer-5.1.2" |
|
9041 | sources."safe-buffer-5.1.2" | |
8918 | sources."string_decoder-1.1.1" |
|
9042 | sources."string_decoder-1.1.1" | |
8919 | ]; |
|
9043 | ]; | |
@@ -8942,6 +9066,7 b' let' | |||||
8942 | dependencies = [ |
|
9066 | dependencies = [ | |
8943 | sources."big.js-3.2.0" |
|
9067 | sources."big.js-3.2.0" | |
8944 | sources."colors-1.4.0" |
|
9068 | sources."colors-1.4.0" | |
|
9069 | sources."emojis-list-2.1.0" | |||
8945 | sources."enhanced-resolve-3.4.1" |
|
9070 | sources."enhanced-resolve-3.4.1" | |
8946 | sources."graceful-fs-4.2.3" |
|
9071 | sources."graceful-fs-4.2.3" | |
8947 | sources."json5-0.5.1" |
|
9072 | sources."json5-0.5.1" | |
@@ -8949,7 +9074,7 b' let' | |||||
8949 | sources."tapable-0.2.9" |
|
9074 | sources."tapable-0.2.9" | |
8950 | ]; |
|
9075 | ]; | |
8951 | }) |
|
9076 | }) | |
8952 |
sources."tslib-1.1 |
|
9077 | sources."tslib-1.11.1" | |
8953 | sources."tty-browserify-0.0.0" |
|
9078 | sources."tty-browserify-0.0.0" | |
8954 | sources."tunnel-agent-0.6.0" |
|
9079 | sources."tunnel-agent-0.6.0" | |
8955 | sources."tweetnacl-0.14.5" |
|
9080 | sources."tweetnacl-0.14.5" | |
@@ -8960,11 +9085,7 b' let' | |||||
8960 | sources."source-map-0.6.1" |
|
9085 | sources."source-map-0.6.1" | |
8961 | ]; |
|
9086 | ]; | |
8962 | }) |
|
9087 | }) | |
8963 |
|
|
9088 | sources."uglify-js-3.9.1" | |
8964 | dependencies = [ |
|
|||
8965 | sources."source-map-0.6.1" |
|
|||
8966 | ]; |
|
|||
8967 | }) |
|
|||
8968 | sources."uglify-to-browserify-1.0.2" |
|
9089 | sources."uglify-to-browserify-1.0.2" | |
8969 | (sources."uglifyjs-webpack-plugin-1.3.0" // { |
|
9090 | (sources."uglifyjs-webpack-plugin-1.3.0" // { | |
8970 | dependencies = [ |
|
9091 | dependencies = [ | |
@@ -8974,6 +9095,10 b' let' | |||||
8974 | sources."unc-path-regex-0.1.2" |
|
9095 | sources."unc-path-regex-0.1.2" | |
8975 | sources."underscore-1.7.0" |
|
9096 | sources."underscore-1.7.0" | |
8976 | sources."underscore.string-2.2.1" |
|
9097 | sources."underscore.string-2.2.1" | |
|
9098 | sources."unicode-canonical-property-names-ecmascript-1.0.4" | |||
|
9099 | sources."unicode-match-property-ecmascript-1.0.4" | |||
|
9100 | sources."unicode-match-property-value-ecmascript-1.2.0" | |||
|
9101 | sources."unicode-property-aliases-ecmascript-1.1.0" | |||
8977 | sources."union-value-1.0.1" |
|
9102 | sources."union-value-1.0.1" | |
8978 | sources."uniq-1.0.1" |
|
9103 | sources."uniq-1.0.1" | |
8979 | sources."uniqs-2.0.0" |
|
9104 | sources."uniqs-2.0.0" | |
@@ -9012,17 +9137,17 b' let' | |||||
9012 | sources."util-deprecate-1.0.2" |
|
9137 | sources."util-deprecate-1.0.2" | |
9013 | sources."util.promisify-1.0.0" |
|
9138 | sources."util.promisify-1.0.0" | |
9014 | sources."utila-0.4.0" |
|
9139 | sources."utila-0.4.0" | |
9015 |
sources."uuid-3. |
|
9140 | sources."uuid-3.4.0" | |
9016 | sources."v8-compile-cache-2.1.0" |
|
9141 | sources."v8-compile-cache-2.1.0" | |
9017 | sources."v8flags-3.1.3" |
|
9142 | sources."v8flags-3.1.3" | |
9018 |
sources."vendors-1.0. |
|
9143 | sources."vendors-1.0.4" | |
9019 | (sources."verror-1.10.0" // { |
|
9144 | (sources."verror-1.10.0" // { | |
9020 | dependencies = [ |
|
9145 | dependencies = [ | |
9021 | sources."assert-plus-1.0.0" |
|
9146 | sources."assert-plus-1.0.0" | |
9022 | ]; |
|
9147 | ]; | |
9023 | }) |
|
9148 | }) | |
9024 |
sources."vm-browserify-1.1. |
|
9149 | sources."vm-browserify-1.1.2" | |
9025 |
(sources."watchpack-1.6. |
|
9150 | (sources."watchpack-1.6.1" // { | |
9026 | dependencies = [ |
|
9151 | dependencies = [ | |
9027 | sources."graceful-fs-4.2.3" |
|
9152 | sources."graceful-fs-4.2.3" | |
9028 | ]; |
|
9153 | ]; | |
@@ -9030,7 +9155,7 b' let' | |||||
9030 | sources."waypoints-4.0.1" |
|
9155 | sources."waypoints-4.0.1" | |
9031 | (sources."webpack-4.23.1" // { |
|
9156 | (sources."webpack-4.23.1" // { | |
9032 | dependencies = [ |
|
9157 | dependencies = [ | |
9033 |
sources."ajv-6.10 |
|
9158 | sources."ajv-6.12.0" | |
9034 | ]; |
|
9159 | ]; | |
9035 | }) |
|
9160 | }) | |
9036 | (sources."webpack-cli-3.1.2" // { |
|
9161 | (sources."webpack-cli-3.1.2" // { | |
@@ -9086,7 +9211,7 b' let' | |||||
9086 | dependencies = [ |
|
9211 | dependencies = [ | |
9087 | sources."find-up-3.0.0" |
|
9212 | sources."find-up-3.0.0" | |
9088 | sources."locate-path-3.0.0" |
|
9213 | sources."locate-path-3.0.0" | |
9089 |
sources."p-limit-2. |
|
9214 | sources."p-limit-2.3.0" | |
9090 | sources."p-locate-3.0.0" |
|
9215 | sources."p-locate-3.0.0" | |
9091 | sources."p-try-2.2.0" |
|
9216 | sources."p-try-2.2.0" | |
9092 | ]; |
|
9217 | ]; |
@@ -5,7 +5,7 b'' | |||||
5 |
|
5 | |||
6 | self: super: { |
|
6 | self: super: { | |
7 | "alembic" = super.buildPythonPackage { |
|
7 | "alembic" = super.buildPythonPackage { | |
8 |
name = "alembic-1. |
|
8 | name = "alembic-1.4.2"; | |
9 | doCheck = false; |
|
9 | doCheck = false; | |
10 | propagatedBuildInputs = [ |
|
10 | propagatedBuildInputs = [ | |
11 | self."sqlalchemy" |
|
11 | self."sqlalchemy" | |
@@ -14,8 +14,8 b' self: super: {' | |||||
14 | self."python-dateutil" |
|
14 | self."python-dateutil" | |
15 | ]; |
|
15 | ]; | |
16 | src = fetchurl { |
|
16 | src = fetchurl { | |
17 | url = "https://files.pythonhosted.org/packages/84/64/493c45119dce700a4b9eeecc436ef9e8835ab67bae6414f040cdc7b58f4b/alembic-1.3.1.tar.gz"; |
|
17 | url = "https://files.pythonhosted.org/packages/60/1e/cabc75a189de0fbb2841d0975243e59bde8b7822bacbb95008ac6fe9ad47/alembic-1.4.2.tar.gz"; | |
18 | sha256 = "1cl2chk5jx0rf4hmsd5lljic7iifw17yv3y5xawvp4i14jvpn9s9"; |
|
18 | sha256 = "1gsdrzx9h7wfva200qvvsc9sn4w79mk2vs0bbnzjhxi1jw2b0nh3"; | |
19 | }; |
|
19 | }; | |
20 | meta = { |
|
20 | meta = { | |
21 | license = [ pkgs.lib.licenses.mit ]; |
|
21 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -146,15 +146,15 b' self: super: {' | |||||
146 | }; |
|
146 | }; | |
147 | }; |
|
147 | }; | |
148 | "bleach" = super.buildPythonPackage { |
|
148 | "bleach" = super.buildPythonPackage { | |
149 |
name = "bleach-3.1. |
|
149 | name = "bleach-3.1.3"; | |
150 | doCheck = false; |
|
150 | doCheck = false; | |
151 | propagatedBuildInputs = [ |
|
151 | propagatedBuildInputs = [ | |
152 | self."six" |
|
152 | self."six" | |
153 | self."webencodings" |
|
153 | self."webencodings" | |
154 | ]; |
|
154 | ]; | |
155 | src = fetchurl { |
|
155 | src = fetchurl { | |
156 |
url = "https://files.pythonhosted.org/packages/ |
|
156 | url = "https://files.pythonhosted.org/packages/de/09/5267f8577a92487ed43bc694476c4629c6eca2e3c93fcf690a26bfe39e1d/bleach-3.1.3.tar.gz"; | |
157 | sha256 = "1yhrgrhkln8bd6gn3imj69g1h4xqah9gaz9q26crqr6gmmvpzprz"; |
|
157 | sha256 = "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"; | |
158 | }; |
|
158 | }; | |
159 | meta = { |
|
159 | meta = { | |
160 | license = [ pkgs.lib.licenses.asl20 ]; |
|
160 | license = [ pkgs.lib.licenses.asl20 ]; | |
@@ -171,6 +171,17 b' self: super: {' | |||||
171 | license = [ pkgs.lib.licenses.mit ]; |
|
171 | license = [ pkgs.lib.licenses.mit ]; | |
172 | }; |
|
172 | }; | |
173 | }; |
|
173 | }; | |
|
174 | "cachetools" = super.buildPythonPackage { | |||
|
175 | name = "cachetools-3.1.1"; | |||
|
176 | doCheck = false; | |||
|
177 | src = fetchurl { | |||
|
178 | url = "https://files.pythonhosted.org/packages/ae/37/7fd45996b19200e0cb2027a0b6bef4636951c4ea111bfad36c71287247f6/cachetools-3.1.1.tar.gz"; | |||
|
179 | sha256 = "16m69l6n6y1r1y7cklm92rr7v69ldig2n3lbl3j323w5jz7d78lf"; | |||
|
180 | }; | |||
|
181 | meta = { | |||
|
182 | license = [ pkgs.lib.licenses.mit ]; | |||
|
183 | }; | |||
|
184 | }; | |||
174 | "celery" = super.buildPythonPackage { |
|
185 | "celery" = super.buildPythonPackage { | |
175 | name = "celery-4.3.0"; |
|
186 | name = "celery-4.3.0"; | |
176 | doCheck = false; |
|
187 | doCheck = false; | |
@@ -189,11 +200,11 b' self: super: {' | |||||
189 | }; |
|
200 | }; | |
190 | }; |
|
201 | }; | |
191 | "certifi" = super.buildPythonPackage { |
|
202 | "certifi" = super.buildPythonPackage { | |
192 |
name = "certifi-20 |
|
203 | name = "certifi-2020.4.5.1"; | |
193 | doCheck = false; |
|
204 | doCheck = false; | |
194 | src = fetchurl { |
|
205 | src = fetchurl { | |
195 | url = "https://files.pythonhosted.org/packages/41/bf/9d214a5af07debc6acf7f3f257265618f1db242a3f8e49a9b516f24523a6/certifi-2019.11.28.tar.gz"; |
|
206 | url = "https://files.pythonhosted.org/packages/b8/e2/a3a86a67c3fc8249ed305fc7b7d290ebe5e4d46ad45573884761ef4dea7b/certifi-2020.4.5.1.tar.gz"; | |
196 | sha256 = "07qg6864bk4qxa8akr967amlmsq9v310hp039mcpjx6dliylrdi5"; |
|
207 | sha256 = "06b5gfs7wmmipln8f3z928d2mmx2j4b3x7pnqmj6cvmyfh8v7z2i"; | |
197 | }; |
|
208 | }; | |
198 | meta = { |
|
209 | meta = { | |
199 | license = [ pkgs.lib.licenses.mpl20 { fullName = "Mozilla Public License 2.0 (MPL 2.0)"; } ]; |
|
210 | license = [ pkgs.lib.licenses.mpl20 { fullName = "Mozilla Public License 2.0 (MPL 2.0)"; } ]; | |
@@ -372,6 +383,17 b' self: super: {' | |||||
372 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
383 | license = [ pkgs.lib.licenses.bsdOriginal ]; | |
373 | }; |
|
384 | }; | |
374 | }; |
|
385 | }; | |
|
386 | "cssutils" = super.buildPythonPackage { | |||
|
387 | name = "cssutils-1.0.2"; | |||
|
388 | doCheck = false; | |||
|
389 | src = fetchurl { | |||
|
390 | url = "https://files.pythonhosted.org/packages/5c/0b/c5f29d29c037e97043770b5e7c740b6252993e4b57f029b3cd03c78ddfec/cssutils-1.0.2.tar.gz"; | |||
|
391 | sha256 = "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"; | |||
|
392 | }; | |||
|
393 | meta = { | |||
|
394 | license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL 2.1 or later, see also http://cthedot.de/cssutils/"; } ]; | |||
|
395 | }; | |||
|
396 | }; | |||
375 | "decorator" = super.buildPythonPackage { |
|
397 | "decorator" = super.buildPythonPackage { | |
376 | name = "decorator-4.1.2"; |
|
398 | name = "decorator-4.1.2"; | |
377 | doCheck = false; |
|
399 | doCheck = false; | |
@@ -429,11 +451,11 b' self: super: {' | |||||
429 | }; |
|
451 | }; | |
430 | }; |
|
452 | }; | |
431 | "docutils" = super.buildPythonPackage { |
|
453 | "docutils" = super.buildPythonPackage { | |
432 |
name = "docutils-0.1 |
|
454 | name = "docutils-0.16"; | |
433 | doCheck = false; |
|
455 | doCheck = false; | |
434 | src = fetchurl { |
|
456 | src = fetchurl { | |
435 | url = "https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz"; |
|
457 | url = "https://files.pythonhosted.org/packages/2f/e0/3d435b34abd2d62e8206171892f174b180cd37b09d57b924ca5c2ef2219d/docutils-0.16.tar.gz"; | |
436 | sha256 = "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"; |
|
458 | sha256 = "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"; | |
437 | }; |
|
459 | }; | |
438 | meta = { |
|
460 | meta = { | |
439 | license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.publicDomain pkgs.lib.licenses.gpl1 { fullName = "public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)"; } pkgs.lib.licenses.psfl ]; |
|
461 | license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.publicDomain pkgs.lib.licenses.gpl1 { fullName = "public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)"; } pkgs.lib.licenses.psfl ]; | |
@@ -565,11 +587,11 b' self: super: {' | |||||
565 | }; |
|
587 | }; | |
566 | }; |
|
588 | }; | |
567 | "enum34" = super.buildPythonPackage { |
|
589 | "enum34" = super.buildPythonPackage { | |
568 |
name = "enum34-1.1. |
|
590 | name = "enum34-1.1.10"; | |
569 | doCheck = false; |
|
591 | doCheck = false; | |
570 | src = fetchurl { |
|
592 | src = fetchurl { | |
571 | url = "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"; |
|
593 | url = "https://files.pythonhosted.org/packages/11/c4/2da1f4952ba476677a42f25cd32ab8aaf0e1c0d0e00b89822b835c7e654c/enum34-1.1.10.tar.gz"; | |
572 | sha256 = "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"; |
|
594 | sha256 = "0j7ji699fwswm4vg6w1v07fkbf8dkzdm6gfh88jvs5nqgr3sgrnc"; | |
573 | }; |
|
595 | }; | |
574 | meta = { |
|
596 | meta = { | |
575 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
597 | license = [ pkgs.lib.licenses.bsdOriginal ]; | |
@@ -631,14 +653,14 b' self: super: {' | |||||
631 | }; |
|
653 | }; | |
632 | }; |
|
654 | }; | |
633 | "gevent" = super.buildPythonPackage { |
|
655 | "gevent" = super.buildPythonPackage { | |
634 |
name = "gevent-1. |
|
656 | name = "gevent-1.5.0"; | |
635 | doCheck = false; |
|
657 | doCheck = false; | |
636 | propagatedBuildInputs = [ |
|
658 | propagatedBuildInputs = [ | |
637 | self."greenlet" |
|
659 | self."greenlet" | |
638 | ]; |
|
660 | ]; | |
639 | src = fetchurl { |
|
661 | src = fetchurl { | |
640 |
url = "https://files.pythonhosted.org/packages/ed |
|
662 | url = "https://files.pythonhosted.org/packages/5a/79/2c63d385d017b5dd7d70983a463dfd25befae70c824fedb857df6e72eff2/gevent-1.5.0.tar.gz"; | |
641 | sha256 = "1lchr4akw2jkm5v4kz7bdm4wv3knkfhbfn9vkkz4s5yrkcxzmdqy"; |
|
663 | sha256 = "0aac3d4vhv5n4rsb6cqzq0d1xx9immqz4fmpddw35yxkwdc450dj"; | |
642 | }; |
|
664 | }; | |
643 | meta = { |
|
665 | meta = { | |
644 | license = [ pkgs.lib.licenses.mit ]; |
|
666 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -689,11 +711,11 b' self: super: {' | |||||
689 | }; |
|
711 | }; | |
690 | }; |
|
712 | }; | |
691 | "hupper" = super.buildPythonPackage { |
|
713 | "hupper" = super.buildPythonPackage { | |
692 |
name = "hupper-1. |
|
714 | name = "hupper-1.10.2"; | |
693 | doCheck = false; |
|
715 | doCheck = false; | |
694 | src = fetchurl { |
|
716 | src = fetchurl { | |
695 |
url = "https://files.pythonhosted.org/packages/0 |
|
717 | url = "https://files.pythonhosted.org/packages/41/24/ea90fef04706e54bd1635c05c50dc9cf87cda543c59303a03e7aa7dda0ce/hupper-1.10.2.tar.gz"; | |
696 | sha256 = "0pyg879fv9mbwlnbzw2a3234qqycqs9l97h5mpkmk0bvxhi2471v"; |
|
718 | sha256 = "0am0p6g5cz6xmcaf04xq8q6dzdd9qz0phj6gcmpsckf2mcyza61q"; | |
697 | }; |
|
719 | }; | |
698 | meta = { |
|
720 | meta = { | |
699 | license = [ pkgs.lib.licenses.mit ]; |
|
721 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -711,17 +733,17 b' self: super: {' | |||||
711 | }; |
|
733 | }; | |
712 | }; |
|
734 | }; | |
713 | "importlib-metadata" = super.buildPythonPackage { |
|
735 | "importlib-metadata" = super.buildPythonPackage { | |
714 |
name = "importlib-metadata-0 |
|
736 | name = "importlib-metadata-1.6.0"; | |
715 | doCheck = false; |
|
737 | doCheck = false; | |
716 | propagatedBuildInputs = [ |
|
738 | propagatedBuildInputs = [ | |
717 | self."zipp" |
|
739 | self."zipp" | |
|
740 | self."pathlib2" | |||
718 | self."contextlib2" |
|
741 | self."contextlib2" | |
719 | self."configparser" |
|
742 | self."configparser" | |
720 | self."pathlib2" |
|
|||
721 | ]; |
|
743 | ]; | |
722 | src = fetchurl { |
|
744 | src = fetchurl { | |
723 |
url = "https://files.pythonhosted.org/packages/5d |
|
745 | url = "https://files.pythonhosted.org/packages/b4/1b/baab42e3cd64c9d5caac25a9d6c054f8324cdc38975a44d600569f1f7158/importlib_metadata-1.6.0.tar.gz"; | |
724 | sha256 = "09mdqdfv5rdrwz80jh9m379gxmvk2vhjfz0fg53hid00icvxf65a"; |
|
746 | sha256 = "07icyggasn38yv2swdrd8z6i0plazmc9adavsdkbqqj91j53ll9l"; | |
725 | }; |
|
747 | }; | |
726 | meta = { |
|
748 | meta = { | |
727 | license = [ pkgs.lib.licenses.asl20 ]; |
|
749 | license = [ pkgs.lib.licenses.asl20 ]; | |
@@ -765,15 +787,15 b' self: super: {' | |||||
765 | }; |
|
787 | }; | |
766 | }; |
|
788 | }; | |
767 | "ipdb" = super.buildPythonPackage { |
|
789 | "ipdb" = super.buildPythonPackage { | |
768 | name = "ipdb-0.12"; |
|
790 | name = "ipdb-0.13.2"; | |
769 | doCheck = false; |
|
791 | doCheck = false; | |
770 | propagatedBuildInputs = [ |
|
792 | propagatedBuildInputs = [ | |
771 | self."setuptools" |
|
793 | self."setuptools" | |
772 | self."ipython" |
|
794 | self."ipython" | |
773 | ]; |
|
795 | ]; | |
774 | src = fetchurl { |
|
796 | src = fetchurl { | |
775 | url = "https://files.pythonhosted.org/packages/6d/43/c3c2e866a8803e196d6209595020a4a6db1a3c5d07c01455669497ae23d0/ipdb-0.12.tar.gz"; |
|
797 | url = "https://files.pythonhosted.org/packages/2c/bb/a3e1a441719ebd75c6dac8170d3ddba884b7ee8a5c0f9aefa7297386627a/ipdb-0.13.2.tar.gz"; | |
776 | sha256 = "1khr2n7xfy8hg65kj1bsrjq9g7656pp0ybfa8abpbzpdawji3qnw"; |
|
798 | sha256 = "0jcd849rx30y3wcgzsqbn06v0yjlzvb9x3076q0yxpycdwm1ryvp"; | |
777 | }; |
|
799 | }; | |
778 | meta = { |
|
800 | meta = { | |
779 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
801 | license = [ pkgs.lib.licenses.bsdOriginal ]; | |
@@ -1074,15 +1096,15 b' self: super: {' | |||||
1074 | }; |
|
1096 | }; | |
1075 | }; |
|
1097 | }; | |
1076 | "packaging" = super.buildPythonPackage { |
|
1098 | "packaging" = super.buildPythonPackage { | |
1077 |
name = "packaging- |
|
1099 | name = "packaging-20.3"; | |
1078 | doCheck = false; |
|
1100 | doCheck = false; | |
1079 | propagatedBuildInputs = [ |
|
1101 | propagatedBuildInputs = [ | |
1080 | self."pyparsing" |
|
1102 | self."pyparsing" | |
1081 | self."six" |
|
1103 | self."six" | |
1082 | ]; |
|
1104 | ]; | |
1083 | src = fetchurl { |
|
1105 | src = fetchurl { | |
1084 |
url = "https://files.pythonhosted.org/packages/5 |
|
1106 | url = "https://files.pythonhosted.org/packages/65/37/83e3f492eb52d771e2820e88105f605335553fe10422cba9d256faeb1702/packaging-20.3.tar.gz"; | |
1085 | sha256 = "0izwlz9h0bw171a1chr311g2y7n657zjaf4mq4rgm8pp9lbj9f98"; |
|
1107 | sha256 = "18xpablq278janh03bai9xd4kz9b0yfp6vflazn725ns9x3jna9w"; | |
1086 | }; |
|
1108 | }; | |
1087 | meta = { |
|
1109 | meta = { | |
1088 | license = [ pkgs.lib.licenses.bsdOriginal { fullName = "BSD or Apache License, Version 2.0"; } pkgs.lib.licenses.asl20 ]; |
|
1110 | license = [ pkgs.lib.licenses.bsdOriginal { fullName = "BSD or Apache License, Version 2.0"; } pkgs.lib.licenses.asl20 ]; | |
@@ -1100,25 +1122,25 b' self: super: {' | |||||
1100 | }; |
|
1122 | }; | |
1101 | }; |
|
1123 | }; | |
1102 | "paste" = super.buildPythonPackage { |
|
1124 | "paste" = super.buildPythonPackage { | |
1103 |
name = "paste-3. |
|
1125 | name = "paste-3.4.0"; | |
1104 | doCheck = false; |
|
1126 | doCheck = false; | |
1105 | propagatedBuildInputs = [ |
|
1127 | propagatedBuildInputs = [ | |
1106 | self."six" |
|
1128 | self."six" | |
1107 | ]; |
|
1129 | ]; | |
1108 | src = fetchurl { |
|
1130 | src = fetchurl { | |
1109 | url = "https://files.pythonhosted.org/packages/0d/86/7008b5563594e8a63763f05212a3eb84c85f0b2eff834e5697716e56bca9/Paste-3.2.1.tar.gz"; |
|
1131 | url = "https://files.pythonhosted.org/packages/79/4a/45821b71dd40000507549afd1491546afad8279c0a87527c88776a794158/Paste-3.4.0.tar.gz"; | |
1110 | sha256 = "1vjxr8n1p31c9x9rh8g0f34yisa9028cxpvn36q7g1s0m2b9x71x"; |
|
1132 | sha256 = "16sichvhyci1gaarkjs35mai8vphh7b244qm14hj1isw38nx4c03"; | |
1111 | }; |
|
1133 | }; | |
1112 | meta = { |
|
1134 | meta = { | |
1113 | license = [ pkgs.lib.licenses.mit ]; |
|
1135 | license = [ pkgs.lib.licenses.mit ]; | |
1114 | }; |
|
1136 | }; | |
1115 | }; |
|
1137 | }; | |
1116 | "pastedeploy" = super.buildPythonPackage { |
|
1138 | "pastedeploy" = super.buildPythonPackage { | |
1117 |
name = "pastedeploy-2.0 |
|
1139 | name = "pastedeploy-2.1.0"; | |
1118 | doCheck = false; |
|
1140 | doCheck = false; | |
1119 | src = fetchurl { |
|
1141 | src = fetchurl { | |
1120 |
url = "https://files.pythonhosted.org/packages/ |
|
1142 | url = "https://files.pythonhosted.org/packages/c4/e9/972a1c20318b3ae9edcab11a6cef64308fbae5d0d45ab52c6f8b2b8f35b8/PasteDeploy-2.1.0.tar.gz"; | |
1121 | sha256 = "02imfbbx1mi2h546f3sr37m47dk9qizaqhzzlhx8bkzxa6fzn8yl"; |
|
1143 | sha256 = "16qsq5y6mryslmbp5pn35x4z8z3ndp5rpgl42h226879nrw9hmg7"; | |
1122 | }; |
|
1144 | }; | |
1123 | meta = { |
|
1145 | meta = { | |
1124 | license = [ pkgs.lib.licenses.mit ]; |
|
1146 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -1167,14 +1189,14 b' self: super: {' | |||||
1167 | }; |
|
1189 | }; | |
1168 | }; |
|
1190 | }; | |
1169 | "pexpect" = super.buildPythonPackage { |
|
1191 | "pexpect" = super.buildPythonPackage { | |
1170 |
name = "pexpect-4. |
|
1192 | name = "pexpect-4.8.0"; | |
1171 | doCheck = false; |
|
1193 | doCheck = false; | |
1172 | propagatedBuildInputs = [ |
|
1194 | propagatedBuildInputs = [ | |
1173 | self."ptyprocess" |
|
1195 | self."ptyprocess" | |
1174 | ]; |
|
1196 | ]; | |
1175 | src = fetchurl { |
|
1197 | src = fetchurl { | |
1176 |
url = "https://files.pythonhosted.org/packages/1c |
|
1198 | url = "https://files.pythonhosted.org/packages/e5/9b/ff402e0e930e70467a7178abb7c128709a30dfb22d8777c043e501bc1b10/pexpect-4.8.0.tar.gz"; | |
1177 | sha256 = "1sv2rri15zwhds85a4kamwh9pj49qcxv7m4miyr4jfpfwv81yb4y"; |
|
1199 | sha256 = "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"; | |
1178 | }; |
|
1200 | }; | |
1179 | meta = { |
|
1201 | meta = { | |
1180 | license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ]; |
|
1202 | license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ]; | |
@@ -1237,6 +1259,24 b' self: super: {' | |||||
1237 | license = [ pkgs.lib.licenses.mit ]; |
|
1259 | license = [ pkgs.lib.licenses.mit ]; | |
1238 | }; |
|
1260 | }; | |
1239 | }; |
|
1261 | }; | |
|
1262 | "premailer" = super.buildPythonPackage { | |||
|
1263 | name = "premailer-3.6.1"; | |||
|
1264 | doCheck = false; | |||
|
1265 | propagatedBuildInputs = [ | |||
|
1266 | self."lxml" | |||
|
1267 | self."cssselect" | |||
|
1268 | self."cssutils" | |||
|
1269 | self."requests" | |||
|
1270 | self."cachetools" | |||
|
1271 | ]; | |||
|
1272 | src = fetchurl { | |||
|
1273 | url = "https://files.pythonhosted.org/packages/62/da/2f43cdf9d3d79c80c4856a12389a1f257d65fe9ccc44bc6b4383c8a18e33/premailer-3.6.1.tar.gz"; | |||
|
1274 | sha256 = "08pshx7a110k4ll20x0xhpvyn3kkipkrbgxjjn7ncdxs54ihdhgw"; | |||
|
1275 | }; | |||
|
1276 | meta = { | |||
|
1277 | license = [ pkgs.lib.licenses.psfl { fullName = "Python"; } ]; | |||
|
1278 | }; | |||
|
1279 | }; | |||
1240 | "prompt-toolkit" = super.buildPythonPackage { |
|
1280 | "prompt-toolkit" = super.buildPythonPackage { | |
1241 | name = "prompt-toolkit-1.0.18"; |
|
1281 | name = "prompt-toolkit-1.0.18"; | |
1242 | doCheck = false; |
|
1282 | doCheck = false; | |
@@ -1253,11 +1293,11 b' self: super: {' | |||||
1253 | }; |
|
1293 | }; | |
1254 | }; |
|
1294 | }; | |
1255 | "psutil" = super.buildPythonPackage { |
|
1295 | "psutil" = super.buildPythonPackage { | |
1256 |
name = "psutil-5. |
|
1296 | name = "psutil-5.7.0"; | |
1257 | doCheck = false; |
|
1297 | doCheck = false; | |
1258 | src = fetchurl { |
|
1298 | src = fetchurl { | |
1259 |
url = "https://files.pythonhosted.org/packages/ |
|
1299 | url = "https://files.pythonhosted.org/packages/c4/b8/3512f0e93e0db23a71d82485ba256071ebef99b227351f0f5540f744af41/psutil-5.7.0.tar.gz"; | |
1260 | sha256 = "0isil5jxwwd8awz54qk28rpgjg43i5l6yl70g40vxwa4r4m56lfh"; |
|
1300 | sha256 = "03jykdi3dgf1cdal9bv4fq9zjvzj9l9bs99gi5ar81sdl5nc2pk8"; | |
1261 | }; |
|
1301 | }; | |
1262 | meta = { |
|
1302 | meta = { | |
1263 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
1303 | license = [ pkgs.lib.licenses.bsdOriginal ]; | |
@@ -1348,11 +1388,11 b' self: super: {' | |||||
1348 | }; |
|
1388 | }; | |
1349 | }; |
|
1389 | }; | |
1350 | "pycparser" = super.buildPythonPackage { |
|
1390 | "pycparser" = super.buildPythonPackage { | |
1351 |
name = "pycparser-2. |
|
1391 | name = "pycparser-2.20"; | |
1352 | doCheck = false; |
|
1392 | doCheck = false; | |
1353 | src = fetchurl { |
|
1393 | src = fetchurl { | |
1354 |
url = "https://files.pythonhosted.org/packages/6 |
|
1394 | url = "https://files.pythonhosted.org/packages/0f/86/e19659527668d70be91d0369aeaa055b4eb396b0f387a4f92293a20035bd/pycparser-2.20.tar.gz"; | |
1355 | sha256 = "1cr5dcj9628lkz1qlwq3fv97c25363qppkmcayqvd05dpy573259"; |
|
1395 | sha256 = "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"; | |
1356 | }; |
|
1396 | }; | |
1357 | meta = { |
|
1397 | meta = { | |
1358 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
1398 | license = [ pkgs.lib.licenses.bsdOriginal ]; | |
@@ -1414,11 +1454,11 b' self: super: {' | |||||
1414 | }; |
|
1454 | }; | |
1415 | }; |
|
1455 | }; | |
1416 | "pyparsing" = super.buildPythonPackage { |
|
1456 | "pyparsing" = super.buildPythonPackage { | |
1417 |
name = "pyparsing-2.4. |
|
1457 | name = "pyparsing-2.4.7"; | |
1418 | doCheck = false; |
|
1458 | doCheck = false; | |
1419 | src = fetchurl { |
|
1459 | src = fetchurl { | |
1420 |
url = "https://files.pythonhosted.org/packages/ |
|
1460 | url = "https://files.pythonhosted.org/packages/c1/47/dfc9c342c9842bbe0036c7f763d2d6686bcf5eb1808ba3e170afdb282210/pyparsing-2.4.7.tar.gz"; | |
1421 | sha256 = "0fk8gsybiw1gm146mkjdjvaajwh20xwvpv4j7syh2zrnpq0j19jc"; |
|
1461 | sha256 = "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"; | |
1422 | }; |
|
1462 | }; | |
1423 | meta = { |
|
1463 | meta = { | |
1424 | license = [ pkgs.lib.licenses.mit ]; |
|
1464 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -1448,7 +1488,7 b' self: super: {' | |||||
1448 | }; |
|
1488 | }; | |
1449 | }; |
|
1489 | }; | |
1450 | "pyramid-debugtoolbar" = super.buildPythonPackage { |
|
1490 | "pyramid-debugtoolbar" = super.buildPythonPackage { | |
1451 |
name = "pyramid-debugtoolbar-4. |
|
1491 | name = "pyramid-debugtoolbar-4.6.1"; | |
1452 | doCheck = false; |
|
1492 | doCheck = false; | |
1453 | propagatedBuildInputs = [ |
|
1493 | propagatedBuildInputs = [ | |
1454 | self."pyramid" |
|
1494 | self."pyramid" | |
@@ -1458,8 +1498,8 b' self: super: {' | |||||
1458 | self."ipaddress" |
|
1498 | self."ipaddress" | |
1459 | ]; |
|
1499 | ]; | |
1460 | src = fetchurl { |
|
1500 | src = fetchurl { | |
1461 |
url = "https://files.pythonhosted.org/packages/88 |
|
1501 | url = "https://files.pythonhosted.org/packages/99/f6/b8603f82c18275be293921bc3a2184205056ca505747bf64ab8a0c08e124/pyramid_debugtoolbar-4.6.1.tar.gz"; | |
1462 | sha256 = "0hgf6i1fzvq43m9vjdmb24nnv8fwp7sdzrx9bcwrgpy24n07am9a"; |
|
1502 | sha256 = "185z7q8n959ga5331iczwra2iljwkidfx4qn6bbd7vm3rm4w6llv"; | |
1463 | }; |
|
1503 | }; | |
1464 | meta = { |
|
1504 | meta = { | |
1465 | license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ]; |
|
1505 | license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ]; | |
@@ -1646,15 +1686,15 b' self: super: {' | |||||
1646 | }; |
|
1686 | }; | |
1647 | }; |
|
1687 | }; | |
1648 | "python-ldap" = super.buildPythonPackage { |
|
1688 | "python-ldap" = super.buildPythonPackage { | |
1649 |
name = "python-ldap-3. |
|
1689 | name = "python-ldap-3.2.0"; | |
1650 | doCheck = false; |
|
1690 | doCheck = false; | |
1651 | propagatedBuildInputs = [ |
|
1691 | propagatedBuildInputs = [ | |
1652 | self."pyasn1" |
|
1692 | self."pyasn1" | |
1653 | self."pyasn1-modules" |
|
1693 | self."pyasn1-modules" | |
1654 | ]; |
|
1694 | ]; | |
1655 | src = fetchurl { |
|
1695 | src = fetchurl { | |
1656 | url = "https://files.pythonhosted.org/packages/7f/1c/28d721dff2fcd2fef9d55b40df63a00be26ec8a11e8c6fc612ae642f9cfd/python-ldap-3.1.0.tar.gz"; |
|
1696 | url = "https://files.pythonhosted.org/packages/ea/93/596f875e003c770447f4b99267820a0c769dd2dc3ae3ed19afe460fcbad0/python-ldap-3.2.0.tar.gz"; | |
1657 | sha256 = "1i97nwfnraylyn0myxlf3vciicrf5h6fymrcff9c00k581wmx5s1"; |
|
1697 | sha256 = "13nvrhp85yr0jyxixcjj012iw8l9wynxxlykm9j3alss6waln73x"; | |
1658 | }; |
|
1698 | }; | |
1659 | meta = { |
|
1699 | meta = { | |
1660 | license = [ pkgs.lib.licenses.psfl ]; |
|
1700 | license = [ pkgs.lib.licenses.psfl ]; | |
@@ -1702,11 +1742,11 b' self: super: {' | |||||
1702 | }; |
|
1742 | }; | |
1703 | }; |
|
1743 | }; | |
1704 | "pytz" = super.buildPythonPackage { |
|
1744 | "pytz" = super.buildPythonPackage { | |
1705 |
name = "pytz-2019. |
|
1745 | name = "pytz-2019.3"; | |
1706 | doCheck = false; |
|
1746 | doCheck = false; | |
1707 | src = fetchurl { |
|
1747 | src = fetchurl { | |
1708 |
url = "https://files.pythonhosted.org/packages/2 |
|
1748 | url = "https://files.pythonhosted.org/packages/82/c3/534ddba230bd4fbbd3b7a3d35f3341d014cca213f369a9940925e7e5f691/pytz-2019.3.tar.gz"; | |
1709 | sha256 = "0ckb27hhjc8i8gcdvk4d9avld62b7k52yjijc60s2m3y8cpb7h16"; |
|
1749 | sha256 = "1ghrk1wg45d3nymj7bf4zj03n3bh64xmczhk4pfi577hdkdhcb5h"; | |
1710 | }; |
|
1750 | }; | |
1711 | meta = { |
|
1751 | meta = { | |
1712 | license = [ pkgs.lib.licenses.mit ]; |
|
1752 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -1724,11 +1764,11 b' self: super: {' | |||||
1724 | }; |
|
1764 | }; | |
1725 | }; |
|
1765 | }; | |
1726 | "redis" = super.buildPythonPackage { |
|
1766 | "redis" = super.buildPythonPackage { | |
1727 |
name = "redis-3. |
|
1767 | name = "redis-3.4.1"; | |
1728 | doCheck = false; |
|
1768 | doCheck = false; | |
1729 | src = fetchurl { |
|
1769 | src = fetchurl { | |
1730 | url = "https://files.pythonhosted.org/packages/06/ca/00557c74279d2f256d3c42cabf237631355f3a132e4c74c2000e6647ad98/redis-3.3.11.tar.gz"; |
|
1770 | url = "https://files.pythonhosted.org/packages/ef/2e/2c0f59891db7db087a7eeaa79bc7c7f2c039e71a2b5b0a41391e9d462926/redis-3.4.1.tar.gz"; | |
1731 | sha256 = "1hicqbi5xl92hhml82awrr2rxl9jar5fp8nbcycj9qgmsdwc43wd"; |
|
1771 | sha256 = "07yaj0j9fs7xdkg5bg926fa990khyigjbp31si8ai20vj8sv7kqd"; | |
1732 | }; |
|
1772 | }; | |
1733 | meta = { |
|
1773 | meta = { | |
1734 | license = [ pkgs.lib.licenses.mit ]; |
|
1774 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -1779,7 +1819,7 b' self: super: {' | |||||
1779 | }; |
|
1819 | }; | |
1780 | }; |
|
1820 | }; | |
1781 | "rhodecode-enterprise-ce" = super.buildPythonPackage { |
|
1821 | "rhodecode-enterprise-ce" = super.buildPythonPackage { | |
1782 |
name = "rhodecode-enterprise-ce-4.1 |
|
1822 | name = "rhodecode-enterprise-ce-4.19.0"; | |
1783 | buildInputs = [ |
|
1823 | buildInputs = [ | |
1784 | self."pytest" |
|
1824 | self."pytest" | |
1785 | self."py" |
|
1825 | self."py" | |
@@ -1833,6 +1873,7 b' self: super: {' | |||||
1833 | self."pastedeploy" |
|
1873 | self."pastedeploy" | |
1834 | self."pastescript" |
|
1874 | self."pastescript" | |
1835 | self."peppercorn" |
|
1875 | self."peppercorn" | |
|
1876 | self."premailer" | |||
1836 | self."psutil" |
|
1877 | self."psutil" | |
1837 | self."py-bcrypt" |
|
1878 | self."py-bcrypt" | |
1838 | self."pycurl" |
|
1879 | self."pycurl" | |
@@ -1976,11 +2017,11 b' self: super: {' | |||||
1976 | }; |
|
2017 | }; | |
1977 | }; |
|
2018 | }; | |
1978 | "setuptools" = super.buildPythonPackage { |
|
2019 | "setuptools" = super.buildPythonPackage { | |
1979 |
name = "setuptools-44. |
|
2020 | name = "setuptools-44.1.0"; | |
1980 | doCheck = false; |
|
2021 | doCheck = false; | |
1981 | src = fetchurl { |
|
2022 | src = fetchurl { | |
1982 |
url = "https://files.pythonhosted.org/packages/b |
|
2023 | url = "https://files.pythonhosted.org/packages/ed/7b/bbf89ca71e722b7f9464ebffe4b5ee20a9e5c9a555a56e2d3914bb9119a6/setuptools-44.1.0.zip"; | |
1983 | sha256 = "025h5cnxcmda1893l6i12hrwdvs1n8r31qs6q4pkif2v7rrggfp5"; |
|
2024 | sha256 = "1jja896zvd1ppccnjbhkgagxbwchgq6vfamp6qn1hvywq6q9cjkr"; | |
1984 | }; |
|
2025 | }; | |
1985 | meta = { |
|
2026 | meta = { | |
1986 | license = [ pkgs.lib.licenses.mit ]; |
|
2027 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -2020,11 +2061,11 b' self: super: {' | |||||
2020 | }; |
|
2061 | }; | |
2021 | }; |
|
2062 | }; | |
2022 | "sqlalchemy" = super.buildPythonPackage { |
|
2063 | "sqlalchemy" = super.buildPythonPackage { | |
2023 |
name = "sqlalchemy-1.3.1 |
|
2064 | name = "sqlalchemy-1.3.15"; | |
2024 | doCheck = false; |
|
2065 | doCheck = false; | |
2025 | src = fetchurl { |
|
2066 | src = fetchurl { | |
2026 |
url = "https://files.pythonhosted.org/packages/34 |
|
2067 | url = "https://files.pythonhosted.org/packages/8c/30/4134e726dd5ed13728ff814fa91fc01c447ad8700504653fe99d91fdd34b/SQLAlchemy-1.3.15.tar.gz"; | |
2027 | sha256 = "12izpqqgy738ndn7qqn962qxi8qw2xb9vg2i880x12paklg599dg"; |
|
2068 | sha256 = "0iglkvymfp35zm5pxy5kzqvcv96kkas0chqdx7xpla86sspa9k64"; | |
2028 | }; |
|
2069 | }; | |
2029 | meta = { |
|
2070 | meta = { | |
2030 | license = [ pkgs.lib.licenses.mit ]; |
|
2071 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -2212,11 +2253,11 b' self: super: {' | |||||
2212 | }; |
|
2253 | }; | |
2213 | }; |
|
2254 | }; | |
2214 | "wcwidth" = super.buildPythonPackage { |
|
2255 | "wcwidth" = super.buildPythonPackage { | |
2215 |
name = "wcwidth-0.1. |
|
2256 | name = "wcwidth-0.1.9"; | |
2216 | doCheck = false; |
|
2257 | doCheck = false; | |
2217 | src = fetchurl { |
|
2258 | src = fetchurl { | |
2218 |
url = "https://files.pythonhosted.org/packages/ |
|
2259 | url = "https://files.pythonhosted.org/packages/25/9d/0acbed6e4a4be4fc99148f275488580968f44ddb5e69b8ceb53fc9df55a0/wcwidth-0.1.9.tar.gz"; | |
2219 | sha256 = "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx"; |
|
2260 | sha256 = "1wf5ycjx8s066rdvr0fgz4xds9a8zhs91c4jzxvvymm1c8l8cwzf"; | |
2220 | }; |
|
2261 | }; | |
2221 | meta = { |
|
2262 | meta = { | |
2222 | license = [ pkgs.lib.licenses.mit ]; |
|
2263 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -2234,7 +2275,7 b' self: super: {' | |||||
2234 | }; |
|
2275 | }; | |
2235 | }; |
|
2276 | }; | |
2236 | "weberror" = super.buildPythonPackage { |
|
2277 | "weberror" = super.buildPythonPackage { | |
2237 |
name = "weberror-0.1 |
|
2278 | name = "weberror-0.13.1"; | |
2238 | doCheck = false; |
|
2279 | doCheck = false; | |
2239 | propagatedBuildInputs = [ |
|
2280 | propagatedBuildInputs = [ | |
2240 | self."webob" |
|
2281 | self."webob" | |
@@ -2243,8 +2284,8 b' self: super: {' | |||||
2243 | self."paste" |
|
2284 | self."paste" | |
2244 | ]; |
|
2285 | ]; | |
2245 | src = fetchurl { |
|
2286 | src = fetchurl { | |
2246 |
url = "https://files.pythonhosted.org/packages/ |
|
2287 | url = "https://files.pythonhosted.org/packages/07/0a/09ca5eb0fab5c0d17b380026babe81c96ecebb13f2b06c3203432dd7be72/WebError-0.13.1.tar.gz"; | |
2247 | sha256 = "0frg4kvycqpj5bi8asfqfs6bxsr2cvjvb6b56c4d1ai1z57kbjx6"; |
|
2288 | sha256 = "0r4qvnf2r92gfnpa1kwygh4j2x6j3axg2i4an6hyxwg2gpaqp7y1"; | |
2248 | }; |
|
2289 | }; | |
2249 | meta = { |
|
2290 | meta = { | |
2250 | license = [ pkgs.lib.licenses.mit ]; |
|
2291 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -2277,7 +2318,7 b' self: super: {' | |||||
2277 | }; |
|
2318 | }; | |
2278 | }; |
|
2319 | }; | |
2279 | "webtest" = super.buildPythonPackage { |
|
2320 | "webtest" = super.buildPythonPackage { | |
2280 |
name = "webtest-2.0.3 |
|
2321 | name = "webtest-2.0.34"; | |
2281 | doCheck = false; |
|
2322 | doCheck = false; | |
2282 | propagatedBuildInputs = [ |
|
2323 | propagatedBuildInputs = [ | |
2283 | self."six" |
|
2324 | self."six" | |
@@ -2286,8 +2327,8 b' self: super: {' | |||||
2286 | self."beautifulsoup4" |
|
2327 | self."beautifulsoup4" | |
2287 | ]; |
|
2328 | ]; | |
2288 | src = fetchurl { |
|
2329 | src = fetchurl { | |
2289 |
url = "https://files.pythonhosted.org/packages/a8 |
|
2330 | url = "https://files.pythonhosted.org/packages/2c/74/a0e63feee438735d628631e2b70d82280276a930637ac535479e5fad9427/WebTest-2.0.34.tar.gz"; | |
2290 | sha256 = "1l3z0cwqslsf4rcrhi2gr8kdfh74wn2dw76376i4g9i38gz8wd21"; |
|
2331 | sha256 = "0x1y2c8z4fmpsny4hbp6ka37si2g10r5r2jwxhvv5mx7g3blq4bi"; | |
2291 | }; |
|
2332 | }; | |
2292 | meta = { |
|
2333 | meta = { | |
2293 | license = [ pkgs.lib.licenses.mit ]; |
|
2334 | license = [ pkgs.lib.licenses.mit ]; | |
@@ -2327,14 +2368,14 b' self: super: {' | |||||
2327 | }; |
|
2368 | }; | |
2328 | }; |
|
2369 | }; | |
2329 | "zipp" = super.buildPythonPackage { |
|
2370 | "zipp" = super.buildPythonPackage { | |
2330 |
name = "zipp- |
|
2371 | name = "zipp-1.2.0"; | |
2331 | doCheck = false; |
|
2372 | doCheck = false; | |
2332 | propagatedBuildInputs = [ |
|
2373 | propagatedBuildInputs = [ | |
2333 |
self." |
|
2374 | self."contextlib2" | |
2334 | ]; |
|
2375 | ]; | |
2335 | src = fetchurl { |
|
2376 | src = fetchurl { | |
2336 | url = "https://files.pythonhosted.org/packages/57/dd/585d728479d97d25aeeb9aa470d36a4ad8d0ba5610f84e14770128ce6ff7/zipp-0.6.0.tar.gz"; |
|
2377 | url = "https://files.pythonhosted.org/packages/78/08/d52f0ea643bc1068d6dc98b412f4966a9b63255d20911a23ac3220c033c4/zipp-1.2.0.tar.gz"; | |
2337 | sha256 = "13ndkf7vklw978a4gdl1yfvn8hch28429a0iam67sg4nrp5v261p"; |
|
2378 | sha256 = "1c91lnv1bxjimh8as27hz7bghsjkkbxn1d37xq7in9c82iai0167"; | |
2338 | }; |
|
2379 | }; | |
2339 | meta = { |
|
2380 | meta = { | |
2340 | license = [ pkgs.lib.licenses.mit ]; |
|
2381 | license = [ pkgs.lib.licenses.mit ]; |
@@ -3,7 +3,7 b'' | |||||
3 | amqp==2.5.2 |
|
3 | amqp==2.5.2 | |
4 | babel==1.3 |
|
4 | babel==1.3 | |
5 | beaker==1.9.1 |
|
5 | beaker==1.9.1 | |
6 |
bleach==3.1. |
|
6 | bleach==3.1.3 | |
7 | celery==4.3.0 |
|
7 | celery==4.3.0 | |
8 | channelstream==0.5.2 |
|
8 | channelstream==0.5.2 | |
9 | click==7.0 |
|
9 | click==7.0 | |
@@ -14,7 +14,7 b' cssselect==1.0.3' | |||||
14 | cryptography==2.6.1 |
|
14 | cryptography==2.6.1 | |
15 | decorator==4.1.2 |
|
15 | decorator==4.1.2 | |
16 | deform==2.0.8 |
|
16 | deform==2.0.8 | |
17 |
docutils==0.1 |
|
17 | docutils==0.16.0 | |
18 | dogpile.cache==0.9.0 |
|
18 | dogpile.cache==0.9.0 | |
19 | dogpile.core==0.4.1 |
|
19 | dogpile.core==0.4.1 | |
20 | formencode==1.2.4 |
|
20 | formencode==1.2.4 | |
@@ -30,38 +30,39 b' markdown==2.6.11' | |||||
30 | markupsafe==1.1.1 |
|
30 | markupsafe==1.1.1 | |
31 | msgpack-python==0.5.6 |
|
31 | msgpack-python==0.5.6 | |
32 | pyotp==2.3.0 |
|
32 | pyotp==2.3.0 | |
33 |
packaging== |
|
33 | packaging==20.3 | |
34 | pathlib2==2.3.5 |
|
34 | pathlib2==2.3.5 | |
35 |
paste==3. |
|
35 | paste==3.4.0 | |
36 |
pastedeploy==2. |
|
36 | pastedeploy==2.1.0 | |
37 | pastescript==3.2.0 |
|
37 | pastescript==3.2.0 | |
38 | peppercorn==0.6 |
|
38 | peppercorn==0.6 | |
39 | psutil==5.6.5 |
|
39 | premailer==3.6.1 | |
|
40 | psutil==5.7.0 | |||
40 | py-bcrypt==0.4 |
|
41 | py-bcrypt==0.4 | |
41 | pycurl==7.43.0.3 |
|
42 | pycurl==7.43.0.3 | |
42 | pycrypto==2.6.1 |
|
43 | pycrypto==2.6.1 | |
43 | pygments==2.4.2 |
|
44 | pygments==2.4.2 | |
44 |
pyparsing==2.4. |
|
45 | pyparsing==2.4.7 | |
45 |
pyramid-debugtoolbar==4. |
|
46 | pyramid-debugtoolbar==4.6.1 | |
46 | pyramid-mako==1.1.0 |
|
47 | pyramid-mako==1.1.0 | |
47 | pyramid==1.10.4 |
|
48 | pyramid==1.10.4 | |
48 | pyramid_mailer==0.15.1 |
|
49 | pyramid_mailer==0.15.1 | |
49 | python-dateutil==2.8.1 |
|
50 | python-dateutil==2.8.1 | |
50 |
python-ldap==3. |
|
51 | python-ldap==3.2.0 | |
51 | python-memcached==1.59 |
|
52 | python-memcached==1.59 | |
52 | python-pam==1.8.4 |
|
53 | python-pam==1.8.4 | |
53 | python-saml==2.4.2 |
|
54 | python-saml==2.4.2 | |
54 |
pytz==2019. |
|
55 | pytz==2019.3 | |
55 | tzlocal==1.5.1 |
|
56 | tzlocal==1.5.1 | |
56 | pyzmq==14.6.0 |
|
57 | pyzmq==14.6.0 | |
57 | py-gfm==0.1.4 |
|
58 | py-gfm==0.1.4 | |
58 |
redis==3. |
|
59 | redis==3.4.1 | |
59 | repoze.lru==0.7 |
|
60 | repoze.lru==0.7 | |
60 | requests==2.22.0 |
|
61 | requests==2.22.0 | |
61 | routes==2.4.1 |
|
62 | routes==2.4.1 | |
62 | simplejson==3.16.0 |
|
63 | simplejson==3.16.0 | |
63 | six==1.11.0 |
|
64 | six==1.11.0 | |
64 |
sqlalchemy==1.3.1 |
|
65 | sqlalchemy==1.3.15 | |
65 | sshpubkeys==3.1.0 |
|
66 | sshpubkeys==3.1.0 | |
66 | subprocess32==3.5.4 |
|
67 | subprocess32==3.5.4 | |
67 | supervisor==4.1.0 |
|
68 | supervisor==4.1.0 | |
@@ -69,7 +70,7 b' translationstring==1.3' | |||||
69 | urllib3==1.25.2 |
|
70 | urllib3==1.25.2 | |
70 | urlobject==2.4.3 |
|
71 | urlobject==2.4.3 | |
71 | venusian==1.2.0 |
|
72 | venusian==1.2.0 | |
72 |
weberror==0.1 |
|
73 | weberror==0.13.1 | |
73 | webhelpers2==2.0 |
|
74 | webhelpers2==2.0 | |
74 | webob==1.8.5 |
|
75 | webob==1.8.5 | |
75 | whoosh==2.7.4 |
|
76 | whoosh==2.7.4 | |
@@ -94,18 +95,18 b' jupyter-client==5.0.0' | |||||
94 | jupyter-core==4.5.0 |
|
95 | jupyter-core==4.5.0 | |
95 |
|
96 | |||
96 | ## cli tools |
|
97 | ## cli tools | |
97 |
alembic==1. |
|
98 | alembic==1.4.2 | |
98 | invoke==0.13.0 |
|
99 | invoke==0.13.0 | |
99 | bumpversion==0.5.3 |
|
100 | bumpversion==0.5.3 | |
100 |
|
101 | |||
101 | ## http servers |
|
102 | ## http servers | |
102 |
gevent==1. |
|
103 | gevent==1.5.0 | |
103 | greenlet==0.4.15 |
|
104 | greenlet==0.4.15 | |
104 | gunicorn==19.9.0 |
|
105 | gunicorn==19.9.0 | |
105 | waitress==1.3.1 |
|
106 | waitress==1.3.1 | |
106 |
|
107 | |||
107 | ## debug |
|
108 | ## debug | |
108 |
ipdb==0.1 |
|
109 | ipdb==0.13.2 | |
109 | ipython==5.1.0 |
|
110 | ipython==5.1.0 | |
110 |
|
111 | |||
111 | ## rhodecode-tools, special case, use file://PATH.tar.gz#egg=rhodecode-tools==X.Y.Z, to test local version |
|
112 | ## rhodecode-tools, special case, use file://PATH.tar.gz#egg=rhodecode-tools==X.Y.Z, to test local version |
@@ -10,9 +10,9 b' configparser==4.0.2' | |||||
10 | contextlib2==0.6.0.post1 |
|
10 | contextlib2==0.6.0.post1 | |
11 | ecdsa==0.13.2 |
|
11 | ecdsa==0.13.2 | |
12 | gnureadline==6.3.8 |
|
12 | gnureadline==6.3.8 | |
13 |
hupper==1. |
|
13 | hupper==1.10.2 | |
14 | ipaddress==1.0.23 |
|
14 | ipaddress==1.0.23 | |
15 |
importlib-metadata==0 |
|
15 | importlib-metadata==1.6.0 | |
16 | jinja2==2.9.6 |
|
16 | jinja2==2.9.6 | |
17 | jsonschema==2.6.0 |
|
17 | jsonschema==2.6.0 | |
18 | pluggy==0.13.1 |
|
18 | pluggy==0.13.1 | |
@@ -24,4 +24,4 b' tempita==0.5.2' | |||||
24 | testpath==0.4.4 |
|
24 | testpath==0.4.4 | |
25 | transaction==2.4.0 |
|
25 | transaction==2.4.0 | |
26 | vine==1.3.0 |
|
26 | vine==1.3.0 | |
27 |
wcwidth==0.1. |
|
27 | wcwidth==0.1.9 |
@@ -12,5 +12,5 b' mock==3.0.5' | |||||
12 | cov-core==1.15.0 |
|
12 | cov-core==1.15.0 | |
13 | coverage==4.5.4 |
|
13 | coverage==4.5.4 | |
14 |
|
14 | |||
15 |
webtest==2.0.3 |
|
15 | webtest==2.0.34 | |
16 | beautifulsoup4==4.6.3 |
|
16 | beautifulsoup4==4.6.3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -19,17 +19,20 b'' | |||||
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |
20 |
|
20 | |||
21 | import os |
|
21 | import os | |
|
22 | from collections import OrderedDict | |||
|
23 | ||||
22 | import sys |
|
24 | import sys | |
23 | import platform |
|
25 | import platform | |
24 |
|
26 | |||
25 | VERSION = tuple(open(os.path.join( |
|
27 | VERSION = tuple(open(os.path.join( | |
26 | os.path.dirname(__file__), 'VERSION')).read().split('.')) |
|
28 | os.path.dirname(__file__), 'VERSION')).read().split('.')) | |
27 |
|
29 | |||
28 |
BACKENDS = |
|
30 | BACKENDS = OrderedDict() | |
29 | 'hg': 'Mercurial repository', |
|
31 | ||
30 | 'git': 'Git repository', |
|
32 | BACKENDS['hg'] = 'Mercurial repository' | |
31 | 'svn': 'Subversion repository', |
|
33 | BACKENDS['git'] = 'Git repository' | |
32 | } |
|
34 | BACKENDS['svn'] = 'Subversion repository' | |
|
35 | ||||
33 |
|
36 | |||
34 | CELERY_ENABLED = False |
|
37 | CELERY_ENABLED = False | |
35 | CELERY_EAGER = False |
|
38 | CELERY_EAGER = False | |
@@ -45,7 +48,7 b' PYRAMID_SETTINGS = {}' | |||||
45 | EXTENSIONS = {} |
|
48 | EXTENSIONS = {} | |
46 |
|
49 | |||
47 | __version__ = ('.'.join((str(each) for each in VERSION[:3]))) |
|
50 | __version__ = ('.'.join((str(each) for each in VERSION[:3]))) | |
48 |
__dbversion__ = 10 |
|
51 | __dbversion__ = 107 # defines current db version for migrations | |
49 | __platform__ = platform.system() |
|
52 | __platform__ = platform.system() | |
50 | __license__ = 'AGPLv3, and Commercial License' |
|
53 | __license__ = 'AGPLv3, and Commercial License' | |
51 | __author__ = 'RhodeCode GmbH' |
|
54 | __author__ = 'RhodeCode GmbH' |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -60,7 +60,10 b' class TestGetPullRequestComments(object)' | |||||
60 | 'comment_text': 'Auto status change to |new_status|\n\n.. |new_status| replace:: *"Under Review"*', |
|
60 | 'comment_text': 'Auto status change to |new_status|\n\n.. |new_status| replace:: *"Under Review"*', | |
61 | 'comment_type': 'note', |
|
61 | 'comment_type': 'note', | |
62 | 'comment_resolved_by': None, |
|
62 | 'comment_resolved_by': None, | |
63 |
'pull_request_version': None |
|
63 | 'pull_request_version': None, | |
|
64 | 'comment_commit_id': None, | |||
|
65 | 'comment_pull_request_id': pull_request.pull_request_id | |||
|
66 | } | |||
64 | ] |
|
67 | ] | |
65 | assert_ok(id_, expected, response.body) |
|
68 | assert_ok(id_, expected, response.body) | |
66 |
|
69 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -49,7 +49,8 b' def assert_call_ok(id_, given):' | |||||
49 | def assert_ok(id_, expected, given): |
|
49 | def assert_ok(id_, expected, given): | |
50 | given = json.loads(given) |
|
50 | given = json.loads(given) | |
51 | if given.get('error'): |
|
51 | if given.get('error'): | |
52 | pytest.fail("Unexpected ERROR in success response: {}".format(given['error'])) |
|
52 | err = given['error'] | |
|
53 | pytest.fail(u"Unexpected ERROR in success response: {}".format(err)) | |||
53 |
|
54 | |||
54 | expected = jsonify({ |
|
55 | expected = jsonify({ | |
55 | 'id': id_, |
|
56 | 'id': id_, |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2014-20 |
|
3 | # Copyright (C) 2014-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2015-20 |
|
3 | # Copyright (C) 2015-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -379,7 +379,9 b' def get_pull_request_comments(' | |||||
379 | }, |
|
379 | }, | |
380 | "comment_text": "Example text", |
|
380 | "comment_text": "Example text", | |
381 | "comment_type": null, |
|
381 | "comment_type": null, | |
382 | "pull_request_version": null |
|
382 | "pull_request_version": null, | |
|
383 | "comment_commit_id": None, | |||
|
384 | "comment_pull_request_id": <pull_request_id> | |||
383 | } |
|
385 | } | |
384 | ], |
|
386 | ], | |
385 | error : null |
|
387 | error : null | |
@@ -684,28 +686,9 b' def create_pull_request(' | |||||
684 | full_source_ref = resolve_ref_or_error(source_ref, source_db_repo) |
|
686 | full_source_ref = resolve_ref_or_error(source_ref, source_db_repo) | |
685 | full_target_ref = resolve_ref_or_error(target_ref, target_db_repo) |
|
687 | full_target_ref = resolve_ref_or_error(target_ref, target_db_repo) | |
686 |
|
688 | |||
687 | source_scm = source_db_repo.scm_instance() |
|
|||
688 | target_scm = target_db_repo.scm_instance() |
|
|||
689 |
|
||||
690 | source_commit = get_commit_or_error(full_source_ref, source_db_repo) |
|
689 | source_commit = get_commit_or_error(full_source_ref, source_db_repo) | |
691 | target_commit = get_commit_or_error(full_target_ref, target_db_repo) |
|
690 | target_commit = get_commit_or_error(full_target_ref, target_db_repo) | |
692 |
|
691 | |||
693 | ancestor = source_scm.get_common_ancestor( |
|
|||
694 | source_commit.raw_id, target_commit.raw_id, target_scm) |
|
|||
695 | if not ancestor: |
|
|||
696 | raise JSONRPCError('no common ancestor found') |
|
|||
697 |
|
||||
698 | # recalculate target ref based on ancestor |
|
|||
699 | target_ref_type, target_ref_name, __ = full_target_ref.split(':') |
|
|||
700 | full_target_ref = ':'.join((target_ref_type, target_ref_name, ancestor)) |
|
|||
701 |
|
||||
702 | commit_ranges = target_scm.compare( |
|
|||
703 | target_commit.raw_id, source_commit.raw_id, source_scm, |
|
|||
704 | merge=True, pre_load=[]) |
|
|||
705 |
|
||||
706 | if not commit_ranges: |
|
|||
707 | raise JSONRPCError('no commits found') |
|
|||
708 |
|
||||
709 | reviewer_objects = Optional.extract(reviewers) or [] |
|
692 | reviewer_objects = Optional.extract(reviewers) or [] | |
710 |
|
693 | |||
711 | # serialize and validate passed in given reviewers |
|
694 | # serialize and validate passed in given reviewers | |
@@ -725,16 +708,16 b' def create_pull_request(' | |||||
725 | PullRequestModel().get_reviewer_functions() |
|
708 | PullRequestModel().get_reviewer_functions() | |
726 |
|
709 | |||
727 | # recalculate reviewers logic, to make sure we can validate this |
|
710 | # recalculate reviewers logic, to make sure we can validate this | |
728 |
reviewer |
|
711 | default_reviewers_data = get_default_reviewers_data( | |
729 | owner, source_db_repo, |
|
712 | owner, source_db_repo, | |
730 | source_commit, target_db_repo, target_commit) |
|
713 | source_commit, target_db_repo, target_commit) | |
731 |
|
714 | |||
732 | # now MERGE our given with the calculated |
|
715 | # now MERGE our given with the calculated | |
733 |
reviewer_objects = reviewer |
|
716 | reviewer_objects = default_reviewers_data['reviewers'] + reviewer_objects | |
734 |
|
717 | |||
735 | try: |
|
718 | try: | |
736 | reviewers = validate_default_reviewers( |
|
719 | reviewers = validate_default_reviewers( | |
737 |
reviewer_objects, reviewer |
|
720 | reviewer_objects, default_reviewers_data) | |
738 | except ValueError as e: |
|
721 | except ValueError as e: | |
739 | raise JSONRPCError('Reviewers Validation: {}'.format(e)) |
|
722 | raise JSONRPCError('Reviewers Validation: {}'.format(e)) | |
740 |
|
723 | |||
@@ -746,6 +729,24 b' def create_pull_request(' | |||||
746 | source_ref=title_source_ref, |
|
729 | source_ref=title_source_ref, | |
747 | target=target_repo |
|
730 | target=target_repo | |
748 | ) |
|
731 | ) | |
|
732 | ||||
|
733 | diff_info = default_reviewers_data['diff_info'] | |||
|
734 | common_ancestor_id = diff_info['ancestor'] | |||
|
735 | commits = diff_info['commits'] | |||
|
736 | ||||
|
737 | if not common_ancestor_id: | |||
|
738 | raise JSONRPCError('no common ancestor found') | |||
|
739 | ||||
|
740 | if not commits: | |||
|
741 | raise JSONRPCError('no commits found') | |||
|
742 | ||||
|
743 | # NOTE(marcink): reversed is consistent with how we open it in the WEB interface | |||
|
744 | revisions = [commit.raw_id for commit in reversed(commits)] | |||
|
745 | ||||
|
746 | # recalculate target ref based on ancestor | |||
|
747 | target_ref_type, target_ref_name, __ = full_target_ref.split(':') | |||
|
748 | full_target_ref = ':'.join((target_ref_type, target_ref_name, common_ancestor_id)) | |||
|
749 | ||||
749 | # fetch renderer, if set fallback to plain in case of PR |
|
750 | # fetch renderer, if set fallback to plain in case of PR | |
750 | rc_config = SettingsModel().get_all_settings() |
|
751 | rc_config = SettingsModel().get_all_settings() | |
751 | default_system_renderer = rc_config.get('rhodecode_markup_renderer', 'plain') |
|
752 | default_system_renderer = rc_config.get('rhodecode_markup_renderer', 'plain') | |
@@ -758,12 +759,13 b' def create_pull_request(' | |||||
758 | source_ref=full_source_ref, |
|
759 | source_ref=full_source_ref, | |
759 | target_repo=target_repo, |
|
760 | target_repo=target_repo, | |
760 | target_ref=full_target_ref, |
|
761 | target_ref=full_target_ref, | |
761 | revisions=[commit.raw_id for commit in reversed(commit_ranges)], |
|
762 | common_ancestor_id=common_ancestor_id, | |
|
763 | revisions=revisions, | |||
762 | reviewers=reviewers, |
|
764 | reviewers=reviewers, | |
763 | title=title, |
|
765 | title=title, | |
764 | description=description, |
|
766 | description=description, | |
765 | description_renderer=description_renderer, |
|
767 | description_renderer=description_renderer, | |
766 |
reviewer_data=reviewer |
|
768 | reviewer_data=default_reviewers_data, | |
767 | auth_user=apiuser |
|
769 | auth_user=apiuser | |
768 | ) |
|
770 | ) | |
769 |
|
771 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -33,7 +33,7 b' from rhodecode.lib import audit_logger, ' | |||||
33 | from rhodecode.lib import repo_maintenance |
|
33 | from rhodecode.lib import repo_maintenance | |
34 | from rhodecode.lib.auth import HasPermissionAnyApi, HasUserGroupPermissionAnyApi |
|
34 | from rhodecode.lib.auth import HasPermissionAnyApi, HasUserGroupPermissionAnyApi | |
35 | from rhodecode.lib.celerylib.utils import get_task_id |
|
35 | from rhodecode.lib.celerylib.utils import get_task_id | |
36 | from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_str, safe_int |
|
36 | from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_str, safe_int, safe_unicode | |
37 | from rhodecode.lib.ext_json import json |
|
37 | from rhodecode.lib.ext_json import json | |
38 | from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError |
|
38 | from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError | |
39 | from rhodecode.lib.vcs import RepositoryError |
|
39 | from rhodecode.lib.vcs import RepositoryError | |
@@ -573,6 +573,7 b' def get_repo_file(request, apiuser, repo' | |||||
573 | elif details == 'full': |
|
573 | elif details == 'full': | |
574 | extended_info = content = True |
|
574 | extended_info = content = True | |
575 |
|
575 | |||
|
576 | file_path = safe_unicode(file_path) | |||
576 | try: |
|
577 | try: | |
577 | # check if repo is not empty by any chance, skip quicker if it is. |
|
578 | # check if repo is not empty by any chance, skip quicker if it is. | |
578 | _scm = repo.scm_instance() |
|
579 | _scm = repo.scm_instance() | |
@@ -583,12 +584,12 b' def get_repo_file(request, apiuser, repo' | |||||
583 | repo, commit_id, file_path, extended_info=extended_info, |
|
584 | repo, commit_id, file_path, extended_info=extended_info, | |
584 | content=content, max_file_bytes=max_file_bytes, cache=cache) |
|
585 | content=content, max_file_bytes=max_file_bytes, cache=cache) | |
585 | except NodeDoesNotExistError: |
|
586 | except NodeDoesNotExistError: | |
586 | raise JSONRPCError('There is no file in repo: `{}` at path `{}` for commit: `{}`'.format( |
|
587 | raise JSONRPCError(u'There is no file in repo: `{}` at path `{}` for commit: `{}`'.format( | |
587 | repo.repo_name, file_path, commit_id)) |
|
588 | repo.repo_name, file_path, commit_id)) | |
588 | except Exception: |
|
589 | except Exception: | |
589 | log.exception("Exception occurred while trying to get repo %s file", |
|
590 | log.exception(u"Exception occurred while trying to get repo %s file", | |
590 | repo.repo_name) |
|
591 | repo.repo_name) | |
591 | raise JSONRPCError('failed to get repo: `{}` file at path {}'.format( |
|
592 | raise JSONRPCError(u'failed to get repo: `{}` file at path {}'.format( | |
592 | repo.repo_name, file_path)) |
|
593 | repo.repo_name, file_path)) | |
593 |
|
594 | |||
594 | return node |
|
595 | return node | |
@@ -1599,7 +1600,8 b' def comment_commit(' | |||||
1599 | validate_repo_permissions(apiuser, repoid, repo, _perms) |
|
1600 | validate_repo_permissions(apiuser, repoid, repo, _perms) | |
1600 |
|
1601 | |||
1601 | try: |
|
1602 | try: | |
1602 |
commit |
|
1603 | commit = repo.scm_instance().get_commit(commit_id=commit_id) | |
|
1604 | commit_id = commit.raw_id | |||
1603 | except Exception as e: |
|
1605 | except Exception as e: | |
1604 | log.exception('Failed to fetch commit') |
|
1606 | log.exception('Failed to fetch commit') | |
1605 | raise JSONRPCError(safe_str(e)) |
|
1607 | raise JSONRPCError(safe_str(e)) | |
@@ -1655,10 +1657,14 b' def comment_commit(' | |||||
1655 | except StatusChangeOnClosedPullRequestError: |
|
1657 | except StatusChangeOnClosedPullRequestError: | |
1656 | log.exception( |
|
1658 | log.exception( | |
1657 | "Exception occurred while trying to change repo commit status") |
|
1659 | "Exception occurred while trying to change repo commit status") | |
1658 |
msg = ('Changing status on a c |
|
1660 | msg = ('Changing status on a commit associated with ' | |
1659 | 'a closed pull request is not allowed') |
|
1661 | 'a closed pull request is not allowed') | |
1660 | raise JSONRPCError(msg) |
|
1662 | raise JSONRPCError(msg) | |
1661 |
|
1663 | |||
|
1664 | CommentsModel().trigger_commit_comment_hook( | |||
|
1665 | repo, apiuser, 'create', | |||
|
1666 | data={'comment': comment, 'commit': commit}) | |||
|
1667 | ||||
1662 | Session().commit() |
|
1668 | Session().commit() | |
1663 | return { |
|
1669 | return { | |
1664 | 'msg': ( |
|
1670 | 'msg': ( |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -22,10 +22,12 b'' | |||||
22 | import logging |
|
22 | import logging | |
23 |
|
23 | |||
24 | from rhodecode.api import jsonrpc_method |
|
24 | from rhodecode.api import jsonrpc_method | |
25 | from rhodecode.api.exc import JSONRPCValidationError |
|
25 | from rhodecode.api.exc import JSONRPCValidationError, JSONRPCForbidden | |
26 | from rhodecode.api.utils import Optional |
|
26 | from rhodecode.api.utils import Optional, has_superadmin_permission | |
27 | from rhodecode.lib.index import searcher_from_config |
|
27 | from rhodecode.lib.index import searcher_from_config | |
|
28 | from rhodecode.lib.user_log_filter import user_log_filter | |||
28 | from rhodecode.model import validation_schema |
|
29 | from rhodecode.model import validation_schema | |
|
30 | from rhodecode.model.db import joinedload, UserLog | |||
29 | from rhodecode.model.validation_schema.schemas import search_schema |
|
31 | from rhodecode.model.validation_schema.schemas import search_schema | |
30 |
|
32 | |||
31 | log = logging.getLogger(__name__) |
|
33 | log = logging.getLogger(__name__) | |
@@ -116,3 +118,35 b' def search(request, apiuser, search_quer' | |||||
116 | colander_exc=validation_schema.Invalid(node, search_result['error'])) |
|
118 | colander_exc=validation_schema.Invalid(node, search_result['error'])) | |
117 |
|
119 | |||
118 | return data |
|
120 | return data | |
|
121 | ||||
|
122 | ||||
|
123 | @jsonrpc_method() | |||
|
124 | def get_audit_logs(request, apiuser, query): | |||
|
125 | """ | |||
|
126 | return full audit logs based on the query. | |||
|
127 | ||||
|
128 | Please see `example query in admin > settings > audit logs` for examples | |||
|
129 | ||||
|
130 | :param apiuser: This is filled automatically from the |authtoken|. | |||
|
131 | :type apiuser: AuthUser | |||
|
132 | :param query: filter query, example: action:repo.artifact.add date:[20200401 TO 20200601]" | |||
|
133 | :type query: str | |||
|
134 | """ | |||
|
135 | ||||
|
136 | if not has_superadmin_permission(apiuser): | |||
|
137 | raise JSONRPCForbidden() | |||
|
138 | ||||
|
139 | filter_term = query | |||
|
140 | ret = [] | |||
|
141 | ||||
|
142 | # show all user actions | |||
|
143 | user_log = UserLog.query() \ | |||
|
144 | .options(joinedload(UserLog.user)) \ | |||
|
145 | .options(joinedload(UserLog.repository)) \ | |||
|
146 | .order_by(UserLog.action_date.desc()) | |||
|
147 | ||||
|
148 | audit_log = user_log_filter(user_log, filter_term) | |||
|
149 | ||||
|
150 | for entry in audit_log: | |||
|
151 | ret.append(entry) | |||
|
152 | return ret |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -396,7 +396,11 b' class PathFilter(object):' | |||||
396 | def path_access_allowed(self, path): |
|
396 | def path_access_allowed(self, path): | |
397 | log.debug('Checking ACL permissions for PathFilter for `%s`', path) |
|
397 | log.debug('Checking ACL permissions for PathFilter for `%s`', path) | |
398 | if self.permission_checker: |
|
398 | if self.permission_checker: | |
399 |
|
|
399 | has_access = path and self.permission_checker.has_access(path) | |
|
400 | log.debug('ACL Permissions checker enabled, ACL Check has_access: %s', has_access) | |||
|
401 | return has_access | |||
|
402 | ||||
|
403 | log.debug('ACL permissions checker not enabled, skipping...') | |||
400 | return True |
|
404 | return True | |
401 |
|
405 | |||
402 | def filter_patchset(self, patchset): |
|
406 | def filter_patchset(self, patchset): |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -25,6 +25,15 b' from rhodecode.lib import rc_cache' | |||||
25 |
|
25 | |||
26 | log = logging.getLogger(__name__) |
|
26 | log = logging.getLogger(__name__) | |
27 |
|
27 | |||
|
28 | # names of namespaces used for different permission related cached | |||
|
29 | # during flush operation we need to take care of all those | |||
|
30 | cache_namespaces = [ | |||
|
31 | 'cache_user_auth.{}', | |||
|
32 | 'cache_user_repo_acl_ids.{}', | |||
|
33 | 'cache_user_user_group_acl_ids.{}', | |||
|
34 | 'cache_user_repo_group_acl_ids.{}' | |||
|
35 | ] | |||
|
36 | ||||
28 |
|
37 | |||
29 | def trigger_user_permission_flush(event): |
|
38 | def trigger_user_permission_flush(event): | |
30 | """ |
|
39 | """ | |
@@ -35,9 +44,11 b' def trigger_user_permission_flush(event)' | |||||
35 |
|
44 | |||
36 | affected_user_ids = set(event.user_ids) |
|
45 | affected_user_ids = set(event.user_ids) | |
37 | for user_id in affected_user_ids: |
|
46 | for user_id in affected_user_ids: | |
38 |
|
|
47 | for cache_namespace_uid_tmpl in cache_namespaces: | |
39 | del_keys = rc_cache.clear_cache_namespace('cache_perms', cache_namespace_uid) |
|
48 | cache_namespace_uid = cache_namespace_uid_tmpl.format(user_id) | |
40 | log.debug('Deleted %s cache keys for user_id: %s', del_keys, user_id) |
|
49 | del_keys = rc_cache.clear_cache_namespace('cache_perms', cache_namespace_uid) | |
|
50 | log.debug('Deleted %s cache keys for user_id: %s and namespace %s', | |||
|
51 | del_keys, user_id, cache_namespace_uid) | |||
41 |
|
52 | |||
42 |
|
53 | |||
43 | def includeme(config): |
|
54 | def includeme(config): |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -26,7 +26,6 b' def admin_routes(config):' | |||||
26 | """ |
|
26 | """ | |
27 | Admin prefixed routes |
|
27 | Admin prefixed routes | |
28 | """ |
|
28 | """ | |
29 |
|
||||
30 | config.add_route( |
|
29 | config.add_route( | |
31 | name='admin_audit_logs', |
|
30 | name='admin_audit_logs', | |
32 | pattern='/audit_logs') |
|
31 | pattern='/audit_logs') | |
@@ -291,12 +290,22 b' def admin_routes(config):' | |||||
291 | pattern='/users/{user_id:\d+}/create_repo_group', |
|
290 | pattern='/users/{user_id:\d+}/create_repo_group', | |
292 | user_route=True) |
|
291 | user_route=True) | |
293 |
|
292 | |||
|
293 | # user notice | |||
|
294 | config.add_route( | |||
|
295 | name='user_notice_dismiss', | |||
|
296 | pattern='/users/{user_id:\d+}/notice_dismiss', | |||
|
297 | user_route=True) | |||
|
298 | ||||
294 | # user auth tokens |
|
299 | # user auth tokens | |
295 | config.add_route( |
|
300 | config.add_route( | |
296 | name='edit_user_auth_tokens', |
|
301 | name='edit_user_auth_tokens', | |
297 | pattern='/users/{user_id:\d+}/edit/auth_tokens', |
|
302 | pattern='/users/{user_id:\d+}/edit/auth_tokens', | |
298 | user_route=True) |
|
303 | user_route=True) | |
299 | config.add_route( |
|
304 | config.add_route( | |
|
305 | name='edit_user_auth_tokens_view', | |||
|
306 | pattern='/users/{user_id:\d+}/edit/auth_tokens/view', | |||
|
307 | user_route=True) | |||
|
308 | config.add_route( | |||
300 | name='edit_user_auth_tokens_add', |
|
309 | name='edit_user_auth_tokens_add', | |
301 | pattern='/users/{user_id:\d+}/edit/auth_tokens/new', |
|
310 | pattern='/users/{user_id:\d+}/edit/auth_tokens/new', | |
302 | user_route=True) |
|
311 | user_route=True) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -228,7 +228,7 b' class TestAdminPermissionsController(Tes' | |||||
228 | self.log_user() |
|
228 | self.log_user() | |
229 |
|
229 | |||
230 | # ADD |
|
230 | # ADD | |
231 |
default_user_id = User.get_default_user() |
|
231 | default_user_id = User.get_default_user_id() | |
232 | self.app.post( |
|
232 | self.app.post( | |
233 | route_path('edit_user_ips_add', user_id=default_user_id), |
|
233 | route_path('edit_user_ips_add', user_id=default_user_id), | |
234 | params={'new_ip': '0.0.0.0/24', 'csrf_token': self.csrf_token}) |
|
234 | params={'new_ip': '0.0.0.0/24', 'csrf_token': self.csrf_token}) | |
@@ -238,7 +238,7 b' class TestAdminPermissionsController(Tes' | |||||
238 | response.mustcontain('0.0.0.0 - 0.0.0.255') |
|
238 | response.mustcontain('0.0.0.0 - 0.0.0.255') | |
239 |
|
239 | |||
240 | # DELETE |
|
240 | # DELETE | |
241 |
default_user_id = User.get_default_user() |
|
241 | default_user_id = User.get_default_user_id() | |
242 | del_ip_id = UserIpMap.query().filter(UserIpMap.user_id == |
|
242 | del_ip_id = UserIpMap.query().filter(UserIpMap.user_id == | |
243 | default_user_id).first().ip_id |
|
243 | default_user_id).first().ip_id | |
244 |
|
244 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -84,15 +84,13 b' class TestAdminRepos(object):' | |||||
84 | with mock.patch('rhodecode.BACKENDS', {'git': 'git'}): |
|
84 | with mock.patch('rhodecode.BACKENDS', {'git': 'git'}): | |
85 | response = self.app.get(route_path('repo_new'), status=200) |
|
85 | response = self.app.get(route_path('repo_new'), status=200) | |
86 | assert_response = response.assert_response() |
|
86 | assert_response = response.assert_response() | |
87 |
element = assert_response.get_element(' |
|
87 | element = assert_response.get_element('[name=repo_type]') | |
88 |
assert element. |
|
88 | assert element.get('value') == 'git' | |
89 |
|
89 | |||
90 | def test_create_page_non_restricted_backends(self, autologin_user, backend): |
|
90 | def test_create_page_non_restricted_backends(self, autologin_user, backend): | |
91 | response = self.app.get(route_path('repo_new'), status=200) |
|
91 | response = self.app.get(route_path('repo_new'), status=200) | |
92 | assert_response = response.assert_response() |
|
92 | assert_response = response.assert_response() | |
93 | assert_response.element_contains('#repo_type', 'git') |
|
93 | assert ['hg', 'git', 'svn'] == [x.get('value') for x in assert_response.get_elements('[name=repo_type]')] | |
94 | assert_response.element_contains('#repo_type', 'svn') |
|
|||
95 | assert_response.element_contains('#repo_type', 'hg') |
|
|||
96 |
|
94 | |||
97 | @pytest.mark.parametrize( |
|
95 | @pytest.mark.parametrize( | |
98 | "suffix", [u'', u'xxa'], ids=['', 'non-ascii']) |
|
96 | "suffix", [u'', u'xxa'], ids=['', 'non-ascii']) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -143,7 +143,7 b' class TestAdminUsersView(TestController)' | |||||
143 | response = self.app.get( |
|
143 | response = self.app.get( | |
144 | route_path('edit_user_auth_tokens', user_id=user_id)) |
|
144 | route_path('edit_user_auth_tokens', user_id=user_id)) | |
145 | for token in auth_tokens: |
|
145 | for token in auth_tokens: | |
146 | response.mustcontain(token) |
|
146 | response.mustcontain(token[:4]) | |
147 | response.mustcontain('never') |
|
147 | response.mustcontain('never') | |
148 |
|
148 | |||
149 | @pytest.mark.parametrize("desc, lifetime", [ |
|
149 | @pytest.mark.parametrize("desc, lifetime", [ | |
@@ -165,7 +165,7 b' class TestAdminUsersView(TestController)' | |||||
165 | response = response.follow() |
|
165 | response = response.follow() | |
166 | user = User.get(user_id) |
|
166 | user = User.get(user_id) | |
167 | for auth_token in user.auth_tokens: |
|
167 | for auth_token in user.auth_tokens: | |
168 | response.mustcontain(auth_token) |
|
168 | response.mustcontain(auth_token[:4]) | |
169 |
|
169 | |||
170 | def test_delete_auth_token(self, user_util): |
|
170 | def test_delete_auth_token(self, user_util): | |
171 | self.log_user() |
|
171 | self.log_user() |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2018-20 |
|
3 | # Copyright (C) 2018-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -142,7 +142,7 b' class AdminPermissionsView(BaseAppView, ' | |||||
142 | h.flash(_('Error occurred during update of permissions'), |
|
142 | h.flash(_('Error occurred during update of permissions'), | |
143 | category='error') |
|
143 | category='error') | |
144 |
|
144 | |||
145 |
affected_user_ids = [User.get_default_user() |
|
145 | affected_user_ids = [User.get_default_user_id()] | |
146 | PermissionModel().trigger_permission_flush(affected_user_ids) |
|
146 | PermissionModel().trigger_permission_flush(affected_user_ids) | |
147 |
|
147 | |||
148 | raise HTTPFound(h.route_path('admin_permissions_application')) |
|
148 | raise HTTPFound(h.route_path('admin_permissions_application')) | |
@@ -218,7 +218,7 b' class AdminPermissionsView(BaseAppView, ' | |||||
218 | h.flash(_('Error occurred during update of permissions'), |
|
218 | h.flash(_('Error occurred during update of permissions'), | |
219 | category='error') |
|
219 | category='error') | |
220 |
|
220 | |||
221 |
affected_user_ids = [User.get_default_user() |
|
221 | affected_user_ids = [User.get_default_user_id()] | |
222 | PermissionModel().trigger_permission_flush(affected_user_ids) |
|
222 | PermissionModel().trigger_permission_flush(affected_user_ids) | |
223 |
|
223 | |||
224 | raise HTTPFound(h.route_path('admin_permissions_object')) |
|
224 | raise HTTPFound(h.route_path('admin_permissions_object')) | |
@@ -320,7 +320,7 b' class AdminPermissionsView(BaseAppView, ' | |||||
320 | h.flash(_('Error occurred during update of permissions'), |
|
320 | h.flash(_('Error occurred during update of permissions'), | |
321 | category='error') |
|
321 | category='error') | |
322 |
|
322 | |||
323 |
affected_user_ids = [User.get_default_user() |
|
323 | affected_user_ids = [User.get_default_user_id()] | |
324 | PermissionModel().trigger_permission_flush(affected_user_ids) |
|
324 | PermissionModel().trigger_permission_flush(affected_user_ids) | |
325 |
|
325 | |||
326 | raise HTTPFound(h.route_path('admin_permissions_global')) |
|
326 | raise HTTPFound(h.route_path('admin_permissions_global')) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -41,9 +41,9 b' class SvnConfigAdminSettingsView(BaseApp' | |||||
41 | def vcs_svn_generate_config(self): |
|
41 | def vcs_svn_generate_config(self): | |
42 | _ = self.request.translate |
|
42 | _ = self.request.translate | |
43 | try: |
|
43 | try: | |
44 | generate_mod_dav_svn_config(self.request.registry) |
|
44 | file_path = generate_mod_dav_svn_config(self.request.registry) | |
45 | msg = { |
|
45 | msg = { | |
46 | 'message': _('Apache configuration for Subversion generated.'), |
|
46 | 'message': _('Apache configuration for Subversion generated at `{}`.').format(file_path), | |
47 | 'level': 'success', |
|
47 | 'level': 'success', | |
48 | } |
|
48 | } | |
49 | except Exception: |
|
49 | except Exception: |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -34,12 +34,13 b' from rhodecode.apps.ssh_support import S' | |||||
34 | from rhodecode.authentication.base import get_authn_registry, RhodeCodeExternalAuthPlugin |
|
34 | from rhodecode.authentication.base import get_authn_registry, RhodeCodeExternalAuthPlugin | |
35 | from rhodecode.authentication.plugins import auth_rhodecode |
|
35 | from rhodecode.authentication.plugins import auth_rhodecode | |
36 | from rhodecode.events import trigger |
|
36 | from rhodecode.events import trigger | |
37 | from rhodecode.model.db import true |
|
37 | from rhodecode.model.db import true, UserNotice | |
38 |
|
38 | |||
39 | from rhodecode.lib import audit_logger, rc_cache |
|
39 | from rhodecode.lib import audit_logger, rc_cache | |
40 | from rhodecode.lib.exceptions import ( |
|
40 | from rhodecode.lib.exceptions import ( | |
41 | UserCreationError, UserOwnsReposException, UserOwnsRepoGroupsException, |
|
41 | UserCreationError, UserOwnsReposException, UserOwnsRepoGroupsException, | |
42 |
UserOwnsUserGroupsException, |
|
42 | UserOwnsUserGroupsException, UserOwnsPullRequestsException, | |
|
43 | UserOwnsArtifactsException, DefaultUserException) | |||
43 | from rhodecode.lib.ext_json import json |
|
44 | from rhodecode.lib.ext_json import json | |
44 | from rhodecode.lib.auth import ( |
|
45 | from rhodecode.lib.auth import ( | |
45 | LoginRequired, HasPermissionAllDecorator, CSRFRequired) |
|
46 | LoginRequired, HasPermissionAllDecorator, CSRFRequired) | |
@@ -377,11 +378,13 b' class UsersView(UserAppView):' | |||||
377 | _repos = c.user.repositories |
|
378 | _repos = c.user.repositories | |
378 | _repo_groups = c.user.repository_groups |
|
379 | _repo_groups = c.user.repository_groups | |
379 | _user_groups = c.user.user_groups |
|
380 | _user_groups = c.user.user_groups | |
|
381 | _pull_requests = c.user.user_pull_requests | |||
380 | _artifacts = c.user.artifacts |
|
382 | _artifacts = c.user.artifacts | |
381 |
|
383 | |||
382 | handle_repos = None |
|
384 | handle_repos = None | |
383 | handle_repo_groups = None |
|
385 | handle_repo_groups = None | |
384 | handle_user_groups = None |
|
386 | handle_user_groups = None | |
|
387 | handle_pull_requests = None | |||
385 | handle_artifacts = None |
|
388 | handle_artifacts = None | |
386 |
|
389 | |||
387 | # calls for flash of handle based on handle case detach or delete |
|
390 | # calls for flash of handle based on handle case detach or delete | |
@@ -412,6 +415,15 b' class UsersView(UserAppView):' | |||||
412 | h.flash(_('Deleted %s user groups') % len(_user_groups), |
|
415 | h.flash(_('Deleted %s user groups') % len(_user_groups), | |
413 | category='success') |
|
416 | category='success') | |
414 |
|
417 | |||
|
418 | def set_handle_flash_pull_requests(): | |||
|
419 | handle = handle_pull_requests | |||
|
420 | if handle == 'detach': | |||
|
421 | h.flash(_('Detached %s pull requests') % len(_pull_requests), | |||
|
422 | category='success') | |||
|
423 | elif handle == 'delete': | |||
|
424 | h.flash(_('Deleted %s pull requests') % len(_pull_requests), | |||
|
425 | category='success') | |||
|
426 | ||||
415 | def set_handle_flash_artifacts(): |
|
427 | def set_handle_flash_artifacts(): | |
416 | handle = handle_artifacts |
|
428 | handle = handle_artifacts | |
417 | if handle == 'detach': |
|
429 | if handle == 'detach': | |
@@ -421,6 +433,12 b' class UsersView(UserAppView):' | |||||
421 | h.flash(_('Deleted %s artifacts') % len(_artifacts), |
|
433 | h.flash(_('Deleted %s artifacts') % len(_artifacts), | |
422 | category='success') |
|
434 | category='success') | |
423 |
|
435 | |||
|
436 | handle_user = User.get_first_super_admin() | |||
|
437 | handle_user_id = safe_int(self.request.POST.get('detach_user_id')) | |||
|
438 | if handle_user_id: | |||
|
439 | # NOTE(marcink): we get new owner for objects... | |||
|
440 | handle_user = User.get_or_404(handle_user_id) | |||
|
441 | ||||
424 | if _repos and self.request.POST.get('user_repos'): |
|
442 | if _repos and self.request.POST.get('user_repos'): | |
425 | handle_repos = self.request.POST['user_repos'] |
|
443 | handle_repos = self.request.POST['user_repos'] | |
426 |
|
444 | |||
@@ -430,16 +448,25 b' class UsersView(UserAppView):' | |||||
430 | if _user_groups and self.request.POST.get('user_user_groups'): |
|
448 | if _user_groups and self.request.POST.get('user_user_groups'): | |
431 | handle_user_groups = self.request.POST['user_user_groups'] |
|
449 | handle_user_groups = self.request.POST['user_user_groups'] | |
432 |
|
450 | |||
|
451 | if _pull_requests and self.request.POST.get('user_pull_requests'): | |||
|
452 | handle_pull_requests = self.request.POST['user_pull_requests'] | |||
|
453 | ||||
433 | if _artifacts and self.request.POST.get('user_artifacts'): |
|
454 | if _artifacts and self.request.POST.get('user_artifacts'): | |
434 | handle_artifacts = self.request.POST['user_artifacts'] |
|
455 | handle_artifacts = self.request.POST['user_artifacts'] | |
435 |
|
456 | |||
436 | old_values = c.user.get_api_data() |
|
457 | old_values = c.user.get_api_data() | |
437 |
|
458 | |||
438 | try: |
|
459 | try: | |
439 | UserModel().delete(c.user, handle_repos=handle_repos, |
|
460 | ||
440 | handle_repo_groups=handle_repo_groups, |
|
461 | UserModel().delete( | |
441 | handle_user_groups=handle_user_groups, |
|
462 | c.user, | |
442 |
|
|
463 | handle_repos=handle_repos, | |
|
464 | handle_repo_groups=handle_repo_groups, | |||
|
465 | handle_user_groups=handle_user_groups, | |||
|
466 | handle_pull_requests=handle_pull_requests, | |||
|
467 | handle_artifacts=handle_artifacts, | |||
|
468 | handle_new_owner=handle_user | |||
|
469 | ) | |||
443 |
|
470 | |||
444 | audit_logger.store_web( |
|
471 | audit_logger.store_web( | |
445 | 'user.delete', action_data={'old_data': old_values}, |
|
472 | 'user.delete', action_data={'old_data': old_values}, | |
@@ -449,11 +476,13 b' class UsersView(UserAppView):' | |||||
449 | set_handle_flash_repos() |
|
476 | set_handle_flash_repos() | |
450 | set_handle_flash_repo_groups() |
|
477 | set_handle_flash_repo_groups() | |
451 | set_handle_flash_user_groups() |
|
478 | set_handle_flash_user_groups() | |
|
479 | set_handle_flash_pull_requests() | |||
452 | set_handle_flash_artifacts() |
|
480 | set_handle_flash_artifacts() | |
453 | username = h.escape(old_values['username']) |
|
481 | username = h.escape(old_values['username']) | |
454 | h.flash(_('Successfully deleted user `{}`').format(username), category='success') |
|
482 | h.flash(_('Successfully deleted user `{}`').format(username), category='success') | |
455 | except (UserOwnsReposException, UserOwnsRepoGroupsException, |
|
483 | except (UserOwnsReposException, UserOwnsRepoGroupsException, | |
456 |
UserOwnsUserGroupsException, |
|
484 | UserOwnsUserGroupsException, UserOwnsPullRequestsException, | |
|
485 | UserOwnsArtifactsException, DefaultUserException) as e: | |||
457 | h.flash(e, category='warning') |
|
486 | h.flash(e, category='warning') | |
458 | except Exception: |
|
487 | except Exception: | |
459 | log.exception("Exception during deletion of user") |
|
488 | log.exception("Exception during deletion of user") | |
@@ -502,6 +531,11 b' class UsersView(UserAppView):' | |||||
502 | user_id = self.db_user_id |
|
531 | user_id = self.db_user_id | |
503 | c.user = self.db_user |
|
532 | c.user = self.db_user | |
504 |
|
533 | |||
|
534 | c.detach_user = User.get_first_super_admin() | |||
|
535 | detach_user_id = safe_int(self.request.GET.get('detach_user_id')) | |||
|
536 | if detach_user_id: | |||
|
537 | c.detach_user = User.get_or_404(detach_user_id) | |||
|
538 | ||||
505 | c.active = 'advanced' |
|
539 | c.active = 'advanced' | |
506 | c.personal_repo_group = RepoGroup.get_user_personal_repo_group(user_id) |
|
540 | c.personal_repo_group = RepoGroup.get_user_personal_repo_group(user_id) | |
507 | c.personal_repo_group_name = RepoGroupModel()\ |
|
541 | c.personal_repo_group_name = RepoGroupModel()\ | |
@@ -511,7 +545,6 b' class UsersView(UserAppView):' | |||||
511 | (x.user for x in c.user.user_review_rules), |
|
545 | (x.user for x in c.user.user_review_rules), | |
512 | key=lambda u: u.username.lower()) |
|
546 | key=lambda u: u.username.lower()) | |
513 |
|
547 | |||
514 | c.first_admin = User.get_first_super_admin() |
|
|||
515 | defaults = c.user.get_dict() |
|
548 | defaults = c.user.get_dict() | |
516 |
|
549 | |||
517 | # Interim workaround if the user participated on any pull requests as a |
|
550 | # Interim workaround if the user participated on any pull requests as a | |
@@ -705,6 +738,32 b' class UsersView(UserAppView):' | |||||
705 | @HasPermissionAllDecorator('hg.admin') |
|
738 | @HasPermissionAllDecorator('hg.admin') | |
706 | @CSRFRequired() |
|
739 | @CSRFRequired() | |
707 | @view_config( |
|
740 | @view_config( | |
|
741 | route_name='user_notice_dismiss', request_method='POST', | |||
|
742 | renderer='json_ext', xhr=True) | |||
|
743 | def user_notice_dismiss(self): | |||
|
744 | _ = self.request.translate | |||
|
745 | c = self.load_default_context() | |||
|
746 | ||||
|
747 | user_id = self.db_user_id | |||
|
748 | c.user = self.db_user | |||
|
749 | user_notice_id = safe_int(self.request.POST.get('notice_id')) | |||
|
750 | notice = UserNotice().query()\ | |||
|
751 | .filter(UserNotice.user_id == user_id)\ | |||
|
752 | .filter(UserNotice.user_notice_id == user_notice_id)\ | |||
|
753 | .scalar() | |||
|
754 | read = False | |||
|
755 | if notice: | |||
|
756 | notice.notice_read = True | |||
|
757 | Session().add(notice) | |||
|
758 | Session().commit() | |||
|
759 | read = True | |||
|
760 | ||||
|
761 | return {'notice': user_notice_id, 'read': read} | |||
|
762 | ||||
|
763 | @LoginRequired() | |||
|
764 | @HasPermissionAllDecorator('hg.admin') | |||
|
765 | @CSRFRequired() | |||
|
766 | @view_config( | |||
708 | route_name='user_create_personal_repo_group', request_method='POST', |
|
767 | route_name='user_create_personal_repo_group', request_method='POST', | |
709 | renderer='rhodecode:templates/admin/users/user_edit.mako') |
|
768 | renderer='rhodecode:templates/admin/users/user_edit.mako') | |
710 | def user_create_personal_repo_group(self): |
|
769 | def user_create_personal_repo_group(self): | |
@@ -778,6 +837,25 b' class UsersView(UserAppView):' | |||||
778 | c.role_vcs = AuthTokenModel.cls.ROLE_VCS |
|
837 | c.role_vcs = AuthTokenModel.cls.ROLE_VCS | |
779 | return self._get_template_context(c) |
|
838 | return self._get_template_context(c) | |
780 |
|
839 | |||
|
840 | @LoginRequired() | |||
|
841 | @HasPermissionAllDecorator('hg.admin') | |||
|
842 | @view_config( | |||
|
843 | route_name='edit_user_auth_tokens_view', request_method='POST', | |||
|
844 | renderer='json_ext', xhr=True) | |||
|
845 | def auth_tokens_view(self): | |||
|
846 | _ = self.request.translate | |||
|
847 | c = self.load_default_context() | |||
|
848 | c.user = self.db_user | |||
|
849 | ||||
|
850 | auth_token_id = self.request.POST.get('auth_token_id') | |||
|
851 | ||||
|
852 | if auth_token_id: | |||
|
853 | token = UserApiKeys.get_or_404(auth_token_id) | |||
|
854 | ||||
|
855 | return { | |||
|
856 | 'auth_token': token.api_key | |||
|
857 | } | |||
|
858 | ||||
781 | def maybe_attach_token_scope(self, token): |
|
859 | def maybe_attach_token_scope(self, token): | |
782 | # implemented in EE edition |
|
860 | # implemented in EE edition | |
783 | pass |
|
861 | pass |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -88,6 +88,15 b' Check if we should use full-topic or min' | |||||
88 | 'modified': ['b/modified_file.rst'], |
|
88 | 'modified': ['b/modified_file.rst'], | |
89 | 'removed': ['.idea'], |
|
89 | 'removed': ['.idea'], | |
90 | }) |
|
90 | }) | |
|
91 | ||||
|
92 | exc_traceback = { | |||
|
93 | 'exc_utc_date': '2020-03-26T12:54:50.683281', | |||
|
94 | 'exc_id': 139638856342656, | |||
|
95 | 'exc_timestamp': '1585227290.683288', | |||
|
96 | 'version': 'v1', | |||
|
97 | 'exc_message': 'Traceback (most recent call last):\n File "/nix/store/s43k2r9rysfbzmsjdqnxgzvvb7zjhkxb-python2.7-pyramid-1.10.4/lib/python2.7/site-packages/pyramid/tweens.py", line 41, in excview_tween\n response = handler(request)\n File "/nix/store/s43k2r9rysfbzmsjdqnxgzvvb7zjhkxb-python2.7-pyramid-1.10.4/lib/python2.7/site-packages/pyramid/router.py", line 148, in handle_request\n registry, request, context, context_iface, view_name\n File "/nix/store/s43k2r9rysfbzmsjdqnxgzvvb7zjhkxb-python2.7-pyramid-1.10.4/lib/python2.7/site-packages/pyramid/view.py", line 667, in _call_view\n response = view_callable(context, request)\n File "/nix/store/s43k2r9rysfbzmsjdqnxgzvvb7zjhkxb-python2.7-pyramid-1.10.4/lib/python2.7/site-packages/pyramid/config/views.py", line 188, in attr_view\n return view(context, request)\n File "/nix/store/s43k2r9rysfbzmsjdqnxgzvvb7zjhkxb-python2.7-pyramid-1.10.4/lib/python2.7/site-packages/pyramid/config/views.py", line 214, in predicate_wrapper\n return view(context, request)\n File "/nix/store/s43k2r9rysfbzmsjdqnxgzvvb7zjhkxb-python2.7-pyramid-1.10.4/lib/python2.7/site-packages/pyramid/viewderivers.py", line 401, in viewresult_to_response\n result = view(context, request)\n File "/nix/store/s43k2r9rysfbzmsjdqnxgzvvb7zjhkxb-python2.7-pyramid-1.10.4/lib/python2.7/site-packages/pyramid/viewderivers.py", line 132, in _class_view\n response = getattr(inst, attr)()\n File "/mnt/hgfs/marcink/workspace/rhodecode-enterprise-ce/rhodecode/apps/debug_style/views.py", line 355, in render_email\n template_type, **email_kwargs.get(email_id, {}))\n File "/mnt/hgfs/marcink/workspace/rhodecode-enterprise-ce/rhodecode/model/notification.py", line 402, in render_email\n body = email_template.render(None, **_kwargs)\n File "/mnt/hgfs/marcink/workspace/rhodecode-enterprise-ce/rhodecode/lib/partial_renderer.py", line 95, in render\n return self._render_with_exc(tmpl, args, kwargs)\n File "/mnt/hgfs/marcink/workspace/rhodecode-enterprise-ce/rhodecode/lib/partial_renderer.py", line 79, in _render_with_exc\n return render_func.render(*args, **kwargs)\n File "/nix/store/dakh34sxz4yfr435c0cwjz0sd6hnd5g3-python2.7-mako-1.1.0/lib/python2.7/site-packages/mako/template.py", line 476, in render\n return runtime._render(self, self.callable_, args, data)\n File "/nix/store/dakh34sxz4yfr435c0cwjz0sd6hnd5g3-python2.7-mako-1.1.0/lib/python2.7/site-packages/mako/runtime.py", line 883, in _render\n **_kwargs_for_callable(callable_, data)\n File "/nix/store/dakh34sxz4yfr435c0cwjz0sd6hnd5g3-python2.7-mako-1.1.0/lib/python2.7/site-packages/mako/runtime.py", line 920, in _render_context\n _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)\n File "/nix/store/dakh34sxz4yfr435c0cwjz0sd6hnd5g3-python2.7-mako-1.1.0/lib/python2.7/site-packages/mako/runtime.py", line 947, in _exec_template\n callable_(context, *args, **kwargs)\n File "rhodecode_templates_email_templates_base_mako", line 63, in render_body\n File "rhodecode_templates_email_templates_exception_tracker_mako", line 43, in render_body\nAttributeError: \'str\' object has no attribute \'get\'\n', | |||
|
98 | 'exc_type': 'AttributeError' | |||
|
99 | } | |||
91 | email_kwargs = { |
|
100 | email_kwargs = { | |
92 | 'test': {}, |
|
101 | 'test': {}, | |
93 | 'message': { |
|
102 | 'message': { | |
@@ -97,6 +106,13 b' Check if we should use full-topic or min' | |||||
97 | 'user': user, |
|
106 | 'user': user, | |
98 | 'date': datetime.datetime.now(), |
|
107 | 'date': datetime.datetime.now(), | |
99 | }, |
|
108 | }, | |
|
109 | 'exception': { | |||
|
110 | 'email_prefix': '[RHODECODE ERROR]', | |||
|
111 | 'exc_id': exc_traceback['exc_id'], | |||
|
112 | 'exc_url': 'http://server-url/{}'.format(exc_traceback['exc_id']), | |||
|
113 | 'exc_type_name': 'NameError', | |||
|
114 | 'exc_traceback': exc_traceback, | |||
|
115 | }, | |||
100 | 'password_reset': { |
|
116 | 'password_reset': { | |
101 | 'password_reset_url': 'http://example.com/reset-rhodecode-password/token', |
|
117 | 'password_reset_url': 'http://example.com/reset-rhodecode-password/token', | |
102 |
|
118 | |||
@@ -204,7 +220,7 b' def db():' | |||||
204 | 'pr_comment_url': 'http://comment-url', |
|
220 | 'pr_comment_url': 'http://comment-url', | |
205 | 'pr_comment_reply_url': 'http://comment-url#reply', |
|
221 | 'pr_comment_reply_url': 'http://comment-url#reply', | |
206 |
|
222 | |||
207 |
'comment_file': 'rhodecode/model/ |
|
223 | 'comment_file': 'rhodecode/model/get_flow_commits', | |
208 | 'comment_line': 'o1210', |
|
224 | 'comment_line': 'o1210', | |
209 | 'comment_type': 'todo', |
|
225 | 'comment_type': 'todo', | |
210 | 'comment_body': ''' |
|
226 | 'comment_body': ''' |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2013-20 |
|
3 | # Copyright (C) 2013-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -19,7 +19,7 b'' | |||||
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |
20 | # -*- coding: utf-8 -*- |
|
20 | # -*- coding: utf-8 -*- | |
21 |
|
21 | |||
22 |
# Copyright (C) 2016-20 |
|
22 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
23 | # |
|
23 | # | |
24 | # This program is free software: you can redistribute it and/or modify |
|
24 | # This program is free software: you can redistribute it and/or modify | |
25 | # it under the terms of the GNU Affero General Public License, version 3 |
|
25 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -35,8 +35,8 b' from rhodecode.lib.index import searcher' | |||||
35 | from rhodecode.lib.utils2 import safe_unicode, str2bool, safe_int |
|
35 | from rhodecode.lib.utils2 import safe_unicode, str2bool, safe_int | |
36 | from rhodecode.lib.vcs.nodes import FileNode |
|
36 | from rhodecode.lib.vcs.nodes import FileNode | |
37 | from rhodecode.model.db import ( |
|
37 | from rhodecode.model.db import ( | |
38 | func, true, or_, case, in_filter_generator, Session, |
|
38 | func, true, or_, case, cast, in_filter_generator, String, Session, | |
39 | Repository, RepoGroup, User, UserGroup) |
|
39 | Repository, RepoGroup, User, UserGroup, PullRequest) | |
40 | from rhodecode.model.repo import RepoModel |
|
40 | from rhodecode.model.repo import RepoModel | |
41 | from rhodecode.model.repo_group import RepoGroupModel |
|
41 | from rhodecode.model.repo_group import RepoGroupModel | |
42 | from rhodecode.model.user import UserModel |
|
42 | from rhodecode.model.user import UserModel | |
@@ -111,7 +111,7 b' class HomeView(BaseAppView, DataGridAppV' | |||||
111 | org_query = name_contains |
|
111 | org_query = name_contains | |
112 | allowed_ids = self._rhodecode_user.repo_acl_ids( |
|
112 | allowed_ids = self._rhodecode_user.repo_acl_ids( | |
113 | ['repository.read', 'repository.write', 'repository.admin'], |
|
113 | ['repository.read', 'repository.write', 'repository.admin'], | |
114 |
cache= |
|
114 | cache=True, name_filter=name_contains) or [-1] | |
115 |
|
115 | |||
116 | query = Session().query( |
|
116 | query = Session().query( | |
117 | Repository.repo_name, |
|
117 | Repository.repo_name, | |
@@ -162,7 +162,7 b' class HomeView(BaseAppView, DataGridAppV' | |||||
162 | org_query = name_contains |
|
162 | org_query = name_contains | |
163 | allowed_ids = self._rhodecode_user.repo_group_acl_ids( |
|
163 | allowed_ids = self._rhodecode_user.repo_group_acl_ids( | |
164 | ['group.read', 'group.write', 'group.admin'], |
|
164 | ['group.read', 'group.write', 'group.admin'], | |
165 |
cache= |
|
165 | cache=True, name_filter=name_contains) or [-1] | |
166 |
|
166 | |||
167 | query = Session().query( |
|
167 | query = Session().query( | |
168 | RepoGroup.group_id, |
|
168 | RepoGroup.group_id, | |
@@ -282,6 +282,61 b' class HomeView(BaseAppView, DataGridAppV' | |||||
282 | } |
|
282 | } | |
283 | for obj in acl_iter], True |
|
283 | for obj in acl_iter], True | |
284 |
|
284 | |||
|
285 | def _get_pull_request_list(self, name_contains=None, limit=20): | |||
|
286 | org_query = name_contains | |||
|
287 | if not name_contains: | |||
|
288 | return [], False | |||
|
289 | ||||
|
290 | # TODO(marcink): should all logged in users be allowed to search others? | |||
|
291 | allowed_user_search = self._rhodecode_user.username != User.DEFAULT_USER | |||
|
292 | if not allowed_user_search: | |||
|
293 | return [], False | |||
|
294 | ||||
|
295 | name_contains = re.compile('(?:pr:[ ]?)(.+)').findall(name_contains) | |||
|
296 | if len(name_contains) != 1: | |||
|
297 | return [], False | |||
|
298 | ||||
|
299 | name_contains = name_contains[0] | |||
|
300 | ||||
|
301 | allowed_ids = self._rhodecode_user.repo_acl_ids( | |||
|
302 | ['repository.read', 'repository.write', 'repository.admin'], | |||
|
303 | cache=True) or [-1] | |||
|
304 | ||||
|
305 | query = Session().query( | |||
|
306 | PullRequest.pull_request_id, | |||
|
307 | PullRequest.title, | |||
|
308 | ) | |||
|
309 | query = query.join(Repository, Repository.repo_id == PullRequest.target_repo_id) | |||
|
310 | ||||
|
311 | query = query.filter(or_( | |||
|
312 | # generate multiple IN to fix limitation problems | |||
|
313 | *in_filter_generator(Repository.repo_id, allowed_ids) | |||
|
314 | )) | |||
|
315 | ||||
|
316 | query = query.order_by(PullRequest.pull_request_id) | |||
|
317 | ||||
|
318 | if name_contains: | |||
|
319 | ilike_expression = u'%{}%'.format(safe_unicode(name_contains)) | |||
|
320 | query = query.filter(or_( | |||
|
321 | cast(PullRequest.pull_request_id, String).ilike(ilike_expression), | |||
|
322 | PullRequest.title.ilike(ilike_expression), | |||
|
323 | PullRequest.description.ilike(ilike_expression), | |||
|
324 | )) | |||
|
325 | ||||
|
326 | query = query.limit(limit) | |||
|
327 | ||||
|
328 | acl_iter = query | |||
|
329 | ||||
|
330 | return [ | |||
|
331 | { | |||
|
332 | 'id': obj.pull_request_id, | |||
|
333 | 'value': org_query, | |||
|
334 | 'value_display': 'pull request: `!{} - {}`'.format(obj.pull_request_id, obj.title[:50]), | |||
|
335 | 'type': 'pull_request', | |||
|
336 | 'url': h.route_path('pull_requests_global', pull_request_id=obj.pull_request_id) | |||
|
337 | } | |||
|
338 | for obj in acl_iter], True | |||
|
339 | ||||
285 | def _get_hash_commit_list(self, auth_user, searcher, query, repo=None, repo_group=None): |
|
340 | def _get_hash_commit_list(self, auth_user, searcher, query, repo=None, repo_group=None): | |
286 | repo_name = repo_group_name = None |
|
341 | repo_name = repo_group_name = None | |
287 | if repo: |
|
342 | if repo: | |
@@ -624,6 +679,17 b' class HomeView(BaseAppView, DataGridAppV' | |||||
624 | has_specialized_search = True |
|
679 | has_specialized_search = True | |
625 | res.append(no_match('No matching user groups found')) |
|
680 | res.append(no_match('No matching user groups found')) | |
626 |
|
681 | |||
|
682 | # pr: type search | |||
|
683 | if not prefix_match: | |||
|
684 | pull_requests, prefix_match = self._get_pull_request_list(query) | |||
|
685 | if pull_requests: | |||
|
686 | has_specialized_search = True | |||
|
687 | for serialized_pull_request in pull_requests: | |||
|
688 | res.append(serialized_pull_request) | |||
|
689 | elif prefix_match: | |||
|
690 | has_specialized_search = True | |||
|
691 | res.append(no_match('No matching pull requests found')) | |||
|
692 | ||||
627 | # FTS commit: type search |
|
693 | # FTS commit: type search | |
628 | if not prefix_match: |
|
694 | if not prefix_match: | |
629 | commits, prefix_match = self._get_hash_commit_list( |
|
695 | commits, prefix_match = self._get_hash_commit_list( |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2018-20 |
|
3 | # Copyright (C) 2018-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -50,6 +50,9 b' def includeme(config):' | |||||
50 | name='my_account_auth_tokens', |
|
50 | name='my_account_auth_tokens', | |
51 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens') |
|
51 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens') | |
52 | config.add_route( |
|
52 | config.add_route( | |
|
53 | name='my_account_auth_tokens_view', | |||
|
54 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens/view') | |||
|
55 | config.add_route( | |||
53 | name='my_account_auth_tokens_add', |
|
56 | name='my_account_auth_tokens_add', | |
54 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens/new') |
|
57 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens/new') | |
55 | config.add_route( |
|
58 | config.add_route( |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -49,7 +49,7 b' class TestMyAccountAuthTokens(TestContro' | |||||
49 | user = User.get(usr['user_id']) |
|
49 | user = User.get(usr['user_id']) | |
50 | response = self.app.get(route_path('my_account_auth_tokens')) |
|
50 | response = self.app.get(route_path('my_account_auth_tokens')) | |
51 | for token in user.auth_tokens: |
|
51 | for token in user.auth_tokens: | |
52 | response.mustcontain(token) |
|
52 | response.mustcontain(token[:4]) | |
53 | response.mustcontain('never') |
|
53 | response.mustcontain('never') | |
54 |
|
54 | |||
55 | def test_my_account_add_auth_tokens_wrong_csrf(self, user_util): |
|
55 | def test_my_account_add_auth_tokens_wrong_csrf(self, user_util): | |
@@ -79,7 +79,7 b' class TestMyAccountAuthTokens(TestContro' | |||||
79 | response = response.follow() |
|
79 | response = response.follow() | |
80 | user = User.get(user_id) |
|
80 | user = User.get(user_id) | |
81 | for auth_token in user.auth_tokens: |
|
81 | for auth_token in user.auth_tokens: | |
82 | response.mustcontain(auth_token) |
|
82 | response.mustcontain(auth_token[:4]) | |
83 |
|
83 | |||
84 | def test_my_account_delete_auth_token(self, user_util): |
|
84 | def test_my_account_delete_auth_token(self, user_util): | |
85 | user = user_util.create_user(password='qweqwe') |
|
85 | user = user_util.create_user(password='qweqwe') |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -19,7 +19,7 b'' | |||||
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |
20 | # -*- coding: utf-8 -*- |
|
20 | # -*- coding: utf-8 -*- | |
21 |
|
21 | |||
22 |
# Copyright (C) 2016-20 |
|
22 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
23 | # |
|
23 | # | |
24 | # This program is free software: you can redistribute it and/or modify |
|
24 | # This program is free software: you can redistribute it and/or modify | |
25 | # it under the terms of the GNU Affero General Public License, version 3 |
|
25 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -25,7 +25,7 b' import string' | |||||
25 | import formencode |
|
25 | import formencode | |
26 | import formencode.htmlfill |
|
26 | import formencode.htmlfill | |
27 | import peppercorn |
|
27 | import peppercorn | |
28 | from pyramid.httpexceptions import HTTPFound |
|
28 | from pyramid.httpexceptions import HTTPFound, HTTPNotFound | |
29 | from pyramid.view import view_config |
|
29 | from pyramid.view import view_config | |
30 |
|
30 | |||
31 | from rhodecode.apps._base import BaseAppView, DataGridAppView |
|
31 | from rhodecode.apps._base import BaseAppView, DataGridAppView | |
@@ -164,6 +164,27 b' class MyAccountView(BaseAppView, DataGri' | |||||
164 | c.role_vcs = AuthTokenModel.cls.ROLE_VCS |
|
164 | c.role_vcs = AuthTokenModel.cls.ROLE_VCS | |
165 | return self._get_template_context(c) |
|
165 | return self._get_template_context(c) | |
166 |
|
166 | |||
|
167 | @LoginRequired() | |||
|
168 | @NotAnonymous() | |||
|
169 | @CSRFRequired() | |||
|
170 | @view_config( | |||
|
171 | route_name='my_account_auth_tokens_view', request_method='POST', xhr=True, | |||
|
172 | renderer='json_ext') | |||
|
173 | def my_account_auth_tokens_view(self): | |||
|
174 | _ = self.request.translate | |||
|
175 | c = self.load_default_context() | |||
|
176 | ||||
|
177 | auth_token_id = self.request.POST.get('auth_token_id') | |||
|
178 | ||||
|
179 | if auth_token_id: | |||
|
180 | token = UserApiKeys.get_or_404(auth_token_id) | |||
|
181 | if token.user.user_id != c.user.user_id: | |||
|
182 | raise HTTPNotFound() | |||
|
183 | ||||
|
184 | return { | |||
|
185 | 'auth_token': token.api_key | |||
|
186 | } | |||
|
187 | ||||
167 | def maybe_attach_token_scope(self, token): |
|
188 | def maybe_attach_token_scope(self, token): | |
168 | # implemented in EE edition |
|
189 | # implemented in EE edition | |
169 | pass |
|
190 | pass | |
@@ -702,12 +723,12 b' class MyAccountView(BaseAppView, DataGri' | |||||
702 |
|
723 | |||
703 | pull_requests = PullRequestModel().get_im_participating_in( |
|
724 | pull_requests = PullRequestModel().get_im_participating_in( | |
704 | user_id=self._rhodecode_user.user_id, |
|
725 | user_id=self._rhodecode_user.user_id, | |
705 | statuses=statuses, |
|
726 | statuses=statuses, query=search_q, | |
706 | offset=start, length=limit, order_by=order_by, |
|
727 | offset=start, length=limit, order_by=order_by, | |
707 | order_dir=order_dir) |
|
728 | order_dir=order_dir) | |
708 |
|
729 | |||
709 | pull_requests_total_count = PullRequestModel().count_im_participating_in( |
|
730 | pull_requests_total_count = PullRequestModel().count_im_participating_in( | |
710 | user_id=self._rhodecode_user.user_id, statuses=statuses) |
|
731 | user_id=self._rhodecode_user.user_id, statuses=statuses, query=search_q) | |
711 |
|
732 | |||
712 | data = [] |
|
733 | data = [] | |
713 | comments_model = CommentsModel() |
|
734 | comments_model = CommentsModel() |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -156,6 +156,10 b' def includeme(config):' | |||||
156 | pattern='/{repo_name:.*?[^/]}/authors/{commit_id}/{f_path:.*}', repo_route=True) |
|
156 | pattern='/{repo_name:.*?[^/]}/authors/{commit_id}/{f_path:.*}', repo_route=True) | |
157 |
|
157 | |||
158 | config.add_route( |
|
158 | config.add_route( | |
|
159 | name='repo_files_check_head', | |||
|
160 | pattern='/{repo_name:.*?[^/]}/check_head/{commit_id}/{f_path:.*}', | |||
|
161 | repo_route=True) | |||
|
162 | config.add_route( | |||
159 | name='repo_files_remove_file', |
|
163 | name='repo_files_remove_file', | |
160 | pattern='/{repo_name:.*?[^/]}/remove_file/{commit_id}/{f_path:.*}', |
|
164 | pattern='/{repo_name:.*?[^/]}/remove_file/{commit_id}/{f_path:.*}', | |
161 | repo_route=True) |
|
165 | repo_route=True) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -22,8 +22,7 b' import pytest' | |||||
22 |
|
22 | |||
23 | from rhodecode.tests import TestController |
|
23 | from rhodecode.tests import TestController | |
24 |
|
24 | |||
25 |
from rhodecode.model.db import |
|
25 | from rhodecode.model.db import ChangesetComment, Notification | |
26 | ChangesetComment, Notification, UserNotification) |
|
|||
27 | from rhodecode.model.meta import Session |
|
26 | from rhodecode.model.meta import Session | |
28 | from rhodecode.lib import helpers as h |
|
27 | from rhodecode.lib import helpers as h | |
29 |
|
28 | |||
@@ -269,7 +268,36 b' class TestRepoCommitCommentsView(TestCon' | |||||
269 | repo_name=backend.repo_name, commit_id=commit_id)) |
|
268 | repo_name=backend.repo_name, commit_id=commit_id)) | |
270 | assert_comment_links(response, 0, 0) |
|
269 | assert_comment_links(response, 0, 0) | |
271 |
|
270 | |||
272 | @pytest.mark.parametrize('renderer, input, output', [ |
|
271 | def test_delete_forbidden_for_immutable_comments(self, backend): | |
|
272 | self.log_user() | |||
|
273 | commit_id = backend.repo.get_commit('300').raw_id | |||
|
274 | text = u'CommentOnCommit' | |||
|
275 | ||||
|
276 | params = {'text': text, 'csrf_token': self.csrf_token} | |||
|
277 | self.app.post( | |||
|
278 | route_path( | |||
|
279 | 'repo_commit_comment_create', | |||
|
280 | repo_name=backend.repo_name, commit_id=commit_id), | |||
|
281 | params=params) | |||
|
282 | ||||
|
283 | comments = ChangesetComment.query().all() | |||
|
284 | assert len(comments) == 1 | |||
|
285 | comment_id = comments[0].comment_id | |||
|
286 | ||||
|
287 | comment = ChangesetComment.get(comment_id) | |||
|
288 | comment.immutable_state = ChangesetComment.OP_IMMUTABLE | |||
|
289 | Session().add(comment) | |||
|
290 | Session().commit() | |||
|
291 | ||||
|
292 | self.app.post( | |||
|
293 | route_path('repo_commit_comment_delete', | |||
|
294 | repo_name=backend.repo_name, | |||
|
295 | commit_id=commit_id, | |||
|
296 | comment_id=comment_id), | |||
|
297 | params={'csrf_token': self.csrf_token}, | |||
|
298 | status=403) | |||
|
299 | ||||
|
300 | @pytest.mark.parametrize('renderer, text_input, output', [ | |||
273 | ('rst', 'plain text', '<p>plain text</p>'), |
|
301 | ('rst', 'plain text', '<p>plain text</p>'), | |
274 | ('rst', 'header\n======', '<h1 class="title">header</h1>'), |
|
302 | ('rst', 'header\n======', '<h1 class="title">header</h1>'), | |
275 | ('rst', '*italics*', '<em>italics</em>'), |
|
303 | ('rst', '*italics*', '<em>italics</em>'), | |
@@ -280,11 +308,11 b' class TestRepoCommitCommentsView(TestCon' | |||||
280 | ('markdown', '**bold**', '<strong>bold</strong>'), |
|
308 | ('markdown', '**bold**', '<strong>bold</strong>'), | |
281 | ], ids=['rst-plain', 'rst-header', 'rst-italics', 'rst-bold', 'md-plain', |
|
309 | ], ids=['rst-plain', 'rst-header', 'rst-italics', 'rst-bold', 'md-plain', | |
282 | 'md-header', 'md-italics', 'md-bold', ]) |
|
310 | 'md-header', 'md-italics', 'md-bold', ]) | |
283 | def test_preview(self, renderer, input, output, backend, xhr_header): |
|
311 | def test_preview(self, renderer, text_input, output, backend, xhr_header): | |
284 | self.log_user() |
|
312 | self.log_user() | |
285 | params = { |
|
313 | params = { | |
286 | 'renderer': renderer, |
|
314 | 'renderer': renderer, | |
287 | 'text': input, |
|
315 | 'text': text_input, | |
288 | 'csrf_token': self.csrf_token |
|
316 | 'csrf_token': self.csrf_token | |
289 | } |
|
317 | } | |
290 | commit_id = '0' * 16 # fake this for tests |
|
318 | commit_id = '0' * 16 # fake this for tests |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -484,7 +484,7 b' class TestCompareView(object):' | |||||
484 |
|
484 | |||
485 | # outgoing commits between those commits |
|
485 | # outgoing commits between those commits | |
486 | compare_page = ComparePage(response) |
|
486 | compare_page = ComparePage(response) | |
487 |
compare_page.contains_commits(commits=[commit1] |
|
487 | compare_page.contains_commits(commits=[commit1]) | |
488 |
|
488 | |||
489 | def test_errors_when_comparing_unknown_source_repo(self, backend): |
|
489 | def test_errors_when_comparing_unknown_source_repo(self, backend): | |
490 | repo = backend.repo |
|
490 | repo = backend.repo | |
@@ -641,6 +641,7 b' class ComparePage(AssertResponse):' | |||||
641 | self.contains_one_link( |
|
641 | self.contains_one_link( | |
642 | 'r%s:%s' % (commit.idx, commit.short_id), |
|
642 | 'r%s:%s' % (commit.idx, commit.short_id), | |
643 | self._commit_url(commit)) |
|
643 | self._commit_url(commit)) | |
|
644 | ||||
644 | if ancestors: |
|
645 | if ancestors: | |
645 | response.mustcontain('Ancestor') |
|
646 | response.mustcontain('Ancestor') | |
646 | for ancestor in ancestors: |
|
647 | for ancestor in ancestors: |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -629,7 +629,7 b' class TestPullrequestsView(object):' | |||||
629 | model_patcher = mock.patch.multiple( |
|
629 | model_patcher = mock.patch.multiple( | |
630 | PullRequestModel, |
|
630 | PullRequestModel, | |
631 | merge_repo=mock.Mock(return_value=merge_resp), |
|
631 | merge_repo=mock.Mock(return_value=merge_resp), | |
632 | merge_status=mock.Mock(return_value=(True, 'WRONG_MESSAGE'))) |
|
632 | merge_status=mock.Mock(return_value=(None, True, 'WRONG_MESSAGE'))) | |
633 |
|
633 | |||
634 | with model_patcher: |
|
634 | with model_patcher: | |
635 | response = self.app.post( |
|
635 | response = self.app.post( | |
@@ -891,6 +891,8 b' class TestPullrequestsView(object):' | |||||
891 |
|
891 | |||
892 | vcs = repo.scm_instance() |
|
892 | vcs = repo.scm_instance() | |
893 | vcs.remove_ref('refs/heads/{}'.format(branch_name)) |
|
893 | vcs.remove_ref('refs/heads/{}'.format(branch_name)) | |
|
894 | # NOTE(marcink): run GC to ensure the commits are gone | |||
|
895 | vcs.run_gc() | |||
894 |
|
896 | |||
895 | response = self.app.get(route_path( |
|
897 | response = self.app.get(route_path( | |
896 | 'pullrequest_show', |
|
898 | 'pullrequest_show', |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -20,6 +20,9 b'' | |||||
20 |
|
20 | |||
21 | from rhodecode.lib import helpers as h |
|
21 | from rhodecode.lib import helpers as h | |
22 | from rhodecode.lib.utils2 import safe_int |
|
22 | from rhodecode.lib.utils2 import safe_int | |
|
23 | from rhodecode.model.pull_request import get_diff_info | |||
|
24 | ||||
|
25 | REVIEWER_API_VERSION = 'V3' | |||
23 |
|
26 | |||
24 |
|
27 | |||
25 | def reviewer_as_json(user, reasons=None, mandatory=False, rules=None, user_group=None): |
|
28 | def reviewer_as_json(user, reasons=None, mandatory=False, rules=None, user_group=None): | |
@@ -47,15 +50,20 b' def reviewer_as_json(user, reasons=None,' | |||||
47 |
|
50 | |||
48 | def get_default_reviewers_data( |
|
51 | def get_default_reviewers_data( | |
49 | current_user, source_repo, source_commit, target_repo, target_commit): |
|
52 | current_user, source_repo, source_commit, target_repo, target_commit): | |
|
53 | """ | |||
|
54 | Return json for default reviewers of a repository | |||
|
55 | """ | |||
50 |
|
56 | |||
51 | """ Return json for default reviewers of a repository """ |
|
57 | diff_info = get_diff_info( | |
|
58 | source_repo, source_commit.raw_id, target_repo, target_commit.raw_id) | |||
52 |
|
59 | |||
53 | reasons = ['Default reviewer', 'Repository owner'] |
|
60 | reasons = ['Default reviewer', 'Repository owner'] | |
54 | json_reviewers = [reviewer_as_json( |
|
61 | json_reviewers = [reviewer_as_json( | |
55 | user=target_repo.user, reasons=reasons, mandatory=False, rules=None)] |
|
62 | user=target_repo.user, reasons=reasons, mandatory=False, rules=None)] | |
56 |
|
63 | |||
57 | return { |
|
64 | return { | |
58 |
'api_ver': |
|
65 | 'api_ver': REVIEWER_API_VERSION, # define version for later possible schema upgrade | |
|
66 | 'diff_info': diff_info, | |||
59 | 'reviewers': json_reviewers, |
|
67 | 'reviewers': json_reviewers, | |
60 | 'rules': {}, |
|
68 | 'rules': {}, | |
61 | 'rules_data': {}, |
|
69 | 'rules_data': {}, |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -22,7 +22,7 b'' | |||||
22 | import logging |
|
22 | import logging | |
23 | import collections |
|
23 | import collections | |
24 |
|
24 | |||
25 | from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound |
|
25 | from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound, HTTPForbidden | |
26 | from pyramid.view import view_config |
|
26 | from pyramid.view import view_config | |
27 | from pyramid.renderers import render |
|
27 | from pyramid.renderers import render | |
28 | from pyramid.response import Response |
|
28 | from pyramid.response import Response | |
@@ -380,6 +380,11 b' class RepoCommitsView(RepoAppView):' | |||||
380 | 'repo_commit', repo_name=self.db_repo_name, |
|
380 | 'repo_commit', repo_name=self.db_repo_name, | |
381 | commit_id=current_id)) |
|
381 | commit_id=current_id)) | |
382 |
|
382 | |||
|
383 | commit = self.db_repo.get_commit(current_id) | |||
|
384 | CommentsModel().trigger_commit_comment_hook( | |||
|
385 | self.db_repo, self._rhodecode_user, 'create', | |||
|
386 | data={'comment': comment, 'commit': commit}) | |||
|
387 | ||||
383 | # finalize, commit and redirect |
|
388 | # finalize, commit and redirect | |
384 | Session().commit() |
|
389 | Session().commit() | |
385 |
|
390 | |||
@@ -533,6 +538,10 b' class RepoCommitsView(RepoAppView):' | |||||
533 | # comment already deleted in another call probably |
|
538 | # comment already deleted in another call probably | |
534 | return True |
|
539 | return True | |
535 |
|
540 | |||
|
541 | if comment.immutable: | |||
|
542 | # don't allow deleting comments that are immutable | |||
|
543 | raise HTTPForbidden() | |||
|
544 | ||||
536 | is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name) |
|
545 | is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name) | |
537 | super_admin = h.HasPermissionAny('hg.admin')() |
|
546 | super_admin = h.HasPermissionAny('hg.admin')() | |
538 | comment_owner = (comment.author.user_id == self._rhodecode_db_user.user_id) |
|
547 | comment_owner = (comment.author.user_id == self._rhodecode_db_user.user_id) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -245,7 +245,7 b' class RepoFilesView(RepoAppView):' | |||||
245 |
|
245 | |||
246 | return branch_name, sha_commit_id, is_head |
|
246 | return branch_name, sha_commit_id, is_head | |
247 |
|
247 | |||
248 | def _get_tree_at_commit(self, c, commit_id, f_path, full_load=False): |
|
248 | def _get_tree_at_commit(self, c, commit_id, f_path, full_load=False, at_rev=None): | |
249 |
|
249 | |||
250 | repo_id = self.db_repo.repo_id |
|
250 | repo_id = self.db_repo.repo_id | |
251 | force_recache = self.get_recache_flag() |
|
251 | force_recache = self.get_recache_flag() | |
@@ -261,19 +261,19 b' class RepoFilesView(RepoAppView):' | |||||
261 | cache_namespace_uid = 'cache_repo.{}'.format(repo_id) |
|
261 | cache_namespace_uid = 'cache_repo.{}'.format(repo_id) | |
262 | region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid) |
|
262 | region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid) | |
263 |
|
263 | |||
264 | @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, |
|
264 | @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on) | |
265 | condition=cache_on) |
|
265 | def compute_file_tree(ver, _name_hash, _repo_id, _commit_id, _f_path, _full_load, _at_rev): | |
266 | def compute_file_tree(ver, repo_id, commit_id, f_path, full_load): |
|
|||
267 | log.debug('Generating cached file tree at ver:%s for repo_id: %s, %s, %s', |
|
266 | log.debug('Generating cached file tree at ver:%s for repo_id: %s, %s, %s', | |
268 | ver, repo_id, commit_id, f_path) |
|
267 | ver, _repo_id, _commit_id, _f_path) | |
269 |
|
268 | |||
270 | c.full_load = full_load |
|
269 | c.full_load = _full_load | |
271 | return render( |
|
270 | return render( | |
272 | 'rhodecode:templates/files/files_browser_tree.mako', |
|
271 | 'rhodecode:templates/files/files_browser_tree.mako', | |
273 | self._get_template_context(c), self.request) |
|
272 | self._get_template_context(c), self.request, _at_rev) | |
274 |
|
273 | |||
275 | return compute_file_tree( |
|
274 | return compute_file_tree( | |
276 |
rc_cache.FILE_TREE_CACHE_VER, self.db_repo.repo_ |
|
275 | rc_cache.FILE_TREE_CACHE_VER, self.db_repo.repo_name_hash, | |
|
276 | self.db_repo.repo_id, commit_id, f_path, full_load, at_rev) | |||
277 |
|
277 | |||
278 | def _get_archive_spec(self, fname): |
|
278 | def _get_archive_spec(self, fname): | |
279 | log.debug('Detecting archive spec for: `%s`', fname) |
|
279 | log.debug('Detecting archive spec for: `%s`', fname) | |
@@ -617,15 +617,12 b' class RepoFilesView(RepoAppView):' | |||||
617 | c.renderer = view_name == 'repo_files:rendered' or \ |
|
617 | c.renderer = view_name == 'repo_files:rendered' or \ | |
618 | not self.request.GET.get('no-render', False) |
|
618 | not self.request.GET.get('no-render', False) | |
619 |
|
619 | |||
620 | # redirect to given commit_id from form if given |
|
620 | commit_id, f_path = self._get_commit_and_path() | |
621 | get_commit_id = self.request.GET.get('at_rev', None) |
|
|||
622 | if get_commit_id: |
|
|||
623 | self._get_commit_or_redirect(get_commit_id) |
|
|||
624 |
|
621 | |||
625 | commit_id, f_path = self._get_commit_and_path() |
|
|||
626 | c.commit = self._get_commit_or_redirect(commit_id) |
|
622 | c.commit = self._get_commit_or_redirect(commit_id) | |
627 | c.branch = self.request.GET.get('branch', None) |
|
623 | c.branch = self.request.GET.get('branch', None) | |
628 | c.f_path = f_path |
|
624 | c.f_path = f_path | |
|
625 | at_rev = self.request.GET.get('at') | |||
629 |
|
626 | |||
630 | # prev link |
|
627 | # prev link | |
631 | try: |
|
628 | try: | |
@@ -705,7 +702,7 b' class RepoFilesView(RepoAppView):' | |||||
705 | c.authors = [] |
|
702 | c.authors = [] | |
706 | # this loads a simple tree without metadata to speed things up |
|
703 | # this loads a simple tree without metadata to speed things up | |
707 | # later via ajax we call repo_nodetree_full and fetch whole |
|
704 | # later via ajax we call repo_nodetree_full and fetch whole | |
708 | c.file_tree = self._get_tree_at_commit(c, c.commit.raw_id, f_path) |
|
705 | c.file_tree = self._get_tree_at_commit(c, c.commit.raw_id, f_path, at_rev=at_rev) | |
709 |
|
706 | |||
710 | c.readme_data, c.readme_file = \ |
|
707 | c.readme_data, c.readme_file = \ | |
711 | self._get_readme_data(self.db_repo, c.visual.default_renderer, |
|
708 | self._get_readme_data(self.db_repo, c.visual.default_renderer, | |
@@ -782,9 +779,10 b' class RepoFilesView(RepoAppView):' | |||||
782 |
|
779 | |||
783 | c.file = dir_node |
|
780 | c.file = dir_node | |
784 | c.commit = commit |
|
781 | c.commit = commit | |
|
782 | at_rev = self.request.GET.get('at') | |||
785 |
|
783 | |||
786 | html = self._get_tree_at_commit( |
|
784 | html = self._get_tree_at_commit( | |
787 | c, commit.raw_id, dir_node.path, full_load=True) |
|
785 | c, commit.raw_id, dir_node.path, full_load=True, at_rev=at_rev) | |
788 |
|
786 | |||
789 | return Response(html) |
|
787 | return Response(html) | |
790 |
|
788 | |||
@@ -915,13 +913,12 b' class RepoFilesView(RepoAppView):' | |||||
915 | cache_namespace_uid = 'cache_repo.{}'.format(repo_id) |
|
913 | cache_namespace_uid = 'cache_repo.{}'.format(repo_id) | |
916 | region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid) |
|
914 | region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid) | |
917 |
|
915 | |||
918 | @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, |
|
916 | @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on) | |
919 | condition=cache_on) |
|
917 | def compute_file_search(_name_hash, _repo_id, _commit_id, _f_path): | |
920 | def compute_file_search(repo_id, commit_id, f_path): |
|
|||
921 | log.debug('Generating cached nodelist for repo_id:%s, %s, %s', |
|
918 | log.debug('Generating cached nodelist for repo_id:%s, %s, %s', | |
922 | repo_id, commit_id, f_path) |
|
919 | _repo_id, commit_id, f_path) | |
923 | try: |
|
920 | try: | |
924 | _d, _f = ScmModel().get_quick_filter_nodes(repo_name, commit_id, f_path) |
|
921 | _d, _f = ScmModel().get_quick_filter_nodes(repo_name, _commit_id, _f_path) | |
925 | except (RepositoryError, CommitDoesNotExistError, Exception) as e: |
|
922 | except (RepositoryError, CommitDoesNotExistError, Exception) as e: | |
926 | log.exception(safe_str(e)) |
|
923 | log.exception(safe_str(e)) | |
927 | h.flash(safe_str(h.escape(e)), category='error') |
|
924 | h.flash(safe_str(h.escape(e)), category='error') | |
@@ -931,7 +928,8 b' class RepoFilesView(RepoAppView):' | |||||
931 |
|
928 | |||
932 | return _d + _f |
|
929 | return _d + _f | |
933 |
|
930 | |||
934 |
result = compute_file_search(self.db_repo.repo_id, |
|
931 | result = compute_file_search(self.db_repo.repo_name_hash, self.db_repo.repo_id, | |
|
932 | commit_id, f_path) | |||
935 | return filter(lambda n: self.path_filter.path_access_allowed(n['name']), result) |
|
933 | return filter(lambda n: self.path_filter.path_access_allowed(n['name']), result) | |
936 |
|
934 | |||
937 | @LoginRequired() |
|
935 | @LoginRequired() | |
@@ -961,6 +959,9 b' class RepoFilesView(RepoAppView):' | |||||
961 | return commit_id |
|
959 | return commit_id | |
962 |
|
960 | |||
963 | def _symbolic_reference_svn(self, commit_id, name, f_path, ref_type): |
|
961 | def _symbolic_reference_svn(self, commit_id, name, f_path, ref_type): | |
|
962 | return commit_id | |||
|
963 | ||||
|
964 | # NOTE(dan): old code we used in "diff" mode compare | |||
964 | new_f_path = vcspath.join(name, f_path) |
|
965 | new_f_path = vcspath.join(name, f_path) | |
965 | return u'%s@%s' % (new_f_path, commit_id) |
|
966 | return u'%s@%s' % (new_f_path, commit_id) | |
966 |
|
967 | |||
@@ -1035,10 +1036,24 b' class RepoFilesView(RepoAppView):' | |||||
1035 | file_history, _hist = self._get_node_history(commit, f_path) |
|
1036 | file_history, _hist = self._get_node_history(commit, f_path) | |
1036 |
|
1037 | |||
1037 | res = [] |
|
1038 | res = [] | |
1038 |
for |
|
1039 | for section_items, section in file_history: | |
|
1040 | items = [] | |||
|
1041 | for obj_id, obj_text, obj_type in section_items: | |||
|
1042 | at_rev = '' | |||
|
1043 | if obj_type in ['branch', 'bookmark', 'tag']: | |||
|
1044 | at_rev = obj_text | |||
|
1045 | entry = { | |||
|
1046 | 'id': obj_id, | |||
|
1047 | 'text': obj_text, | |||
|
1048 | 'type': obj_type, | |||
|
1049 | 'at_rev': at_rev | |||
|
1050 | } | |||
|
1051 | ||||
|
1052 | items.append(entry) | |||
|
1053 | ||||
1039 | res.append({ |
|
1054 | res.append({ | |
1040 |
'text': |
|
1055 | 'text': section, | |
1041 | 'children': [{'id': o[0], 'text': o[1], 'type': o[2]} for o in obj[0]] |
|
1056 | 'children': items | |
1042 | }) |
|
1057 | }) | |
1043 |
|
1058 | |||
1044 | data = { |
|
1059 | data = { | |
@@ -1098,6 +1113,42 b' class RepoFilesView(RepoAppView):' | |||||
1098 | @LoginRequired() |
|
1113 | @LoginRequired() | |
1099 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') |
|
1114 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') | |
1100 | @view_config( |
|
1115 | @view_config( | |
|
1116 | route_name='repo_files_check_head', request_method='POST', | |||
|
1117 | renderer='json_ext', xhr=True) | |||
|
1118 | def repo_files_check_head(self): | |||
|
1119 | self.load_default_context() | |||
|
1120 | ||||
|
1121 | commit_id, f_path = self._get_commit_and_path() | |||
|
1122 | _branch_name, _sha_commit_id, is_head = \ | |||
|
1123 | self._is_valid_head(commit_id, self.rhodecode_vcs_repo) | |||
|
1124 | ||||
|
1125 | new_path = self.request.POST.get('path') | |||
|
1126 | operation = self.request.POST.get('operation') | |||
|
1127 | path_exist = '' | |||
|
1128 | ||||
|
1129 | if new_path and operation in ['create', 'upload']: | |||
|
1130 | new_f_path = os.path.join(f_path.lstrip('/'), new_path) | |||
|
1131 | try: | |||
|
1132 | commit_obj = self.rhodecode_vcs_repo.get_commit(commit_id) | |||
|
1133 | # NOTE(dan): construct whole path without leading / | |||
|
1134 | file_node = commit_obj.get_node(new_f_path) | |||
|
1135 | if file_node is not None: | |||
|
1136 | path_exist = new_f_path | |||
|
1137 | except EmptyRepositoryError: | |||
|
1138 | pass | |||
|
1139 | except Exception: | |||
|
1140 | pass | |||
|
1141 | ||||
|
1142 | return { | |||
|
1143 | 'branch': _branch_name, | |||
|
1144 | 'sha': _sha_commit_id, | |||
|
1145 | 'is_head': is_head, | |||
|
1146 | 'path_exists': path_exist | |||
|
1147 | } | |||
|
1148 | ||||
|
1149 | @LoginRequired() | |||
|
1150 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') | |||
|
1151 | @view_config( | |||
1101 | route_name='repo_files_remove_file', request_method='GET', |
|
1152 | route_name='repo_files_remove_file', request_method='GET', | |
1102 | renderer='rhodecode:templates/files/files_delete.mako') |
|
1153 | renderer='rhodecode:templates/files/files_delete.mako') | |
1103 | def repo_files_remove_file(self): |
|
1154 | def repo_files_remove_file(self): |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -114,21 +114,26 b' class RepoSettingsPermissionsView(RepoAp' | |||||
114 | private_flag = str2bool(self.request.POST.get('private')) |
|
114 | private_flag = str2bool(self.request.POST.get('private')) | |
115 |
|
115 | |||
116 | try: |
|
116 | try: | |
117 | RepoModel().update( |
|
117 | repo = RepoModel().get(self.db_repo.repo_id) | |
118 | self.db_repo, **{'repo_private': private_flag, 'repo_name': self.db_repo_name}) |
|
118 | repo.private = private_flag | |
|
119 | Session().add(repo) | |||
|
120 | RepoModel().grant_user_permission( | |||
|
121 | repo=self.db_repo, user=User.DEFAULT_USER, perm='repository.none' | |||
|
122 | ) | |||
|
123 | ||||
119 | Session().commit() |
|
124 | Session().commit() | |
120 |
|
125 | |||
121 | h.flash(_('Repository `{}` private mode set successfully').format(self.db_repo_name), |
|
126 | h.flash(_('Repository `{}` private mode set successfully').format(self.db_repo_name), | |
122 | category='success') |
|
127 | category='success') | |
|
128 | # NOTE(dan): we change repo private mode we need to notify all USERS | |||
|
129 | affected_user_ids = User.get_all_user_ids() | |||
|
130 | PermissionModel().trigger_permission_flush(affected_user_ids) | |||
|
131 | ||||
123 | except Exception: |
|
132 | except Exception: | |
124 | log.exception("Exception during update of repository") |
|
133 | log.exception("Exception during update of repository") | |
125 | h.flash(_('Error occurred during update of repository {}').format( |
|
134 | h.flash(_('Error occurred during update of repository {}').format( | |
126 | self.db_repo_name), category='error') |
|
135 | self.db_repo_name), category='error') | |
127 |
|
136 | |||
128 | # NOTE(dan): we change repo private mode we need to notify all USERS |
|
|||
129 | affected_user_ids = User.get_all_user_ids() |
|
|||
130 | PermissionModel().trigger_permission_flush(affected_user_ids) |
|
|||
131 |
|
||||
132 | return { |
|
137 | return { | |
133 | 'redirect_url': h.route_path('edit_repo_perms', repo_name=self.db_repo_name), |
|
138 | 'redirect_url': h.route_path('edit_repo_perms', repo_name=self.db_repo_name), | |
134 | 'private': private_flag |
|
139 | 'private': private_flag |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -40,12 +40,12 b' from rhodecode.lib.auth import (' | |||||
40 | NotAnonymous, CSRFRequired) |
|
40 | NotAnonymous, CSRFRequired) | |
41 | from rhodecode.lib.utils2 import str2bool, safe_str, safe_unicode |
|
41 | from rhodecode.lib.utils2 import str2bool, safe_str, safe_unicode | |
42 | from rhodecode.lib.vcs.backends.base import EmptyCommit, UpdateFailureReason |
|
42 | from rhodecode.lib.vcs.backends.base import EmptyCommit, UpdateFailureReason | |
43 |
from rhodecode.lib.vcs.exceptions import ( |
|
43 | from rhodecode.lib.vcs.exceptions import ( | |
44 | RepositoryRequirementError, EmptyRepositoryError) |
|
44 | CommitDoesNotExistError, RepositoryRequirementError, EmptyRepositoryError) | |
45 | from rhodecode.model.changeset_status import ChangesetStatusModel |
|
45 | from rhodecode.model.changeset_status import ChangesetStatusModel | |
46 | from rhodecode.model.comment import CommentsModel |
|
46 | from rhodecode.model.comment import CommentsModel | |
47 | from rhodecode.model.db import (func, or_, PullRequest, PullRequestVersion, |
|
47 | from rhodecode.model.db import ( | |
48 | ChangesetComment, ChangesetStatus, Repository) |
|
48 | func, or_, PullRequest, ChangesetComment, ChangesetStatus, Repository) | |
49 | from rhodecode.model.forms import PullRequestForm |
|
49 | from rhodecode.model.forms import PullRequestForm | |
50 | from rhodecode.model.meta import Session |
|
50 | from rhodecode.model.meta import Session | |
51 | from rhodecode.model.pull_request import PullRequestModel, MergeCheck |
|
51 | from rhodecode.model.pull_request import PullRequestModel, MergeCheck | |
@@ -210,10 +210,12 b' class RepoPullRequestsView(RepoAppView, ' | |||||
210 | return caching_enabled |
|
210 | return caching_enabled | |
211 |
|
211 | |||
212 | def _get_diffset(self, source_repo_name, source_repo, |
|
212 | def _get_diffset(self, source_repo_name, source_repo, | |
|
213 | ancestor_commit, | |||
213 | source_ref_id, target_ref_id, |
|
214 | source_ref_id, target_ref_id, | |
214 | target_commit, source_commit, diff_limit, file_limit, |
|
215 | target_commit, source_commit, diff_limit, file_limit, | |
215 | fulldiff, hide_whitespace_changes, diff_context): |
|
216 | fulldiff, hide_whitespace_changes, diff_context): | |
216 |
|
217 | |||
|
218 | target_ref_id = ancestor_commit.raw_id | |||
217 | vcs_diff = PullRequestModel().get_diff( |
|
219 | vcs_diff = PullRequestModel().get_diff( | |
218 | source_repo, source_ref_id, target_ref_id, |
|
220 | source_repo, source_ref_id, target_ref_id, | |
219 | hide_whitespace_changes, diff_context) |
|
221 | hide_whitespace_changes, diff_context) | |
@@ -278,6 +280,7 b' class RepoPullRequestsView(RepoAppView, ' | |||||
278 | _new_state = { |
|
280 | _new_state = { | |
279 | 'created': PullRequest.STATE_CREATED, |
|
281 | 'created': PullRequest.STATE_CREATED, | |
280 | }.get(self.request.GET.get('force_state')) |
|
282 | }.get(self.request.GET.get('force_state')) | |
|
283 | ||||
281 | if c.is_super_admin and _new_state: |
|
284 | if c.is_super_admin and _new_state: | |
282 | with pull_request.set_state(PullRequest.STATE_UPDATING, final_state=_new_state): |
|
285 | with pull_request.set_state(PullRequest.STATE_UPDATING, final_state=_new_state): | |
283 | h.flash( |
|
286 | h.flash( | |
@@ -396,9 +399,12 b' class RepoPullRequestsView(RepoAppView, ' | |||||
396 | pull_request_latest, auth_user=self._rhodecode_user, |
|
399 | pull_request_latest, auth_user=self._rhodecode_user, | |
397 | translator=self.request.translate, |
|
400 | translator=self.request.translate, | |
398 | force_shadow_repo_refresh=force_refresh) |
|
401 | force_shadow_repo_refresh=force_refresh) | |
|
402 | ||||
399 | c.pr_merge_errors = _merge_check.error_details |
|
403 | c.pr_merge_errors = _merge_check.error_details | |
400 | c.pr_merge_possible = not _merge_check.failed |
|
404 | c.pr_merge_possible = not _merge_check.failed | |
401 | c.pr_merge_message = _merge_check.merge_msg |
|
405 | c.pr_merge_message = _merge_check.merge_msg | |
|
406 | c.pr_merge_source_commit = _merge_check.source_commit | |||
|
407 | c.pr_merge_target_commit = _merge_check.target_commit | |||
402 |
|
408 | |||
403 | c.pr_merge_info = MergeCheck.get_merge_conditions( |
|
409 | c.pr_merge_info = MergeCheck.get_merge_conditions( | |
404 | pull_request_latest, translator=self.request.translate) |
|
410 | pull_request_latest, translator=self.request.translate) | |
@@ -537,6 +543,13 b' class RepoPullRequestsView(RepoAppView, ' | |||||
537 | (ancestor_commit, commit_cache, missing_requirements, |
|
543 | (ancestor_commit, commit_cache, missing_requirements, | |
538 | source_commit, target_commit) = cached_diff['commits'] |
|
544 | source_commit, target_commit) = cached_diff['commits'] | |
539 | else: |
|
545 | else: | |
|
546 | # NOTE(marcink): we reach potentially unreachable errors when a PR has | |||
|
547 | # merge errors resulting in potentially hidden commits in the shadow repo. | |||
|
548 | maybe_unreachable = _merge_check.MERGE_CHECK in _merge_check.error_details \ | |||
|
549 | and _merge_check.merge_response | |||
|
550 | maybe_unreachable = maybe_unreachable \ | |||
|
551 | and _merge_check.merge_response.metadata.get('unresolved_files') | |||
|
552 | log.debug("Using unreachable commits due to MERGE_CHECK in merge simulation") | |||
540 | diff_commit_cache = \ |
|
553 | diff_commit_cache = \ | |
541 | (ancestor_commit, commit_cache, missing_requirements, |
|
554 | (ancestor_commit, commit_cache, missing_requirements, | |
542 | source_commit, target_commit) = self.get_commits( |
|
555 | source_commit, target_commit) = self.get_commits( | |
@@ -547,7 +560,8 b' class RepoPullRequestsView(RepoAppView, ' | |||||
547 | source_scm, |
|
560 | source_scm, | |
548 | target_commit, |
|
561 | target_commit, | |
549 | target_ref_id, |
|
562 | target_ref_id, | |
550 |
target_scm |
|
563 | target_scm, | |
|
564 | maybe_unreachable=maybe_unreachable) | |||
551 |
|
565 | |||
552 | # register our commit range |
|
566 | # register our commit range | |
553 | for comm in commit_cache.values(): |
|
567 | for comm in commit_cache.values(): | |
@@ -581,11 +595,10 b' class RepoPullRequestsView(RepoAppView, ' | |||||
581 | has_proper_diff_cache = cached_diff and cached_diff.get('commits') |
|
595 | has_proper_diff_cache = cached_diff and cached_diff.get('commits') | |
582 | if not force_recache and has_proper_diff_cache: |
|
596 | if not force_recache and has_proper_diff_cache: | |
583 | c.diffset = cached_diff['diff'] |
|
597 | c.diffset = cached_diff['diff'] | |
584 | (ancestor_commit, commit_cache, missing_requirements, |
|
|||
585 | source_commit, target_commit) = cached_diff['commits'] |
|
|||
586 | else: |
|
598 | else: | |
587 | c.diffset = self._get_diffset( |
|
599 | c.diffset = self._get_diffset( | |
588 | c.source_repo.repo_name, commits_source_repo, |
|
600 | c.source_repo.repo_name, commits_source_repo, | |
|
601 | c.ancestor_commit, | |||
589 | source_ref_id, target_ref_id, |
|
602 | source_ref_id, target_ref_id, | |
590 | target_commit, source_commit, |
|
603 | target_commit, source_commit, | |
591 | diff_limit, file_limit, c.fulldiff, |
|
604 | diff_limit, file_limit, c.fulldiff, | |
@@ -665,8 +678,10 b' class RepoPullRequestsView(RepoAppView, ' | |||||
665 |
|
678 | |||
666 | # calculate the diff for commits between versions |
|
679 | # calculate the diff for commits between versions | |
667 | c.commit_changes = [] |
|
680 | c.commit_changes = [] | |
668 | mark = lambda cs, fw: list( |
|
681 | ||
669 | h.itertools.izip_longest([], cs, fillvalue=fw)) |
|
682 | def mark(cs, fw): | |
|
683 | return list(h.itertools.izip_longest([], cs, fillvalue=fw)) | |||
|
684 | ||||
670 | for c_type, raw_id in mark(commit_changes.added, 'a') \ |
|
685 | for c_type, raw_id in mark(commit_changes.added, 'a') \ | |
671 | + mark(commit_changes.removed, 'r') \ |
|
686 | + mark(commit_changes.removed, 'r') \ | |
672 | + mark(commit_changes.common, 'c'): |
|
687 | + mark(commit_changes.common, 'c'): | |
@@ -698,15 +713,22 b' class RepoPullRequestsView(RepoAppView, ' | |||||
698 |
|
713 | |||
699 | def get_commits( |
|
714 | def get_commits( | |
700 | self, commits_source_repo, pull_request_at_ver, source_commit, |
|
715 | self, commits_source_repo, pull_request_at_ver, source_commit, | |
701 |
source_ref_id, source_scm, target_commit, target_ref_id, target_scm |
|
716 | source_ref_id, source_scm, target_commit, target_ref_id, target_scm, | |
|
717 | maybe_unreachable=False): | |||
|
718 | ||||
702 | commit_cache = collections.OrderedDict() |
|
719 | commit_cache = collections.OrderedDict() | |
703 | missing_requirements = False |
|
720 | missing_requirements = False | |
|
721 | ||||
704 | try: |
|
722 | try: | |
705 | pre_load = ["author", "date", "message", "branch", "parents"] |
|
723 | pre_load = ["author", "date", "message", "branch", "parents"] | |
706 | show_revs = pull_request_at_ver.revisions |
|
724 | ||
707 | for rev in show_revs: |
|
725 | pull_request_commits = pull_request_at_ver.revisions | |
708 | comm = commits_source_repo.get_commit( |
|
726 | log.debug('Loading %s commits from %s', | |
709 | commit_id=rev, pre_load=pre_load) |
|
727 | len(pull_request_commits), commits_source_repo) | |
|
728 | ||||
|
729 | for rev in pull_request_commits: | |||
|
730 | comm = commits_source_repo.get_commit(commit_id=rev, pre_load=pre_load, | |||
|
731 | maybe_unreachable=maybe_unreachable) | |||
710 | commit_cache[comm.raw_id] = comm |
|
732 | commit_cache[comm.raw_id] = comm | |
711 |
|
733 | |||
712 | # Order here matters, we first need to get target, and then |
|
734 | # Order here matters, we first need to get target, and then | |
@@ -715,22 +737,21 b' class RepoPullRequestsView(RepoAppView, ' | |||||
715 | commit_id=safe_str(target_ref_id)) |
|
737 | commit_id=safe_str(target_ref_id)) | |
716 |
|
738 | |||
717 | source_commit = commits_source_repo.get_commit( |
|
739 | source_commit = commits_source_repo.get_commit( | |
718 | commit_id=safe_str(source_ref_id)) |
|
740 | commit_id=safe_str(source_ref_id), maybe_unreachable=True) | |
719 | except CommitDoesNotExistError: |
|
741 | except CommitDoesNotExistError: | |
720 | log.warning( |
|
742 | log.warning('Failed to get commit from `{}` repo'.format( | |
721 | 'Failed to get commit from `{}` repo'.format( |
|
743 | commits_source_repo), exc_info=True) | |
722 | commits_source_repo), exc_info=True) |
|
|||
723 | except RepositoryRequirementError: |
|
744 | except RepositoryRequirementError: | |
724 | log.warning( |
|
745 | log.warning('Failed to get all required data from repo', exc_info=True) | |
725 | 'Failed to get all required data from repo', exc_info=True) |
|
|||
726 | missing_requirements = True |
|
746 | missing_requirements = True | |
727 | ancestor_commit = None |
|
747 | ||
|
748 | pr_ancestor_id = pull_request_at_ver.common_ancestor_id | |||
|
749 | ||||
728 | try: |
|
750 | try: | |
729 |
ancestor_ |
|
751 | ancestor_commit = source_scm.get_commit(pr_ancestor_id) | |
730 | source_commit.raw_id, target_commit.raw_id, target_scm) |
|
|||
731 | ancestor_commit = source_scm.get_commit(ancestor_id) |
|
|||
732 | except Exception: |
|
752 | except Exception: | |
733 | ancestor_commit = None |
|
753 | ancestor_commit = None | |
|
754 | ||||
734 | return ancestor_commit, commit_cache, missing_requirements, source_commit, target_commit |
|
755 | return ancestor_commit, commit_cache, missing_requirements, source_commit, target_commit | |
735 |
|
756 | |||
736 | def assure_not_empty_repo(self): |
|
757 | def assure_not_empty_repo(self): | |
@@ -934,6 +955,7 b' class RepoPullRequestsView(RepoAppView, ' | |||||
934 | target_repo = _form['target_repo'] |
|
955 | target_repo = _form['target_repo'] | |
935 | target_ref = _form['target_ref'] |
|
956 | target_ref = _form['target_ref'] | |
936 | commit_ids = _form['revisions'][::-1] |
|
957 | commit_ids = _form['revisions'][::-1] | |
|
958 | common_ancestor_id = _form['common_ancestor'] | |||
937 |
|
959 | |||
938 | # find the ancestor for this pr |
|
960 | # find the ancestor for this pr | |
939 | source_db_repo = Repository.get_by_repo_name(_form['source_repo']) |
|
961 | source_db_repo = Repository.get_by_repo_name(_form['source_repo']) | |
@@ -1020,6 +1042,7 b' class RepoPullRequestsView(RepoAppView, ' | |||||
1020 | target_repo=target_repo, |
|
1042 | target_repo=target_repo, | |
1021 | target_ref=target_ref, |
|
1043 | target_ref=target_ref, | |
1022 | revisions=commit_ids, |
|
1044 | revisions=commit_ids, | |
|
1045 | common_ancestor_id=common_ancestor_id, | |||
1023 | reviewers=reviewers, |
|
1046 | reviewers=reviewers, | |
1024 | title=pullrequest_title, |
|
1047 | title=pullrequest_title, | |
1025 | description=description, |
|
1048 | description=description, | |
@@ -1458,6 +1481,10 b' class RepoPullRequestsView(RepoAppView, ' | |||||
1458 | self.request.matchdict['comment_id']) |
|
1481 | self.request.matchdict['comment_id']) | |
1459 | comment_id = comment.comment_id |
|
1482 | comment_id = comment.comment_id | |
1460 |
|
1483 | |||
|
1484 | if comment.immutable: | |||
|
1485 | # don't allow deleting comments that are immutable | |||
|
1486 | raise HTTPForbidden() | |||
|
1487 | ||||
1461 | if pull_request.is_closed(): |
|
1488 | if pull_request.is_closed(): | |
1462 | log.debug('comment: forbidden because pull request is closed') |
|
1489 | log.debug('comment: forbidden because pull request is closed') | |
1463 | raise HTTPForbidden() |
|
1490 | raise HTTPForbidden() |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -54,8 +54,20 b' class RepoReviewRulesView(RepoAppView):' | |||||
54 | renderer='json_ext') |
|
54 | renderer='json_ext') | |
55 | def repo_default_reviewers_data(self): |
|
55 | def repo_default_reviewers_data(self): | |
56 | self.load_default_context() |
|
56 | self.load_default_context() | |
57 | target_repo_name = self.request.GET.get('target_repo', self.db_repo.repo_name) |
|
57 | ||
|
58 | request = self.request | |||
|
59 | source_repo = self.db_repo | |||
|
60 | source_repo_name = source_repo.repo_name | |||
|
61 | target_repo_name = request.GET.get('target_repo', source_repo_name) | |||
58 | target_repo = Repository.get_by_repo_name(target_repo_name) |
|
62 | target_repo = Repository.get_by_repo_name(target_repo_name) | |
|
63 | ||||
|
64 | source_ref = request.GET['source_ref'] | |||
|
65 | target_ref = request.GET['target_ref'] | |||
|
66 | source_commit = source_repo.get_commit(source_ref) | |||
|
67 | target_commit = target_repo.get_commit(target_ref) | |||
|
68 | ||||
|
69 | current_user = request.user.get_instance() | |||
59 | review_data = get_default_reviewers_data( |
|
70 | review_data = get_default_reviewers_data( | |
60 |
|
|
71 | current_user, source_repo, source_commit, target_repo, target_commit) | |
|
72 | ||||
61 | return review_data |
|
73 | return review_data |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -22,6 +22,7 b' import logging' | |||||
22 |
|
22 | |||
23 | from pyramid.view import view_config |
|
23 | from pyramid.view import view_config | |
24 | from pyramid.httpexceptions import HTTPFound |
|
24 | from pyramid.httpexceptions import HTTPFound | |
|
25 | from packaging.version import Version | |||
25 |
|
26 | |||
26 | from rhodecode import events |
|
27 | from rhodecode import events | |
27 | from rhodecode.apps._base import RepoAppView |
|
28 | from rhodecode.apps._base import RepoAppView | |
@@ -64,12 +65,19 b' class RepoSettingsView(RepoAppView):' | |||||
64 | c = self.load_default_context() |
|
65 | c = self.load_default_context() | |
65 | c.active = 'advanced' |
|
66 | c.active = 'advanced' | |
66 |
|
67 | |||
67 |
c.default_user_id = User.get_default_user() |
|
68 | c.default_user_id = User.get_default_user_id() | |
68 | c.in_public_journal = UserFollowing.query() \ |
|
69 | c.in_public_journal = UserFollowing.query() \ | |
69 | .filter(UserFollowing.user_id == c.default_user_id) \ |
|
70 | .filter(UserFollowing.user_id == c.default_user_id) \ | |
70 | .filter(UserFollowing.follows_repository == self.db_repo).scalar() |
|
71 | .filter(UserFollowing.follows_repository == self.db_repo).scalar() | |
71 |
|
72 | |||
72 | c.ver_info_dict = self.rhodecode_vcs_repo.get_hooks_info() |
|
73 | c.ver_info_dict = self.rhodecode_vcs_repo.get_hooks_info() | |
|
74 | c.hooks_outdated = False | |||
|
75 | ||||
|
76 | try: | |||
|
77 | if Version(c.ver_info_dict['pre_version']) < Version(c.rhodecode_version): | |||
|
78 | c.hooks_outdated = True | |||
|
79 | except Exception: | |||
|
80 | pass | |||
73 |
|
81 | |||
74 | # update commit cache if GET flag is present |
|
82 | # update commit cache if GET flag is present | |
75 | if self.request.GET.get('update_commit_cache'): |
|
83 | if self.request.GET.get('update_commit_cache'): | |
@@ -212,7 +220,7 b' class RepoSettingsView(RepoAppView):' | |||||
212 | _ = self.request.translate |
|
220 | _ = self.request.translate | |
213 |
|
221 | |||
214 | try: |
|
222 | try: | |
215 |
user_id = User.get_default_user() |
|
223 | user_id = User.get_default_user_id() | |
216 | ScmModel().toggle_following_repo(self.db_repo.repo_id, user_id) |
|
224 | ScmModel().toggle_following_repo(self.db_repo.repo_id, user_id) | |
217 | h.flash(_('Updated repository visibility in public journal'), |
|
225 | h.flash(_('Updated repository visibility in public journal'), | |
218 | category='success') |
|
226 | category='success') |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -60,11 +60,10 b' def perform_search(request, tmpl_context' | |||||
60 | errors = e.children |
|
60 | errors = e.children | |
61 |
|
61 | |||
62 | def url_generator(page_num): |
|
62 | def url_generator(page_num): | |
63 | q = urllib.quote(safe_str(search_query)) |
|
|||
64 |
|
63 | |||
65 | query_params = { |
|
64 | query_params = { | |
66 | 'page': page_num, |
|
65 | 'page': page_num, | |
67 | 'q': q, |
|
66 | 'q': safe_str(search_query), | |
68 | 'type': safe_str(search_type), |
|
67 | 'type': safe_str(search_type), | |
69 | 'max_lines': search_max_lines, |
|
68 | 'max_lines': search_max_lines, | |
70 | 'sort': search_sort |
|
69 | 'sort': search_sort | |
@@ -72,7 +71,6 b' def perform_search(request, tmpl_context' | |||||
72 |
|
71 | |||
73 | return '?' + urllib.urlencode(query_params) |
|
72 | return '?' + urllib.urlencode(query_params) | |
74 |
|
73 | |||
75 |
|
||||
76 | c = tmpl_context |
|
74 | c = tmpl_context | |
77 | search_query = search_params.get('search_query') |
|
75 | search_query = search_params.get('search_query') | |
78 | search_type = search_params.get('search_type') |
|
76 | search_type = search_params.get('search_type') |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -91,7 +91,6 b' class SshWrapper(object):' | |||||
91 |
|
91 | |||
92 | def get_repo_details(self, mode): |
|
92 | def get_repo_details(self, mode): | |
93 | vcs_type = mode if mode in ['svn', 'hg', 'git'] else None |
|
93 | vcs_type = mode if mode in ['svn', 'hg', 'git'] else None | |
94 | mode = mode |
|
|||
95 | repo_name = None |
|
94 | repo_name = None | |
96 |
|
95 | |||
97 | hg_pattern = r'^hg\s+\-R\s+(\S+)\s+serve\s+\-\-stdio$' |
|
96 | hg_pattern = r'^hg\s+\-R\s+(\S+)\s+serve\s+\-\-stdio$' | |
@@ -101,8 +100,7 b' class SshWrapper(object):' | |||||
101 | repo_name = hg_match.group(1).strip('/') |
|
100 | repo_name = hg_match.group(1).strip('/') | |
102 | return vcs_type, repo_name, mode |
|
101 | return vcs_type, repo_name, mode | |
103 |
|
102 | |||
104 | git_pattern = ( |
|
103 | git_pattern = r'^git-(receive-pack|upload-pack)\s\'[/]?(\S+?)(|\.git)\'$' | |
105 | r'^git-(receive-pack|upload-pack)\s\'[/]?(\S+?)(|\.git)\'$') |
|
|||
106 | git_match = re.match(git_pattern, self.command) |
|
104 | git_match = re.match(git_pattern, self.command) | |
107 | if git_match is not None: |
|
105 | if git_match is not None: | |
108 | vcs_type = 'git' |
|
106 | vcs_type = 'git' | |
@@ -115,7 +113,8 b' class SshWrapper(object):' | |||||
115 |
|
113 | |||
116 | if svn_match is not None: |
|
114 | if svn_match is not None: | |
117 | vcs_type = 'svn' |
|
115 | vcs_type = 'svn' | |
118 | # Repo name should be extracted from the input stream |
|
116 | # Repo name should be extracted from the input stream, we're unable to | |
|
117 | # extract it at this point in execution | |||
119 | return vcs_type, repo_name, mode |
|
118 | return vcs_type, repo_name, mode | |
120 |
|
119 | |||
121 | return vcs_type, repo_name, mode |
|
120 | return vcs_type, repo_name, mode | |
@@ -188,8 +187,7 b' class SshWrapper(object):' | |||||
188 | log.debug('SSH Connection info %s', self.get_connection_info()) |
|
187 | log.debug('SSH Connection info %s', self.get_connection_info()) | |
189 |
|
188 | |||
190 | if shell and self.command is None: |
|
189 | if shell and self.command is None: | |
191 | log.info( |
|
190 | log.info('Dropping to shell, no command given and shell is allowed') | |
192 | 'Dropping to shell, no command given and shell is allowed') |
|
|||
193 | os.execl('/bin/bash', '-l') |
|
191 | os.execl('/bin/bash', '-l') | |
194 | exit_code = 1 |
|
192 | exit_code = 1 | |
195 |
|
193 | |||
@@ -216,8 +214,7 b' class SshWrapper(object):' | |||||
216 | exit_code = -1 |
|
214 | exit_code = -1 | |
217 |
|
215 | |||
218 | else: |
|
216 | else: | |
219 | log.error( |
|
217 | log.error('Unhandled Command: "%s" Aborting.', self.command) | |
220 | 'Unhandled Command: "%s" Aborting.', self.command) |
|
|||
221 | exit_code = -1 |
|
218 | exit_code = -1 | |
222 |
|
219 | |||
223 | return exit_code |
|
220 | return exit_code |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -66,9 +66,8 b' class VcsServer(object):' | |||||
66 |
|
66 | |||
67 | def _check_permissions(self, action): |
|
67 | def _check_permissions(self, action): | |
68 | permission = self.user_permissions.get(self.repo_name) |
|
68 | permission = self.user_permissions.get(self.repo_name) | |
69 | log.debug( |
|
69 | log.debug('permission for %s on %s are: %s', | |
70 | 'permission for %s on %s are: %s', |
|
70 | self.user, self.repo_name, permission) | |
71 | self.user, self.repo_name, permission) |
|
|||
72 |
|
71 | |||
73 | if not permission: |
|
72 | if not permission: | |
74 | log.error('user `%s` permissions to repo:%s are empty. Forbidding access.', |
|
73 | log.error('user `%s` permissions to repo:%s are empty. Forbidding access.', |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -68,8 +68,7 b' class GitServer(VcsServer):' | |||||
68 | self.store = store |
|
68 | self.store = store | |
69 | self.ini_path = ini_path |
|
69 | self.ini_path = ini_path | |
70 | self.repo_name = repo_name |
|
70 | self.repo_name = repo_name | |
71 | self._path = self.git_path = config.get( |
|
71 | self._path = self.git_path = config.get('app:main', 'ssh.executable.git') | |
72 | 'app:main', 'ssh.executable.git') |
|
|||
73 |
|
72 | |||
74 | self.repo_mode = repo_mode |
|
73 | self.repo_mode = repo_mode | |
75 | self.tunnel = GitTunnelWrapper(server=self) |
|
74 | self.tunnel = GitTunnelWrapper(server=self) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -67,9 +67,12 b' class SubversionTunnelWrapper(object):' | |||||
67 |
|
67 | |||
68 | def command(self): |
|
68 | def command(self): | |
69 | root = self.server.get_root_store() |
|
69 | root = self.server.get_root_store() | |
|
70 | username = self.server.user.username | |||
|
71 | ||||
70 | command = [ |
|
72 | command = [ | |
71 | self.server.svn_path, '-t', |
|
73 | self.server.svn_path, '-t', | |
72 | '--config-file', self.svn_conf_path, |
|
74 | '--config-file', self.svn_conf_path, | |
|
75 | '--tunnel-user', username, | |||
73 | '-r', root] |
|
76 | '-r', root] | |
74 | log.debug("Final CMD: %s", ' '.join(command)) |
|
77 | log.debug("Final CMD: %s", ' '.join(command)) | |
75 | return command |
|
78 | return command | |
@@ -95,9 +98,8 b' class SubversionTunnelWrapper(object):' | |||||
95 | signal.alarm(self.timeout) |
|
98 | signal.alarm(self.timeout) | |
96 | first_response = self._read_first_client_response() |
|
99 | first_response = self._read_first_client_response() | |
97 | signal.alarm(0) |
|
100 | signal.alarm(0) | |
98 | return ( |
|
101 | return (self._parse_first_client_response(first_response) | |
99 | self._parse_first_client_response(first_response) |
|
102 | if first_response else None) | |
100 | if first_response else None) |
|
|||
101 |
|
103 | |||
102 | def patch_first_client_response(self, response, **kwargs): |
|
104 | def patch_first_client_response(self, response, **kwargs): | |
103 | self.create_hooks_env() |
|
105 | self.create_hooks_env() | |
@@ -112,9 +114,8 b' class SubversionTunnelWrapper(object):' | |||||
112 | self.process.stdin.write(buffer_) |
|
114 | self.process.stdin.write(buffer_) | |
113 |
|
115 | |||
114 | def fail(self, message): |
|
116 | def fail(self, message): | |
115 | print( |
|
117 | print("( failure ( ( 210005 {message} 0: 0 ) ) )".format( | |
116 | "( failure ( ( 210005 {message} 0: 0 ) ) )".format( |
|
118 | message=self._svn_string(message))) | |
117 | message=self._svn_string(message))) |
|
|||
118 | self.remove_configs() |
|
119 | self.remove_configs() | |
119 | self.process.kill() |
|
120 | self.process.kill() | |
120 | return 1 |
|
121 | return 1 | |
@@ -139,6 +140,7 b' class SubversionTunnelWrapper(object):' | |||||
139 | brackets_stack.pop() |
|
140 | brackets_stack.pop() | |
140 | elif next_byte == " " and not brackets_stack: |
|
141 | elif next_byte == " " and not brackets_stack: | |
141 | break |
|
142 | break | |
|
143 | ||||
142 | return buffer_ |
|
144 | return buffer_ | |
143 |
|
145 | |||
144 | def _parse_first_client_response(self, buffer_): |
|
146 | def _parse_first_client_response(self, buffer_): | |
@@ -149,8 +151,7 b' class SubversionTunnelWrapper(object):' | |||||
149 | ( version:number ( cap:word ... ) url:string ? ra-client:string |
|
151 | ( version:number ( cap:word ... ) url:string ? ra-client:string | |
150 | ( ? client:string ) ) |
|
152 | ( ? client:string ) ) | |
151 |
|
153 | |||
152 | Please check https://svn.apache.org/repos/asf/subversion/trunk/ |
|
154 | Please check https://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_ra_svn/protocol | |
153 | subversion/libsvn_ra_svn/protocol |
|
|||
154 | """ |
|
155 | """ | |
155 | version_re = r'(?P<version>\d+)' |
|
156 | version_re = r'(?P<version>\d+)' | |
156 | capabilities_re = r'\(\s(?P<capabilities>[\w\d\-\ ]+)\s\)' |
|
157 | capabilities_re = r'\(\s(?P<capabilities>[\w\d\-\ ]+)\s\)' | |
@@ -163,8 +164,35 b' class SubversionTunnelWrapper(object):' | |||||
163 | version=version_re, capabilities=capabilities_re, |
|
164 | version=version_re, capabilities=capabilities_re, | |
164 | url=url_re, ra_client=ra_client_re, client=client_re)) |
|
165 | url=url_re, ra_client=ra_client_re, client=client_re)) | |
165 | matcher = regex.match(buffer_) |
|
166 | matcher = regex.match(buffer_) | |
|
167 | ||||
166 | return matcher.groupdict() if matcher else None |
|
168 | return matcher.groupdict() if matcher else None | |
167 |
|
169 | |||
|
170 | def _match_repo_name(self, url): | |||
|
171 | """ | |||
|
172 | Given an server url, try to match it against ALL known repository names. | |||
|
173 | This handles a tricky SVN case for SSH and subdir commits. | |||
|
174 | E.g if our repo name is my-svn-repo, a svn commit on file in a subdir would | |||
|
175 | result in the url with this subdir added. | |||
|
176 | """ | |||
|
177 | # case 1 direct match, we don't do any "heavy" lookups | |||
|
178 | if url in self.server.user_permissions: | |||
|
179 | return url | |||
|
180 | ||||
|
181 | log.debug('Extracting repository name from subdir path %s', url) | |||
|
182 | # case 2 we check all permissions, and match closes possible case... | |||
|
183 | # NOTE(dan): In this case we only know that url has a subdir parts, it's safe | |||
|
184 | # to assume that it will have the repo name as prefix, we ensure the prefix | |||
|
185 | # for similar repositories isn't matched by adding a / | |||
|
186 | # e.g subgroup/repo-name/ and subgroup/repo-name-1/ would work correct. | |||
|
187 | for repo_name in self.server.user_permissions: | |||
|
188 | repo_name_prefix = repo_name + '/' | |||
|
189 | if url.startswith(repo_name_prefix): | |||
|
190 | log.debug('Found prefix %s match, returning proper repository name', | |||
|
191 | repo_name_prefix) | |||
|
192 | return repo_name | |||
|
193 | ||||
|
194 | return | |||
|
195 | ||||
168 | def run(self, extras): |
|
196 | def run(self, extras): | |
169 | action = 'pull' |
|
197 | action = 'pull' | |
170 | self.create_svn_config() |
|
198 | self.create_svn_config() | |
@@ -175,7 +203,8 b' class SubversionTunnelWrapper(object):' | |||||
175 | return self.fail("Repository name cannot be extracted") |
|
203 | return self.fail("Repository name cannot be extracted") | |
176 |
|
204 | |||
177 | url_parts = urlparse.urlparse(first_response['url']) |
|
205 | url_parts = urlparse.urlparse(first_response['url']) | |
178 | self.server.repo_name = url_parts.path.strip('/') |
|
206 | ||
|
207 | self.server.repo_name = self._match_repo_name(url_parts.path.strip('/')) | |||
179 |
|
208 | |||
180 | exit_code = self.server._check_permissions(action) |
|
209 | exit_code = self.server._check_permissions(action) | |
181 | if exit_code: |
|
210 | if exit_code: | |
@@ -200,10 +229,10 b' class SubversionServer(VcsServer):' | |||||
200 | .__init__(user, user_permissions, config, env) |
|
229 | .__init__(user, user_permissions, config, env) | |
201 | self.store = store |
|
230 | self.store = store | |
202 | self.ini_path = ini_path |
|
231 | self.ini_path = ini_path | |
203 | # this is set in .run() from input stream |
|
232 | # NOTE(dan): repo_name at this point is empty, | |
|
233 | # this is set later in .run() based from parsed input stream | |||
204 | self.repo_name = repo_name |
|
234 | self.repo_name = repo_name | |
205 | self._path = self.svn_path = config.get( |
|
235 | self._path = self.svn_path = config.get('app:main', 'ssh.executable.svn') | |
206 | 'app:main', 'ssh.executable.svn') |
|
|||
207 |
|
236 | |||
208 | self.tunnel = SubversionTunnelWrapper(server=self) |
|
237 | self.tunnel = SubversionTunnelWrapper(server=self) | |
209 |
|
238 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -70,8 +70,10 b' class TestSubversionServer(object):' | |||||
70 | def test_command(self, svn_server): |
|
70 | def test_command(self, svn_server): | |
71 | server = svn_server.create() |
|
71 | server = svn_server.create() | |
72 | expected_command = [ |
|
72 | expected_command = [ | |
73 |
svn_server.svn_path, '-t', |
|
73 | svn_server.svn_path, '-t', | |
74 |
server.tunnel.svn_conf_path, |
|
74 | '--config-file', server.tunnel.svn_conf_path, | |
|
75 | '--tunnel-user', svn_server.user.username, | |||
|
76 | '-r', svn_server.root | |||
75 | ] |
|
77 | ] | |
76 |
|
78 | |||
77 | assert expected_command == server.tunnel.command() |
|
79 | assert expected_command == server.tunnel.command() | |
@@ -89,6 +91,86 b' class TestSubversionServer(object):' | |||||
89 | result = server._check_permissions(action) |
|
91 | result = server._check_permissions(action) | |
90 | assert result is code |
|
92 | assert result is code | |
91 |
|
93 | |||
|
94 | @pytest.mark.parametrize('permissions, access_paths, expected_match', [ | |||
|
95 | # not matched repository name | |||
|
96 | ({ | |||
|
97 | 'test-svn': '' | |||
|
98 | }, ['test-svn-1', 'test-svn-1/subpath'], | |||
|
99 | None), | |||
|
100 | ||||
|
101 | # exact match | |||
|
102 | ({ | |||
|
103 | 'test-svn': '' | |||
|
104 | }, | |||
|
105 | ['test-svn'], | |||
|
106 | 'test-svn'), | |||
|
107 | ||||
|
108 | # subdir commits | |||
|
109 | ({ | |||
|
110 | 'test-svn': '' | |||
|
111 | }, | |||
|
112 | ['test-svn/foo', | |||
|
113 | 'test-svn/foo/test-svn', | |||
|
114 | 'test-svn/trunk/development.txt', | |||
|
115 | ], | |||
|
116 | 'test-svn'), | |||
|
117 | ||||
|
118 | # subgroups + similar patterns | |||
|
119 | ({ | |||
|
120 | 'test-svn': '', | |||
|
121 | 'test-svn-1': '', | |||
|
122 | 'test-svn-subgroup/test-svn': '', | |||
|
123 | ||||
|
124 | }, | |||
|
125 | ['test-svn-1', | |||
|
126 | 'test-svn-1/foo/test-svn', | |||
|
127 | 'test-svn-1/test-svn', | |||
|
128 | ], | |||
|
129 | 'test-svn-1'), | |||
|
130 | ||||
|
131 | # subgroups + similar patterns | |||
|
132 | ({ | |||
|
133 | 'test-svn-1': '', | |||
|
134 | 'test-svn-10': '', | |||
|
135 | 'test-svn-100': '', | |||
|
136 | }, | |||
|
137 | ['test-svn-10', | |||
|
138 | 'test-svn-10/foo/test-svn', | |||
|
139 | 'test-svn-10/test-svn', | |||
|
140 | ], | |||
|
141 | 'test-svn-10'), | |||
|
142 | ||||
|
143 | # subgroups + similar patterns | |||
|
144 | ({ | |||
|
145 | 'name': '', | |||
|
146 | 'nameContains': '', | |||
|
147 | 'nameContainsThis': '', | |||
|
148 | }, | |||
|
149 | ['nameContains', | |||
|
150 | 'nameContains/This', | |||
|
151 | 'nameContains/This/test-svn', | |||
|
152 | ], | |||
|
153 | 'nameContains'), | |||
|
154 | ||||
|
155 | # subgroups + similar patterns | |||
|
156 | ({ | |||
|
157 | 'test-svn': '', | |||
|
158 | 'test-svn-1': '', | |||
|
159 | 'test-svn-subgroup/test-svn': '', | |||
|
160 | ||||
|
161 | }, | |||
|
162 | ['test-svn-subgroup/test-svn', | |||
|
163 | 'test-svn-subgroup/test-svn/foo/test-svn', | |||
|
164 | 'test-svn-subgroup/test-svn/trunk/example.txt', | |||
|
165 | ], | |||
|
166 | 'test-svn-subgroup/test-svn'), | |||
|
167 | ]) | |||
|
168 | def test_repo_extraction_on_subdir(self, svn_server, permissions, access_paths, expected_match): | |||
|
169 | server = svn_server.create(user_permissions=permissions) | |||
|
170 | for path in access_paths: | |||
|
171 | repo_name = server.tunnel._match_repo_name(path) | |||
|
172 | assert repo_name == expected_match | |||
|
173 | ||||
92 | def test_run_returns_executes_command(self, svn_server): |
|
174 | def test_run_returns_executes_command(self, svn_server): | |
93 | server = svn_server.create() |
|
175 | server = svn_server.create() | |
94 | from rhodecode.apps.ssh_support.lib.backends.svn import SubversionTunnelWrapper |
|
176 | from rhodecode.apps.ssh_support.lib.backends.svn import SubversionTunnelWrapper |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -37,7 +37,7 b' log = logging.getLogger(__name__)' | |||||
37 |
|
37 | |||
38 | def write_mod_dav_svn_config(settings): |
|
38 | def write_mod_dav_svn_config(settings): | |
39 | use_ssl = str2bool(settings['force_https']) |
|
39 | use_ssl = str2bool(settings['force_https']) | |
40 |
|
40 | file_path = settings[config_keys.config_file_path] | ||
41 | config = _render_mod_dav_svn_config( |
|
41 | config = _render_mod_dav_svn_config( | |
42 | use_ssl=use_ssl, |
|
42 | use_ssl=use_ssl, | |
43 | parent_path_root=get_rhodecode_base_path(), |
|
43 | parent_path_root=get_rhodecode_base_path(), | |
@@ -45,7 +45,8 b' def write_mod_dav_svn_config(settings):' | |||||
45 | location_root=settings[config_keys.location_root], |
|
45 | location_root=settings[config_keys.location_root], | |
46 | repo_groups=RepoGroup.get_all_repo_groups(), |
|
46 | repo_groups=RepoGroup.get_all_repo_groups(), | |
47 | realm=get_rhodecode_realm(), template=settings[config_keys.template]) |
|
47 | realm=get_rhodecode_realm(), template=settings[config_keys.template]) | |
48 |
_write_mod_dav_svn_config(config, |
|
48 | _write_mod_dav_svn_config(config, file_path) | |
|
49 | return file_path | |||
49 |
|
50 | |||
50 |
|
51 | |||
51 | def generate_mod_dav_svn_config(registry): |
|
52 | def generate_mod_dav_svn_config(registry): | |
@@ -56,11 +57,11 b' def generate_mod_dav_svn_config(registry' | |||||
56 | repositories organized in sub folders. |
|
57 | repositories organized in sub folders. | |
57 | """ |
|
58 | """ | |
58 | settings = registry.settings |
|
59 | settings = registry.settings | |
59 | write_mod_dav_svn_config(settings) |
|
60 | file_path = write_mod_dav_svn_config(settings) | |
60 |
|
61 | |||
61 | # Trigger an event on mod dav svn configuration change. |
|
62 | # Trigger an event on mod dav svn configuration change. | |
62 | trigger(ModDavSvnConfigChange(), registry) |
|
63 | trigger(ModDavSvnConfigChange(), registry) | |
63 |
|
64 | return file_path | ||
64 |
|
65 | |||
65 | def _render_mod_dav_svn_config( |
|
66 | def _render_mod_dav_svn_config( | |
66 | parent_path_root, list_parent_path, location_root, repo_groups, realm, |
|
67 | parent_path_root, list_parent_path, location_root, repo_groups, realm, |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -153,25 +153,25 b' class CrowdServer(object):' | |||||
153 | global msg |
|
153 | global msg | |
154 | msg = "" |
|
154 | msg = "" | |
155 | try: |
|
155 | try: | |
156 | rdoc = self.opener.open(request) |
|
156 | ret_doc = self.opener.open(request) | |
157 |
msg = |
|
157 | msg = ret_doc.read() | |
158 | if not msg and empty_response_ok: |
|
158 | if not msg and empty_response_ok: | |
159 | rval = {} |
|
159 | ret_val = {} | |
160 | rval["status"] = True |
|
160 | ret_val["status"] = True | |
161 | rval["error"] = "Response body was empty" |
|
161 | ret_val["error"] = "Response body was empty" | |
162 | elif not noformat: |
|
162 | elif not noformat: | |
163 | rval = json.loads(msg) |
|
163 | ret_val = json.loads(msg) | |
164 | rval["status"] = True |
|
164 | ret_val["status"] = True | |
165 | else: |
|
165 | else: | |
166 |
rval = |
|
166 | ret_val = msg | |
167 | except Exception as e: |
|
167 | except Exception as e: | |
168 | if not noformat: |
|
168 | if not noformat: | |
169 | rval = {"status": False, |
|
169 | ret_val = {"status": False, | |
170 | "body": body, |
|
170 | "body": body, | |
171 |
"error": |
|
171 | "error": "{}\n{}".format(e, msg)} | |
172 | else: |
|
172 | else: | |
173 | rval = None |
|
173 | ret_val = None | |
174 | return rval |
|
174 | return ret_val | |
175 |
|
175 | |||
176 | def user_auth(self, username, password): |
|
176 | def user_auth(self, username, password): | |
177 | """Authenticate a user against crowd. Returns brief information about |
|
177 | """Authenticate a user against crowd. Returns brief information about |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -69,6 +69,12 b' class LdapAuthnResource(AuthnPluginResou' | |||||
69 | class AuthLdap(AuthLdapBase): |
|
69 | class AuthLdap(AuthLdapBase): | |
70 | default_tls_cert_dir = '/etc/openldap/cacerts' |
|
70 | default_tls_cert_dir = '/etc/openldap/cacerts' | |
71 |
|
71 | |||
|
72 | scope_labels = { | |||
|
73 | ldap.SCOPE_BASE: 'SCOPE_BASE', | |||
|
74 | ldap.SCOPE_ONELEVEL: 'SCOPE_ONELEVEL', | |||
|
75 | ldap.SCOPE_SUBTREE: 'SCOPE_SUBTREE', | |||
|
76 | } | |||
|
77 | ||||
72 | def __init__(self, server, base_dn, port=389, bind_dn='', bind_pass='', |
|
78 | def __init__(self, server, base_dn, port=389, bind_dn='', bind_pass='', | |
73 | tls_kind='PLAIN', tls_reqcert='DEMAND', tls_cert_file=None, |
|
79 | tls_kind='PLAIN', tls_reqcert='DEMAND', tls_cert_file=None, | |
74 | tls_cert_dir=None, ldap_version=3, |
|
80 | tls_cert_dir=None, ldap_version=3, | |
@@ -85,7 +91,7 b' class AuthLdap(AuthLdapBase):' | |||||
85 | self.TLS_KIND = tls_kind |
|
91 | self.TLS_KIND = tls_kind | |
86 |
|
92 | |||
87 | if self.TLS_KIND == 'LDAPS': |
|
93 | if self.TLS_KIND == 'LDAPS': | |
88 |
port = port or 6 |
|
94 | port = port or 636 | |
89 | self.ldap_server_type += 's' |
|
95 | self.ldap_server_type += 's' | |
90 |
|
96 | |||
91 | OPT_X_TLS_DEMAND = 2 |
|
97 | OPT_X_TLS_DEMAND = 2 | |
@@ -148,19 +154,27 b' class AuthLdap(AuthLdapBase):' | |||||
148 | log.debug('simple_bind successful') |
|
154 | log.debug('simple_bind successful') | |
149 | return ldap_conn |
|
155 | return ldap_conn | |
150 |
|
156 | |||
151 |
def fetch_attrs_from_simple_bind(self, |
|
157 | def fetch_attrs_from_simple_bind(self, ldap_conn, dn, username, password): | |
|
158 | scope = ldap.SCOPE_BASE | |||
|
159 | scope_label = self.scope_labels.get(scope) | |||
|
160 | ldap_filter = '(objectClass=*)' | |||
|
161 | ||||
152 | try: |
|
162 | try: | |
153 |
log.debug('Trying |
|
163 | log.debug('Trying authenticated search bind with dn: %r SCOPE: %s (and filter: %s)', | |
154 | server.simple_bind_s(dn, safe_str(password)) |
|
164 | dn, scope_label, ldap_filter) | |
155 | _dn, attrs = server.search_ext_s( |
|
165 | ldap_conn.simple_bind_s(dn, safe_str(password)) | |
156 | dn, ldap.SCOPE_BASE, '(objectClass=*)', )[0] |
|
166 | response = ldap_conn.search_ext_s(dn, scope, ldap_filter, attrlist=['*', '+']) | |
157 |
|
167 | |||
158 |
|
|
168 | if not response: | |
|
169 | log.error('search bind returned empty results: %r', response) | |||
|
170 | return {} | |||
|
171 | else: | |||
|
172 | _dn, attrs = response[0] | |||
|
173 | return attrs | |||
159 |
|
174 | |||
160 | except ldap.INVALID_CREDENTIALS: |
|
175 | except ldap.INVALID_CREDENTIALS: | |
161 | log.debug( |
|
176 | log.debug("LDAP rejected password for user '%s': %s, org_exc:", | |
162 | "LDAP rejected password for user '%s': %s, org_exc:", |
|
177 | username, dn, exc_info=True) | |
163 | username, dn, exc_info=True) |
|
|||
164 |
|
178 | |||
165 | def authenticate_ldap(self, username, password): |
|
179 | def authenticate_ldap(self, username, password): | |
166 | """ |
|
180 | """ | |
@@ -179,35 +193,38 b' class AuthLdap(AuthLdapBase):' | |||||
179 |
|
193 | |||
180 | self.validate_password(username, password) |
|
194 | self.validate_password(username, password) | |
181 | self.validate_username(username) |
|
195 | self.validate_username(username) | |
|
196 | scope_label = self.scope_labels.get(self.SEARCH_SCOPE) | |||
182 |
|
197 | |||
183 | ldap_conn = None |
|
198 | ldap_conn = None | |
184 | try: |
|
199 | try: | |
185 | ldap_conn = self._get_ldap_conn() |
|
200 | ldap_conn = self._get_ldap_conn() | |
186 | filter_ = '(&%s(%s=%s))' % ( |
|
201 | filter_ = '(&%s(%s=%s))' % ( | |
187 | self.LDAP_FILTER, self.attr_login, username) |
|
202 | self.LDAP_FILTER, self.attr_login, username) | |
188 |
log.debug("Authenticating %r filter %s", |
|
203 | log.debug("Authenticating %r filter %s and scope: %s", | |
|
204 | self.BASE_DN, filter_, scope_label) | |||
189 |
|
205 | |||
190 | lobjects = ldap_conn.search_ext_s( |
|
206 | ldap_objects = ldap_conn.search_ext_s( | |
191 | self.BASE_DN, self.SEARCH_SCOPE, filter_) |
|
207 | self.BASE_DN, self.SEARCH_SCOPE, filter_, attrlist=['*', '+']) | |
192 |
|
208 | |||
193 | if not lobjects: |
|
209 | if not ldap_objects: | |
194 | log.debug("No matching LDAP objects for authentication " |
|
210 | log.debug("No matching LDAP objects for authentication " | |
195 | "of UID:'%s' username:(%s)", uid, username) |
|
211 | "of UID:'%s' username:(%s)", uid, username) | |
196 | raise ldap.NO_SUCH_OBJECT() |
|
212 | raise ldap.NO_SUCH_OBJECT() | |
197 |
|
213 | |||
198 | log.debug('Found matching ldap object, trying to authenticate') |
|
214 | log.debug('Found %s matching ldap object[s], trying to authenticate on each one now...', len(ldap_objects)) | |
199 | for (dn, _attrs) in lobjects: |
|
215 | for (dn, _attrs) in ldap_objects: | |
200 | if dn is None: |
|
216 | if dn is None: | |
201 | continue |
|
217 | continue | |
202 |
|
218 | |||
203 | user_attrs = self.fetch_attrs_from_simple_bind( |
|
219 | user_attrs = self.fetch_attrs_from_simple_bind( | |
204 | ldap_conn, dn, username, password) |
|
220 | ldap_conn, dn, username, password) | |
|
221 | ||||
205 | if user_attrs: |
|
222 | if user_attrs: | |
|
223 | log.debug('Got authenticated user attributes from DN:%s', dn) | |||
206 | break |
|
224 | break | |
207 | else: |
|
225 | else: | |
208 | raise LdapPasswordError( |
|
226 | raise LdapPasswordError( | |
209 | 'Failed to authenticate user `{}` ' |
|
227 | 'Failed to authenticate user `{}` with given password'.format(username)) | |
210 | 'with given password'.format(username)) |
|
|||
211 |
|
228 | |||
212 | except ldap.NO_SUCH_OBJECT: |
|
229 | except ldap.NO_SUCH_OBJECT: | |
213 | log.debug("LDAP says no such user '%s' (%s), org_exc:", |
|
230 | log.debug("LDAP says no such user '%s' (%s), org_exc:", | |
@@ -216,8 +233,7 b' class AuthLdap(AuthLdapBase):' | |||||
216 | except ldap.SERVER_DOWN: |
|
233 | except ldap.SERVER_DOWN: | |
217 | org_exc = traceback.format_exc() |
|
234 | org_exc = traceback.format_exc() | |
218 | raise LdapConnectionError( |
|
235 | raise LdapConnectionError( | |
219 | "LDAP can't access authentication " |
|
236 | "LDAP can't access authentication server, org_exc:%s" % org_exc) | |
220 | "server, org_exc:%s" % org_exc) |
|
|||
221 | finally: |
|
237 | finally: | |
222 | if ldap_conn: |
|
238 | if ldap_conn: | |
223 | log.debug('ldap: connection release') |
|
239 | log.debug('ldap: connection release') | |
@@ -249,7 +265,7 b' class LdapSettingsSchema(AuthnPluginSett' | |||||
249 | colander.Int(), |
|
265 | colander.Int(), | |
250 | default=389, |
|
266 | default=389, | |
251 | description=_('Custom port that the LDAP server is listening on. ' |
|
267 | description=_('Custom port that the LDAP server is listening on. ' | |
252 |
'Default value is: 389, use 6 |
|
268 | 'Default value is: 389, use 636 for LDAPS (SSL)'), | |
253 | preparer=strip_whitespace, |
|
269 | preparer=strip_whitespace, | |
254 | title=_('Port'), |
|
270 | title=_('Port'), | |
255 | validator=colander.Range(min=0, max=65536), |
|
271 | validator=colander.Range(min=0, max=65536), |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2013-20 |
|
3 | # Copyright (C) 2013-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -60,10 +60,15 b' def load_pyramid_environment(global_conf' | |||||
60 |
|
60 | |||
61 | load_rcextensions(root_path=settings_merged['here']) |
|
61 | load_rcextensions(root_path=settings_merged['here']) | |
62 |
|
62 | |||
63 | # Limit backends to `vcs.backends` from configuration |
|
63 | # Limit backends to `vcs.backends` from configuration, and preserve the order | |
64 | for alias in rhodecode.BACKENDS.keys(): |
|
64 | for alias in rhodecode.BACKENDS.keys(): | |
65 | if alias not in settings['vcs.backends']: |
|
65 | if alias not in settings['vcs.backends']: | |
66 | del rhodecode.BACKENDS[alias] |
|
66 | del rhodecode.BACKENDS[alias] | |
|
67 | ||||
|
68 | _sorted_backend = sorted(rhodecode.BACKENDS.items(), | |||
|
69 | key=lambda item: settings['vcs.backends'].index(item[0])) | |||
|
70 | rhodecode.BACKENDS = rhodecode.OrderedDict(_sorted_backend) | |||
|
71 | ||||
67 | log.info('Enabled VCS backends: %s', rhodecode.BACKENDS.keys()) |
|
72 | log.info('Enabled VCS backends: %s', rhodecode.BACKENDS.keys()) | |
68 |
|
73 | |||
69 | # initialize vcs client and optionally run the server if enabled |
|
74 | # initialize vcs client and optionally run the server if enabled | |
@@ -76,6 +81,7 b' def load_pyramid_environment(global_conf' | |||||
76 |
|
81 | |||
77 | rhodecode.PYRAMID_SETTINGS = settings_merged |
|
82 | rhodecode.PYRAMID_SETTINGS = settings_merged | |
78 | rhodecode.CONFIG = settings_merged |
|
83 | rhodecode.CONFIG = settings_merged | |
|
84 | rhodecode.CONFIG['default_user_id'] = utils.get_default_user_id() | |||
79 |
|
85 | |||
80 | if vcs_server_enabled: |
|
86 | if vcs_server_enabled: | |
81 | connect_vcs(vcs_server_uri, utils.get_vcs_server_protocol(settings)) |
|
87 | connect_vcs(vcs_server_uri, utils.get_vcs_server_protocol(settings)) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -611,6 +611,14 b' def _sanitize_cache_settings(settings):' | |||||
611 | settings, |
|
611 | settings, | |
612 | 'exception_tracker.store_path', |
|
612 | 'exception_tracker.store_path', | |
613 | temp_store, lower=False, default_when_empty=True) |
|
613 | temp_store, lower=False, default_when_empty=True) | |
|
614 | _bool_setting( | |||
|
615 | settings, | |||
|
616 | 'exception_tracker.send_email', | |||
|
617 | 'false') | |||
|
618 | _string_setting( | |||
|
619 | settings, | |||
|
620 | 'exception_tracker.email_prefix', | |||
|
621 | '[RHODECODE ERROR]', lower=False, default_when_empty=True) | |||
614 |
|
622 | |||
615 | # cache_perms |
|
623 | # cache_perms | |
616 | _string_setting( |
|
624 | _string_setting( |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -25,6 +25,7 b' from .hooks import (' | |||||
25 | _create_repo_group_hook, |
|
25 | _create_repo_group_hook, | |
26 | _pre_create_user_hook, |
|
26 | _pre_create_user_hook, | |
27 | _create_user_hook, |
|
27 | _create_user_hook, | |
|
28 | _comment_commit_repo_hook, | |||
28 | _delete_repo_hook, |
|
29 | _delete_repo_hook, | |
29 | _delete_user_hook, |
|
30 | _delete_user_hook, | |
30 | _pre_push_hook, |
|
31 | _pre_push_hook, | |
@@ -33,6 +34,7 b' from .hooks import (' | |||||
33 | _pull_hook, |
|
34 | _pull_hook, | |
34 | _create_pull_request_hook, |
|
35 | _create_pull_request_hook, | |
35 | _review_pull_request_hook, |
|
36 | _review_pull_request_hook, | |
|
37 | _comment_pull_request_hook, | |||
36 | _update_pull_request_hook, |
|
38 | _update_pull_request_hook, | |
37 | _merge_pull_request_hook, |
|
39 | _merge_pull_request_hook, | |
38 | _close_pull_request_hook, |
|
40 | _close_pull_request_hook, | |
@@ -40,6 +42,7 b' from .hooks import (' | |||||
40 |
|
42 | |||
41 | # set as module attributes, we use those to call hooks. *do not change this* |
|
43 | # set as module attributes, we use those to call hooks. *do not change this* | |
42 | CREATE_REPO_HOOK = _create_repo_hook |
|
44 | CREATE_REPO_HOOK = _create_repo_hook | |
|
45 | COMMENT_COMMIT_REPO_HOOK = _comment_commit_repo_hook | |||
43 | CREATE_REPO_GROUP_HOOK = _create_repo_group_hook |
|
46 | CREATE_REPO_GROUP_HOOK = _create_repo_group_hook | |
44 | PRE_CREATE_USER_HOOK = _pre_create_user_hook |
|
47 | PRE_CREATE_USER_HOOK = _pre_create_user_hook | |
45 | CREATE_USER_HOOK = _create_user_hook |
|
48 | CREATE_USER_HOOK = _create_user_hook | |
@@ -51,6 +54,7 b' PRE_PULL_HOOK = _pre_pull_hook' | |||||
51 | PULL_HOOK = _pull_hook |
|
54 | PULL_HOOK = _pull_hook | |
52 | CREATE_PULL_REQUEST = _create_pull_request_hook |
|
55 | CREATE_PULL_REQUEST = _create_pull_request_hook | |
53 | REVIEW_PULL_REQUEST = _review_pull_request_hook |
|
56 | REVIEW_PULL_REQUEST = _review_pull_request_hook | |
|
57 | COMMENT_PULL_REQUEST = _comment_pull_request_hook | |||
54 | UPDATE_PULL_REQUEST = _update_pull_request_hook |
|
58 | UPDATE_PULL_REQUEST = _update_pull_request_hook | |
55 | MERGE_PULL_REQUEST = _merge_pull_request_hook |
|
59 | MERGE_PULL_REQUEST = _merge_pull_request_hook | |
56 | CLOSE_PULL_REQUEST = _close_pull_request_hook |
|
60 | CLOSE_PULL_REQUEST = _close_pull_request_hook |
@@ -24,14 +24,13 b' def _push_hook(*args, **kwargs):' | |||||
24 | # returns list of dicts with key-val fetched from extra fields |
|
24 | # returns list of dicts with key-val fetched from extra fields | |
25 | repo_extra_fields = extra_fields.run(**kwargs) |
|
25 | repo_extra_fields = extra_fields.run(**kwargs) | |
26 |
|
26 | |||
27 | if repo_extra_fields.get('endpoint_url'): |
|
27 | endpoint_url = extra_fields.get_field(repo_extra_fields, key='endpoint_url', default='') | |
28 | field_metadata = repo_extra_fields['endpoint_url'] |
|
28 | ||
29 | endpoint = field_metadata['field_value'] |
|
29 | if endpoint_url: | |
30 | if endpoint: |
|
30 | data = { | |
31 | data = { |
|
31 | 'project': kwargs['repository'], | |
32 | 'project': kwargs['repository'], |
|
32 | } | |
33 | } |
|
33 | response = http_call.run(url=endpoint_url, params=data) | |
34 | response = http_call.run(url=endpoint, params=data) |
|
34 | return HookResponse(0, 'Called endpoint {}, with response {}\n'.format(endpoint_url, response)) | |
35 | return HookResponse(0, 'Called endpoint {}, with response {}\n'.format(endpoint, response)) |
|
|||
36 |
|
35 | |||
37 | return HookResponse(0, '') |
|
36 | return HookResponse(0, '') |
@@ -24,14 +24,12 b' def _push_hook(*args, **kwargs):' | |||||
24 | # returns list of dicts with key-val fetched from extra fields |
|
24 | # returns list of dicts with key-val fetched from extra fields | |
25 | repo_extra_fields = extra_fields.run(**kwargs) |
|
25 | repo_extra_fields = extra_fields.run(**kwargs) | |
26 |
|
26 | |||
27 | if repo_extra_fields.get('endpoint_url'): |
|
27 | endpoint_url = extra_fields.get_field(repo_extra_fields, key='endpoint_url', default='') | |
28 | field_metadata = repo_extra_fields['endpoint_url'] |
|
28 | if endpoint_url: | |
29 | endpoint = field_metadata['field_value'] |
|
29 | data = { | |
30 | if endpoint: |
|
30 | 'some_key': 'val' | |
31 | data = { |
|
31 | } | |
32 | 'some_key': 'val' |
|
32 | response = http_call.run(url=endpoint_url, json_data=data) | |
33 | } |
|
33 | return HookResponse(0, 'Called endpoint {}, with response {}'.format(endpoint_url, response)) | |
34 | response = http_call.run(url=endpoint, json_data=data) |
|
|||
35 | return HookResponse(0, 'Called endpoint {}, with response {}'.format(endpoint, response)) |
|
|||
36 |
|
34 | |||
37 | return HookResponse(0, '') |
|
35 | return HookResponse(0, '') |
@@ -41,11 +41,13 b' def _pre_push_hook(*args, **kwargs):' | |||||
41 | repo_extra_fields = extra_fields.run(**kwargs) |
|
41 | repo_extra_fields = extra_fields.run(**kwargs) | |
42 |
|
42 | |||
43 | # optionally use 'extra fields' to control the logic per repo |
|
43 | # optionally use 'extra fields' to control the logic per repo | |
44 |
validate_author = |
|
44 | validate_author = extra_fields.get_field( | |
|
45 | repo_extra_fields, key='validate_author', default=False) | |||
45 | should_validate = str2bool(validate_author) |
|
46 | should_validate = str2bool(validate_author) | |
46 |
|
47 | |||
47 | # optionally store validation regex into extra fields |
|
48 | # optionally store validation regex into extra fields | |
48 |
validation_regex = |
|
49 | validation_regex = extra_fields.get_field( | |
|
50 | repo_extra_fields, key='validation_regex', default='') | |||
49 |
|
51 | |||
50 | def validate_commit_message(commit_message, message_regex=None): |
|
52 | def validate_commit_message(commit_message, message_regex=None): | |
51 | """ |
|
53 | """ |
@@ -44,13 +44,16 b' def _pre_push_hook(*args, **kwargs):' | |||||
44 |
|
44 | |||
45 | # optionally use 'extra fields' to control the logic per repo |
|
45 | # optionally use 'extra fields' to control the logic per repo | |
46 | # e.g store a list of patterns to be forbidden e.g `*.exe, *.dump` |
|
46 | # e.g store a list of patterns to be forbidden e.g `*.exe, *.dump` | |
47 |
forbid_files = repo_extra_fields |
|
47 | forbid_files = extra_fields.get_field(repo_extra_fields, key='forbid_files_glob', | |
|
48 | convert_type=False, default=[]) | |||
48 | forbid_files = aslist(forbid_files) |
|
49 | forbid_files = aslist(forbid_files) | |
49 |
|
50 | |||
50 | # forbid_files = ['*'] # example pattern |
|
51 | # forbid_files = ['*'] # example pattern | |
51 |
|
52 | |||
52 | # optionally get bytes limit for a single file, e.g 1024 for 1KB |
|
53 | # optionally get bytes limit for a single file, e.g 1024 for 1KB | |
53 |
forbid_size_over = repo_extra_fields |
|
54 | forbid_size_over = extra_fields.get_field(repo_extra_fields, key='forbid_size_over', | |
|
55 | convert_type=False, default=0) | |||
|
56 | ||||
54 | forbid_size_over = int(forbid_size_over or 0) |
|
57 | forbid_size_over = int(forbid_size_over or 0) | |
55 |
|
58 | |||
56 | # forbid_size_over = 1024 # example 1024 |
|
59 | # forbid_size_over = 1024 # example 1024 |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,5 +1,5 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
# Copyright (C) 2016-20 |
|
2 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
3 | # |
|
3 | # | |
4 | # This program is free software: you can redistribute it and/or modify |
|
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU Affero General Public License, version 3 |
|
5 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -53,3 +53,36 b' def run(*args, **kwargs):' | |||||
53 | fields[field.field_key] = field.get_dict() |
|
53 | fields[field.field_key] = field.get_dict() | |
54 |
|
54 | |||
55 | return fields |
|
55 | return fields | |
|
56 | ||||
|
57 | ||||
|
58 | class _Undefined(object): | |||
|
59 | pass | |||
|
60 | ||||
|
61 | ||||
|
62 | def get_field(extra_fields_data, key, default=_Undefined(), convert_type=True): | |||
|
63 | """ | |||
|
64 | field_value = get_field(extra_fields, key='ci_endpoint_url', default='') | |||
|
65 | """ | |||
|
66 | from ..utils import str2bool, aslist | |||
|
67 | ||||
|
68 | if key not in extra_fields_data: | |||
|
69 | if isinstance(default, _Undefined): | |||
|
70 | raise ValueError('key {} not present in extra_fields'.format(key)) | |||
|
71 | return default | |||
|
72 | ||||
|
73 | # NOTE(dan): from metadata we get field_label, field_value, field_desc, field_type | |||
|
74 | field_metadata = extra_fields_data[key] | |||
|
75 | ||||
|
76 | field_value = field_metadata['field_value'] | |||
|
77 | ||||
|
78 | # NOTE(dan): empty value, use default | |||
|
79 | if not field_value and not isinstance(default, _Undefined): | |||
|
80 | return default | |||
|
81 | ||||
|
82 | if convert_type: | |||
|
83 | # 'str', 'unicode', 'list', 'tuple' | |||
|
84 | _type = field_metadata['field_type'] | |||
|
85 | if _type in ['list', 'tuple']: | |||
|
86 | field_value = aslist(field_value) | |||
|
87 | ||||
|
88 | return field_value |
@@ -1,5 +1,5 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
# Copyright (C) 2016-20 |
|
2 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
3 | # |
|
3 | # | |
4 | # This program is free software: you can redistribute it and/or modify |
|
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU Affero General Public License, version 3 |
|
5 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,5 +1,5 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
# Copyright (C) 2016-20 |
|
2 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
3 | # |
|
3 | # | |
4 | # This program is free software: you can redistribute it and/or modify |
|
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU Affero General Public License, version 3 |
|
5 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,5 +1,5 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
# Copyright (C) 2016-20 |
|
2 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
3 | # |
|
3 | # | |
4 | # This program is free software: you can redistribute it and/or modify |
|
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU Affero General Public License, version 3 |
|
5 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,5 +1,5 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
# Copyright (C) 2016-20 |
|
2 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
3 | # |
|
3 | # | |
4 | # This program is free software: you can redistribute it and/or modify |
|
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU Affero General Public License, version 3 |
|
5 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -15,11 +15,12 b'' | |||||
15 | # This program is dual-licensed. If you wish to learn more about the |
|
15 | # This program is dual-licensed. If you wish to learn more about the | |
16 | # RhodeCode Enterprise Edition, including its added features, Support services, |
|
16 | # RhodeCode Enterprise Edition, including its added features, Support services, | |
17 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
17 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |
|
18 | ||||
18 | import logging |
|
19 | import logging | |
19 | from .utils import DotDict, HookResponse, has_kwargs |
|
20 | from .utils import DotDict, HookResponse, has_kwargs | |
|
21 | ||||
20 | log = logging.getLogger('rhodecode.' + __name__) |
|
22 | log = logging.getLogger('rhodecode.' + __name__) | |
21 |
|
23 | |||
22 |
|
||||
23 | # Config shortcut to keep, all configuration in one place |
|
24 | # Config shortcut to keep, all configuration in one place | |
24 | # Example: api_key = CONFIG.my_config.api_key |
|
25 | # Example: api_key = CONFIG.my_config.api_key | |
25 | CONFIG = DotDict( |
|
26 | CONFIG = DotDict( | |
@@ -55,13 +56,40 b' def _create_repo_hook(*args, **kwargs):' | |||||
55 |
|
56 | |||
56 |
|
57 | |||
57 | @has_kwargs({ |
|
58 | @has_kwargs({ | |
58 |
' |
|
59 | 'repo_name': '', | |
59 | 'group_parent_id': '', |
|
60 | 'repo_type': '', | |
|
61 | 'description': '', | |||
|
62 | 'private': '', | |||
|
63 | 'created_on': '', | |||
|
64 | 'enable_downloads': '', | |||
|
65 | 'repo_id': '', | |||
|
66 | 'user_id': '', | |||
|
67 | 'enable_statistics': '', | |||
|
68 | 'clone_uri': '', | |||
|
69 | 'fork_id': '', | |||
|
70 | 'group_id': '', | |||
|
71 | 'created_by': '', | |||
|
72 | 'repository': '', | |||
|
73 | 'comment': '', | |||
|
74 | 'commit': '' | |||
|
75 | }) | |||
|
76 | def _comment_commit_repo_hook(*args, **kwargs): | |||
|
77 | """ | |||
|
78 | POST CREATE REPOSITORY COMMENT ON COMMIT HOOK. This function will be executed after | |||
|
79 | a comment is made on this repository commit. | |||
|
80 | ||||
|
81 | """ | |||
|
82 | return HookResponse(0, '') | |||
|
83 | ||||
|
84 | ||||
|
85 | @has_kwargs({ | |||
|
86 | 'group_name': '', | |||
|
87 | 'group_parent_id': '', | |||
60 | 'group_description': '', |
|
88 | 'group_description': '', | |
61 |
'group_id': '', |
|
89 | 'group_id': '', | |
62 |
'user_id': '', |
|
90 | 'user_id': '', | |
63 |
'created_by': '', |
|
91 | 'created_by': '', | |
64 |
'created_on': '', |
|
92 | 'created_on': '', | |
65 | 'enable_locking': '' |
|
93 | 'enable_locking': '' | |
66 | }) |
|
94 | }) | |
67 | def _create_repo_group_hook(*args, **kwargs): |
|
95 | def _create_repo_group_hook(*args, **kwargs): | |
@@ -73,13 +101,13 b' def _create_repo_group_hook(*args, **kwa' | |||||
73 |
|
101 | |||
74 |
|
102 | |||
75 | @has_kwargs({ |
|
103 | @has_kwargs({ | |
76 |
'username': '', |
|
104 | 'username': '', | |
77 |
'password': '', |
|
105 | 'password': '', | |
78 |
'email': '', |
|
106 | 'email': '', | |
79 | 'firstname': '', |
|
107 | 'firstname': '', | |
80 |
'lastname': '', |
|
108 | 'lastname': '', | |
81 |
'active': '', |
|
109 | 'active': '', | |
82 |
'admin': '', |
|
110 | 'admin': '', | |
83 | 'created_by': '', |
|
111 | 'created_by': '', | |
84 | }) |
|
112 | }) | |
85 | def _pre_create_user_hook(*args, **kwargs): |
|
113 | def _pre_create_user_hook(*args, **kwargs): | |
@@ -173,7 +201,7 b' def _delete_repo_hook(*args, **kwargs):' | |||||
173 | 'emails': '', |
|
201 | 'emails': '', | |
174 | 'inherit_default_permissions': '', |
|
202 | 'inherit_default_permissions': '', | |
175 | 'deleted_by': '', |
|
203 | 'deleted_by': '', | |
176 |
|
|
204 | }) | |
177 | def _delete_user_hook(*args, **kwargs): |
|
205 | def _delete_user_hook(*args, **kwargs): | |
178 | """ |
|
206 | """ | |
179 | POST DELETE USER HOOK, this function will be executed after each |
|
207 | POST DELETE USER HOOK, this function will be executed after each | |
@@ -348,6 +376,38 b' def _review_pull_request_hook(*args, **k' | |||||
348 | 'scm': 'type of version control "git", "hg", "svn"', |
|
376 | 'scm': 'type of version control "git", "hg", "svn"', | |
349 | 'username': 'username of actor who triggered this event', |
|
377 | 'username': 'username of actor who triggered this event', | |
350 | 'ip': 'ip address of actor who triggered this hook', |
|
378 | 'ip': 'ip address of actor who triggered this hook', | |
|
379 | ||||
|
380 | 'action': '', | |||
|
381 | 'repository': 'repository name', | |||
|
382 | 'pull_request_id': '', | |||
|
383 | 'url': '', | |||
|
384 | 'title': '', | |||
|
385 | 'description': '', | |||
|
386 | 'status': '', | |||
|
387 | 'comment': '', | |||
|
388 | 'created_on': '', | |||
|
389 | 'updated_on': '', | |||
|
390 | 'commit_ids': '', | |||
|
391 | 'review_status': '', | |||
|
392 | 'mergeable': '', | |||
|
393 | 'source': '', | |||
|
394 | 'target': '', | |||
|
395 | 'author': '', | |||
|
396 | 'reviewers': '', | |||
|
397 | }) | |||
|
398 | def _comment_pull_request_hook(*args, **kwargs): | |||
|
399 | """ | |||
|
400 | This hook will be executed after comment is made on a pull request | |||
|
401 | """ | |||
|
402 | return HookResponse(0, '') | |||
|
403 | ||||
|
404 | ||||
|
405 | @has_kwargs({ | |||
|
406 | 'server_url': 'url of instance that triggered this hook', | |||
|
407 | 'config': 'path to .ini config used', | |||
|
408 | 'scm': 'type of version control "git", "hg", "svn"', | |||
|
409 | 'username': 'username of actor who triggered this event', | |||
|
410 | 'ip': 'ip address of actor who triggered this hook', | |||
351 | 'action': '', |
|
411 | 'action': '', | |
352 | 'repository': 'repository name', |
|
412 | 'repository': 'repository name', | |
353 | 'pull_request_id': '', |
|
413 | 'pull_request_id': '', |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -18,8 +18,10 b'' | |||||
18 |
|
18 | |||
19 | import logging |
|
19 | import logging | |
20 | import os |
|
20 | import os | |
|
21 | import string | |||
21 | import functools |
|
22 | import functools | |
22 | import collections |
|
23 | import collections | |
|
24 | import urllib | |||
23 |
|
25 | |||
24 | log = logging.getLogger('rhodecode.' + __name__) |
|
26 | log = logging.getLogger('rhodecode.' + __name__) | |
25 |
|
27 | |||
@@ -186,4 +188,12 b' def aslist(obj, sep=None, strip=True):' | |||||
186 | elif obj is None: |
|
188 | elif obj is None: | |
187 | return [] |
|
189 | return [] | |
188 | else: |
|
190 | else: | |
189 | return [obj] No newline at end of file |
|
191 | return [obj] | |
|
192 | ||||
|
193 | ||||
|
194 | class UrlTemplate(string.Template): | |||
|
195 | ||||
|
196 | def safe_substitute(self, **kws): | |||
|
197 | # url encode the kw for usage in url | |||
|
198 | kws = {k: urllib.quote(str(v)) for k, v in kws.items()} | |||
|
199 | return super(UrlTemplate, self).safe_substitute(**kws) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -19,7 +19,6 b'' | |||||
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |
20 |
|
20 | |||
21 | import os |
|
21 | import os | |
22 | import shlex |
|
|||
23 | import platform |
|
22 | import platform | |
24 |
|
23 | |||
25 | from rhodecode.model import init_model |
|
24 | from rhodecode.model import init_model | |
@@ -91,3 +90,12 b' def set_instance_id(config):' | |||||
91 | prefix = instance_id.lstrip('*') |
|
90 | prefix = instance_id.lstrip('*') | |
92 | _platform_id = platform.uname()[1] or 'instance' |
|
91 | _platform_id = platform.uname()[1] or 'instance' | |
93 | config['instance_id'] = '%s%s-%s' % (prefix, _platform_id, os.getpid()) |
|
92 | config['instance_id'] = '%s%s-%s' % (prefix, _platform_id, os.getpid()) | |
|
93 | ||||
|
94 | ||||
|
95 | def get_default_user_id(): | |||
|
96 | from rhodecode.model.db import User, Session | |||
|
97 | user_id = Session()\ | |||
|
98 | .query(User.user_id)\ | |||
|
99 | .filter(User.username == User.DEFAULT_USER)\ | |||
|
100 | .scalar() | |||
|
101 | return user_id |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -53,7 +53,7 b' from rhodecode.events.user import ( # p' | |||||
53 | ) |
|
53 | ) | |
54 |
|
54 | |||
55 | from rhodecode.events.repo import ( # pragma: no cover |
|
55 | from rhodecode.events.repo import ( # pragma: no cover | |
56 | RepoEvent, |
|
56 | RepoEvent, RepoCommitCommentEvent, | |
57 | RepoPreCreateEvent, RepoCreateEvent, |
|
57 | RepoPreCreateEvent, RepoCreateEvent, | |
58 | RepoPreDeleteEvent, RepoDeleteEvent, |
|
58 | RepoPreDeleteEvent, RepoDeleteEvent, | |
59 | RepoPrePushEvent, RepoPushEvent, |
|
59 | RepoPrePushEvent, RepoPushEvent, | |
@@ -75,4 +75,5 b' from rhodecode.events.pullrequest import' | |||||
75 | PullRequestReviewEvent, |
|
75 | PullRequestReviewEvent, | |
76 | PullRequestMergeEvent, |
|
76 | PullRequestMergeEvent, | |
77 | PullRequestCloseEvent, |
|
77 | PullRequestCloseEvent, | |
|
78 | PullRequestCommentEvent, | |||
78 | ) |
|
79 | ) |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -44,6 +44,9 b' class RhodecodeEvent(object):' | |||||
44 | self._request = request |
|
44 | self._request = request | |
45 | self.utc_timestamp = datetime.datetime.utcnow() |
|
45 | self.utc_timestamp = datetime.datetime.utcnow() | |
46 |
|
46 | |||
|
47 | def __repr__(self): | |||
|
48 | return '<%s:(%s)>' % (self.__class__.__name__, self.name) | |||
|
49 | ||||
47 | def get_request(self): |
|
50 | def get_request(self): | |
48 | if self._request: |
|
51 | if self._request: | |
49 | return self._request |
|
52 | return self._request | |
@@ -116,3 +119,4 b' class RhodeCodeIntegrationEvent(Rhodecod' | |||||
116 | """ |
|
119 | """ | |
117 | Special subclass for Integration events |
|
120 | Special subclass for Integration events | |
118 | """ |
|
121 | """ | |
|
122 | description = '' |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -77,6 +77,7 b' class PullRequestCreateEvent(PullRequest' | |||||
77 | """ |
|
77 | """ | |
78 | name = 'pullrequest-create' |
|
78 | name = 'pullrequest-create' | |
79 | display_name = lazy_ugettext('pullrequest created') |
|
79 | display_name = lazy_ugettext('pullrequest created') | |
|
80 | description = lazy_ugettext('Event triggered after pull request was created') | |||
80 |
|
81 | |||
81 |
|
82 | |||
82 | class PullRequestCloseEvent(PullRequestEvent): |
|
83 | class PullRequestCloseEvent(PullRequestEvent): | |
@@ -86,6 +87,7 b' class PullRequestCloseEvent(PullRequestE' | |||||
86 | """ |
|
87 | """ | |
87 | name = 'pullrequest-close' |
|
88 | name = 'pullrequest-close' | |
88 | display_name = lazy_ugettext('pullrequest closed') |
|
89 | display_name = lazy_ugettext('pullrequest closed') | |
|
90 | description = lazy_ugettext('Event triggered after pull request was closed') | |||
89 |
|
91 | |||
90 |
|
92 | |||
91 | class PullRequestUpdateEvent(PullRequestEvent): |
|
93 | class PullRequestUpdateEvent(PullRequestEvent): | |
@@ -95,6 +97,7 b' class PullRequestUpdateEvent(PullRequest' | |||||
95 | """ |
|
97 | """ | |
96 | name = 'pullrequest-update' |
|
98 | name = 'pullrequest-update' | |
97 | display_name = lazy_ugettext('pullrequest commits updated') |
|
99 | display_name = lazy_ugettext('pullrequest commits updated') | |
|
100 | description = lazy_ugettext('Event triggered after pull requests was updated') | |||
98 |
|
101 | |||
99 |
|
102 | |||
100 | class PullRequestReviewEvent(PullRequestEvent): |
|
103 | class PullRequestReviewEvent(PullRequestEvent): | |
@@ -104,6 +107,8 b' class PullRequestReviewEvent(PullRequest' | |||||
104 | """ |
|
107 | """ | |
105 | name = 'pullrequest-review' |
|
108 | name = 'pullrequest-review' | |
106 | display_name = lazy_ugettext('pullrequest review changed') |
|
109 | display_name = lazy_ugettext('pullrequest review changed') | |
|
110 | description = lazy_ugettext('Event triggered after a review status of a ' | |||
|
111 | 'pull requests has changed to other.') | |||
107 |
|
112 | |||
108 | def __init__(self, pullrequest, status): |
|
113 | def __init__(self, pullrequest, status): | |
109 | super(PullRequestReviewEvent, self).__init__(pullrequest) |
|
114 | super(PullRequestReviewEvent, self).__init__(pullrequest) | |
@@ -117,6 +122,8 b' class PullRequestMergeEvent(PullRequestE' | |||||
117 | """ |
|
122 | """ | |
118 | name = 'pullrequest-merge' |
|
123 | name = 'pullrequest-merge' | |
119 | display_name = lazy_ugettext('pullrequest merged') |
|
124 | display_name = lazy_ugettext('pullrequest merged') | |
|
125 | description = lazy_ugettext('Event triggered after a successful merge operation ' | |||
|
126 | 'was executed on a pull request') | |||
120 |
|
127 | |||
121 |
|
128 | |||
122 | class PullRequestCommentEvent(PullRequestEvent): |
|
129 | class PullRequestCommentEvent(PullRequestEvent): | |
@@ -126,6 +133,8 b' class PullRequestCommentEvent(PullReques' | |||||
126 | """ |
|
133 | """ | |
127 | name = 'pullrequest-comment' |
|
134 | name = 'pullrequest-comment' | |
128 | display_name = lazy_ugettext('pullrequest commented') |
|
135 | display_name = lazy_ugettext('pullrequest commented') | |
|
136 | description = lazy_ugettext('Event triggered after a comment was made on a code ' | |||
|
137 | 'in the pull request') | |||
129 |
|
138 | |||
130 | def __init__(self, pullrequest, comment): |
|
139 | def __init__(self, pullrequest, comment): | |
131 | super(PullRequestCommentEvent, self).__init__(pullrequest) |
|
140 | super(PullRequestCommentEvent, self).__init__(pullrequest) |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -181,6 +181,40 b' class RepoEvent(RhodeCodeIntegrationEven' | |||||
181 | return data |
|
181 | return data | |
182 |
|
182 | |||
183 |
|
183 | |||
|
184 | class RepoCommitCommentEvent(RepoEvent): | |||
|
185 | """ | |||
|
186 | An instance of this class is emitted as an :term:`event` after a comment is made | |||
|
187 | on repository commit. | |||
|
188 | """ | |||
|
189 | ||||
|
190 | name = 'repo-commit-comment' | |||
|
191 | display_name = lazy_ugettext('repository commit comment') | |||
|
192 | description = lazy_ugettext('Event triggered after a comment was made ' | |||
|
193 | 'on commit inside a repository') | |||
|
194 | ||||
|
195 | def __init__(self, repo, commit, comment): | |||
|
196 | super(RepoCommitCommentEvent, self).__init__(repo) | |||
|
197 | self.commit = commit | |||
|
198 | self.comment = comment | |||
|
199 | ||||
|
200 | def as_dict(self): | |||
|
201 | data = super(RepoCommitCommentEvent, self).as_dict() | |||
|
202 | data['commit'] = { | |||
|
203 | 'commit_id': self.commit.raw_id, | |||
|
204 | 'commit_message': self.commit.message, | |||
|
205 | 'commit_branch': self.commit.branch, | |||
|
206 | } | |||
|
207 | ||||
|
208 | data['comment'] = { | |||
|
209 | 'comment_id': self.comment.comment_id, | |||
|
210 | 'comment_text': self.comment.text, | |||
|
211 | 'comment_type': self.comment.comment_type, | |||
|
212 | 'comment_f_path': self.comment.f_path, | |||
|
213 | 'comment_line_no': self.comment.line_no, | |||
|
214 | } | |||
|
215 | return data | |||
|
216 | ||||
|
217 | ||||
184 | class RepoPreCreateEvent(RepoEvent): |
|
218 | class RepoPreCreateEvent(RepoEvent): | |
185 | """ |
|
219 | """ | |
186 | An instance of this class is emitted as an :term:`event` before a repo is |
|
220 | An instance of this class is emitted as an :term:`event` before a repo is | |
@@ -188,6 +222,7 b' class RepoPreCreateEvent(RepoEvent):' | |||||
188 | """ |
|
222 | """ | |
189 | name = 'repo-pre-create' |
|
223 | name = 'repo-pre-create' | |
190 | display_name = lazy_ugettext('repository pre create') |
|
224 | display_name = lazy_ugettext('repository pre create') | |
|
225 | description = lazy_ugettext('Event triggered before repository is created') | |||
191 |
|
226 | |||
192 |
|
227 | |||
193 | class RepoCreateEvent(RepoEvent): |
|
228 | class RepoCreateEvent(RepoEvent): | |
@@ -197,6 +232,7 b' class RepoCreateEvent(RepoEvent):' | |||||
197 | """ |
|
232 | """ | |
198 | name = 'repo-create' |
|
233 | name = 'repo-create' | |
199 | display_name = lazy_ugettext('repository created') |
|
234 | display_name = lazy_ugettext('repository created') | |
|
235 | description = lazy_ugettext('Event triggered after repository was created') | |||
200 |
|
236 | |||
201 |
|
237 | |||
202 | class RepoPreDeleteEvent(RepoEvent): |
|
238 | class RepoPreDeleteEvent(RepoEvent): | |
@@ -206,6 +242,7 b' class RepoPreDeleteEvent(RepoEvent):' | |||||
206 | """ |
|
242 | """ | |
207 | name = 'repo-pre-delete' |
|
243 | name = 'repo-pre-delete' | |
208 | display_name = lazy_ugettext('repository pre delete') |
|
244 | display_name = lazy_ugettext('repository pre delete') | |
|
245 | description = lazy_ugettext('Event triggered before a repository is deleted') | |||
209 |
|
246 | |||
210 |
|
247 | |||
211 | class RepoDeleteEvent(RepoEvent): |
|
248 | class RepoDeleteEvent(RepoEvent): | |
@@ -215,6 +252,7 b' class RepoDeleteEvent(RepoEvent):' | |||||
215 | """ |
|
252 | """ | |
216 | name = 'repo-delete' |
|
253 | name = 'repo-delete' | |
217 | display_name = lazy_ugettext('repository deleted') |
|
254 | display_name = lazy_ugettext('repository deleted') | |
|
255 | description = lazy_ugettext('Event triggered after repository was deleted') | |||
218 |
|
256 | |||
219 |
|
257 | |||
220 | class RepoVCSEvent(RepoEvent): |
|
258 | class RepoVCSEvent(RepoEvent): | |
@@ -255,6 +293,7 b' class RepoPrePullEvent(RepoVCSEvent):' | |||||
255 | """ |
|
293 | """ | |
256 | name = 'repo-pre-pull' |
|
294 | name = 'repo-pre-pull' | |
257 | display_name = lazy_ugettext('repository pre pull') |
|
295 | display_name = lazy_ugettext('repository pre pull') | |
|
296 | description = lazy_ugettext('Event triggered before repository code is pulled') | |||
258 |
|
297 | |||
259 |
|
298 | |||
260 | class RepoPullEvent(RepoVCSEvent): |
|
299 | class RepoPullEvent(RepoVCSEvent): | |
@@ -264,6 +303,7 b' class RepoPullEvent(RepoVCSEvent):' | |||||
264 | """ |
|
303 | """ | |
265 | name = 'repo-pull' |
|
304 | name = 'repo-pull' | |
266 | display_name = lazy_ugettext('repository pull') |
|
305 | display_name = lazy_ugettext('repository pull') | |
|
306 | description = lazy_ugettext('Event triggered after repository code was pulled') | |||
267 |
|
307 | |||
268 |
|
308 | |||
269 | class RepoPrePushEvent(RepoVCSEvent): |
|
309 | class RepoPrePushEvent(RepoVCSEvent): | |
@@ -273,6 +313,8 b' class RepoPrePushEvent(RepoVCSEvent):' | |||||
273 | """ |
|
313 | """ | |
274 | name = 'repo-pre-push' |
|
314 | name = 'repo-pre-push' | |
275 | display_name = lazy_ugettext('repository pre push') |
|
315 | display_name = lazy_ugettext('repository pre push') | |
|
316 | description = lazy_ugettext('Event triggered before the code is ' | |||
|
317 | 'pushed to a repository') | |||
276 |
|
318 | |||
277 |
|
319 | |||
278 | class RepoPushEvent(RepoVCSEvent): |
|
320 | class RepoPushEvent(RepoVCSEvent): | |
@@ -284,6 +326,8 b' class RepoPushEvent(RepoVCSEvent):' | |||||
284 | """ |
|
326 | """ | |
285 | name = 'repo-push' |
|
327 | name = 'repo-push' | |
286 | display_name = lazy_ugettext('repository push') |
|
328 | display_name = lazy_ugettext('repository push') | |
|
329 | description = lazy_ugettext('Event triggered after the code was ' | |||
|
330 | 'pushed to a repository') | |||
287 |
|
331 | |||
288 | def __init__(self, repo_name, pushed_commit_ids, extras): |
|
332 | def __init__(self, repo_name, pushed_commit_ids, extras): | |
289 | super(RepoPushEvent, self).__init__(repo_name, extras) |
|
333 | super(RepoPushEvent, self).__init__(repo_name, extras) |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -60,6 +60,7 b' class RepoGroupCreateEvent(RepoGroupEven' | |||||
60 | """ |
|
60 | """ | |
61 | name = 'repo-group-create' |
|
61 | name = 'repo-group-create' | |
62 | display_name = lazy_ugettext('repository group created') |
|
62 | display_name = lazy_ugettext('repository group created') | |
|
63 | description = lazy_ugettext('Event triggered after a repository group was created') | |||
63 |
|
64 | |||
64 |
|
65 | |||
65 | class RepoGroupDeleteEvent(RepoGroupEvent): |
|
66 | class RepoGroupDeleteEvent(RepoGroupEvent): | |
@@ -69,6 +70,7 b' class RepoGroupDeleteEvent(RepoGroupEven' | |||||
69 | """ |
|
70 | """ | |
70 | name = 'repo-group-delete' |
|
71 | name = 'repo-group-delete' | |
71 | display_name = lazy_ugettext('repository group deleted') |
|
72 | display_name = lazy_ugettext('repository group deleted') | |
|
73 | description = lazy_ugettext('Event triggered after a repository group was deleted') | |||
72 |
|
74 | |||
73 |
|
75 | |||
74 | class RepoGroupUpdateEvent(RepoGroupEvent): |
|
76 | class RepoGroupUpdateEvent(RepoGroupEvent): | |
@@ -78,3 +80,4 b' class RepoGroupUpdateEvent(RepoGroupEven' | |||||
78 | """ |
|
80 | """ | |
79 | name = 'repo-group-update' |
|
81 | name = 'repo-group-update' | |
80 | display_name = lazy_ugettext('repository group update') |
|
82 | display_name = lazy_ugettext('repository group update') | |
|
83 | description = lazy_ugettext('Event triggered after a repository group was updated') |
@@ -1,4 +1,4 b'' | |||||
1 |
# Copyright (C) 2016-20 |
|
1 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
2 | # |
|
2 | # | |
3 | # This program is free software: you can redistribute it and/or modify |
|
3 | # This program is free software: you can redistribute it and/or modify | |
4 | # it under the terms of the GNU Affero General Public License, version 3 |
|
4 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,5 +1,5 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
# Copyright (C) 2012-20 |
|
2 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
3 | # |
|
3 | # | |
4 | # This program is free software: you can redistribute it and/or modify |
|
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU Affero General Public License, version 3 |
|
5 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -125,6 +125,19 b' class IntegrationTypeBase(object):' | |||||
125 | """ |
|
125 | """ | |
126 | return colander.Schema() |
|
126 | return colander.Schema() | |
127 |
|
127 | |||
|
128 | def event_enabled(self, event): | |||
|
129 | """ | |||
|
130 | Checks if submitted event is enabled based on the plugin settings | |||
|
131 | :param event: | |||
|
132 | :return: bool | |||
|
133 | """ | |||
|
134 | allowed_events = self.settings['events'] | |||
|
135 | if event.name not in allowed_events: | |||
|
136 | log.debug('event ignored: %r event %s not in allowed set of events %s', | |||
|
137 | event, event.name, allowed_events) | |||
|
138 | return False | |||
|
139 | return True | |||
|
140 | ||||
128 |
|
141 | |||
129 | class EEIntegration(IntegrationTypeBase): |
|
142 | class EEIntegration(IntegrationTypeBase): | |
130 | description = 'Integration available in RhodeCode EE edition.' |
|
143 | description = 'Integration available in RhodeCode EE edition.' | |
@@ -139,30 +152,57 b' class EEIntegration(IntegrationTypeBase)' | |||||
139 | # Helpers # |
|
152 | # Helpers # | |
140 | # updating this required to update the `common_vars` as well. |
|
153 | # updating this required to update the `common_vars` as well. | |
141 | WEBHOOK_URL_VARS = [ |
|
154 | WEBHOOK_URL_VARS = [ | |
142 | ('event_name', 'Unique name of the event type, e.g pullrequest-update'), |
|
155 | # GENERAL | |
143 | ('repo_name', 'Full name of the repository'), |
|
156 | ('General', [ | |
144 | ('repo_type', 'VCS type of repository'), |
|
157 | ('event_name', 'Unique name of the event type, e.g pullrequest-update'), | |
145 |
('repo_ |
|
158 | ('repo_name', 'Full name of the repository'), | |
146 |
('repo_ |
|
159 | ('repo_type', 'VCS type of repository'), | |
|
160 | ('repo_id', 'Unique id of repository'), | |||
|
161 | ('repo_url', 'Repository url'), | |||
|
162 | ] | |||
|
163 | ), | |||
147 | # extra repo fields |
|
164 | # extra repo fields | |
148 | ('extra:<extra_key_name>', 'Extra repo variables, read from its settings.'), |
|
165 | ('Repository', [ | |
149 |
|
166 | ('extra:<extra_key_name>', 'Extra repo variables, read from its settings.'), | ||
|
167 | ] | |||
|
168 | ), | |||
150 | # special attrs below that we handle, using multi-call |
|
169 | # special attrs below that we handle, using multi-call | |
151 | ('branch', 'Name of each branch submitted, if any.'), |
|
170 | ('Commit push - Multicalls', [ | |
152 |
('branch |
|
171 | ('branch', 'Name of each branch submitted, if any.'), | |
153 |
(' |
|
172 | ('branch_head', 'Head ID of pushed branch (full sha of last commit), if any.'), | |
154 |
|
173 | ('commit_id', 'ID (full sha) of each commit submitted, if any.'), | ||
|
174 | ] | |||
|
175 | ), | |||
155 | # pr events vars |
|
176 | # pr events vars | |
156 | ('pull_request_id', 'Unique ID of the pull request.'), |
|
177 | ('Pull request', [ | |
157 |
('pull_request_ |
|
178 | ('pull_request_id', 'Unique ID of the pull request.'), | |
158 |
('pull_request_ |
|
179 | ('pull_request_title', 'Title of the pull request.'), | |
159 |
('pull_request_ |
|
180 | ('pull_request_url', 'Pull request url.'), | |
160 | ('pull_request_commits_uid', 'Calculated UID of all commits inside the PR. ' |
|
181 | ('pull_request_shadow_url', 'Pull request shadow repo clone url.'), | |
161 | 'Changes after PR update'), |
|
182 | ('pull_request_commits_uid', 'Calculated UID of all commits inside the PR. ' | |
|
183 | 'Changes after PR update'), | |||
|
184 | ] | |||
|
185 | ), | |||
|
186 | # commit comment event vars | |||
|
187 | ('Commit comment', [ | |||
|
188 | ('commit_comment_id', 'Unique ID of the comment made on a commit.'), | |||
|
189 | ('commit_comment_text', 'Text of commit comment.'), | |||
|
190 | ('commit_comment_type', 'Type of comment, e.g note/todo.'), | |||
162 |
|
191 | |||
|
192 | ('commit_comment_f_path', 'Optionally path of file for inline comments.'), | |||
|
193 | ('commit_comment_line_no', 'Line number of the file: eg o10, or n200'), | |||
|
194 | ||||
|
195 | ('commit_comment_commit_id', 'Commit id that comment was left at.'), | |||
|
196 | ('commit_comment_commit_branch', 'Commit branch that comment was left at'), | |||
|
197 | ('commit_comment_commit_message', 'Commit message that comment was left at'), | |||
|
198 | ] | |||
|
199 | ), | |||
163 | # user who triggers the call |
|
200 | # user who triggers the call | |
164 | ('username', 'User who triggered the call.'), |
|
201 | ('Caller', [ | |
165 |
('user |
|
202 | ('username', 'User who triggered the call.'), | |
|
203 | ('user_id', 'User id who triggered the call.'), | |||
|
204 | ] | |||
|
205 | ), | |||
166 | ] |
|
206 | ] | |
167 |
|
207 | |||
168 | # common vars for url template used for CI plugins. Shared with webhook |
|
208 | # common vars for url template used for CI plugins. Shared with webhook | |
@@ -271,6 +311,26 b' class WebhookDataHandler(CommitParsingDa' | |||||
271 |
|
311 | |||
272 | return url_calls |
|
312 | return url_calls | |
273 |
|
313 | |||
|
314 | def repo_commit_comment_handler(self, event, data): | |||
|
315 | url = self.get_base_parsed_template(data) | |||
|
316 | log.debug('register %s call(%s) to url %s', self.name, event, url) | |||
|
317 | comment_vars = [ | |||
|
318 | ('commit_comment_id', data['comment']['comment_id']), | |||
|
319 | ('commit_comment_text', data['comment']['comment_text']), | |||
|
320 | ('commit_comment_type', data['comment']['comment_type']), | |||
|
321 | ||||
|
322 | ('commit_comment_f_path', data['comment']['comment_f_path']), | |||
|
323 | ('commit_comment_line_no', data['comment']['comment_line_no']), | |||
|
324 | ||||
|
325 | ('commit_comment_commit_id', data['commit']['commit_id']), | |||
|
326 | ('commit_comment_commit_branch', data['commit']['commit_branch']), | |||
|
327 | ('commit_comment_commit_message', data['commit']['commit_message']), | |||
|
328 | ] | |||
|
329 | for k, v in comment_vars: | |||
|
330 | url = UrlTmpl(url).safe_substitute(**{k: v}) | |||
|
331 | ||||
|
332 | return [(url, self.headers, data)] | |||
|
333 | ||||
274 | def repo_create_event_handler(self, event, data): |
|
334 | def repo_create_event_handler(self, event, data): | |
275 | url = self.get_base_parsed_template(data) |
|
335 | url = self.get_base_parsed_template(data) | |
276 | log.debug('register %s call(%s) to url %s', self.name, event, url) |
|
336 | log.debug('register %s call(%s) to url %s', self.name, event, url) | |
@@ -298,12 +358,13 b' class WebhookDataHandler(CommitParsingDa' | |||||
298 | return self.repo_push_event_handler(event, data) |
|
358 | return self.repo_push_event_handler(event, data) | |
299 | elif isinstance(event, events.RepoCreateEvent): |
|
359 | elif isinstance(event, events.RepoCreateEvent): | |
300 | return self.repo_create_event_handler(event, data) |
|
360 | return self.repo_create_event_handler(event, data) | |
|
361 | elif isinstance(event, events.RepoCommitCommentEvent): | |||
|
362 | return self.repo_commit_comment_handler(event, data) | |||
301 | elif isinstance(event, events.PullRequestEvent): |
|
363 | elif isinstance(event, events.PullRequestEvent): | |
302 | return self.pull_request_event_handler(event, data) |
|
364 | return self.pull_request_event_handler(event, data) | |
303 | else: |
|
365 | else: | |
304 | raise ValueError( |
|
366 | raise ValueError( | |
305 | 'event type `%s` not in supported list: %s' % ( |
|
367 | 'event type `{}` has no handler defined'.format(event.__class__)) | |
306 | event.__class__, events)) |
|
|||
307 |
|
368 | |||
308 |
|
369 | |||
309 | def get_auth(settings): |
|
370 | def get_auth(settings): | |
@@ -320,9 +381,13 b' def get_web_token(settings):' | |||||
320 |
|
381 | |||
321 |
|
382 | |||
322 | def get_url_vars(url_vars): |
|
383 | def get_url_vars(url_vars): | |
323 | return '\n'.join( |
|
384 | items = [] | |
324 | '{} - {}'.format('${' + key + '}', explanation) |
|
385 | ||
325 | for key, explanation in url_vars) |
|
386 | for section, section_items in url_vars: | |
|
387 | items.append('\n*{}*'.format(section)) | |||
|
388 | for key, explanation in section_items: | |||
|
389 | items.append(' {} - {}'.format('${' + key + '}', explanation)) | |||
|
390 | return '\n'.join(items) | |||
326 |
|
391 | |||
327 |
|
392 | |||
328 | def render_with_traceback(template, *args, **kwargs): |
|
393 | def render_with_traceback(template, *args, **kwargs): |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -19,13 +19,14 b'' | |||||
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |
20 |
|
20 | |||
21 | from __future__ import unicode_literals |
|
21 | from __future__ import unicode_literals | |
22 | import deform |
|
|||
23 | import logging |
|
22 | import logging | |
|
23 | ||||
24 | import colander |
|
24 | import colander | |
25 |
|
25 | import deform.widget | ||
26 | from mako.template import Template |
|
26 | from mako.template import Template | |
27 |
|
27 | |||
28 | from rhodecode import events |
|
28 | from rhodecode import events | |
|
29 | from rhodecode.model.validation_schema.widgets import CheckboxChoiceWidgetDesc | |||
29 | from rhodecode.translation import _ |
|
30 | from rhodecode.translation import _ | |
30 | from rhodecode.lib.celerylib import run_task |
|
31 | from rhodecode.lib.celerylib import run_task | |
31 | from rhodecode.lib.celerylib import tasks |
|
32 | from rhodecode.lib.celerylib import tasks | |
@@ -174,6 +175,10 b' class EmailIntegrationType(IntegrationTy' | |||||
174 | display_name = _('Email') |
|
175 | display_name = _('Email') | |
175 | description = _('Send repo push summaries to a list of recipients via email') |
|
176 | description = _('Send repo push summaries to a list of recipients via email') | |
176 |
|
177 | |||
|
178 | valid_events = [ | |||
|
179 | events.RepoPushEvent | |||
|
180 | ] | |||
|
181 | ||||
177 | @classmethod |
|
182 | @classmethod | |
178 | def icon(cls): |
|
183 | def icon(cls): | |
179 | return ''' |
|
184 | return ''' | |
@@ -240,59 +245,86 b' class EmailIntegrationType(IntegrationTy' | |||||
240 |
|
245 | |||
241 | def settings_schema(self): |
|
246 | def settings_schema(self): | |
242 | schema = EmailSettingsSchema() |
|
247 | schema = EmailSettingsSchema() | |
|
248 | schema.add(colander.SchemaNode( | |||
|
249 | colander.Set(), | |||
|
250 | widget=CheckboxChoiceWidgetDesc( | |||
|
251 | values=sorted( | |||
|
252 | [(e.name, e.display_name, e.description) for e in self.valid_events] | |||
|
253 | ), | |||
|
254 | ), | |||
|
255 | description="List of events activated for this integration", | |||
|
256 | name='events' | |||
|
257 | )) | |||
243 | return schema |
|
258 | return schema | |
244 |
|
259 | |||
245 | def send_event(self, event): |
|
260 | def send_event(self, event): | |
246 | data = event.as_dict() |
|
261 | log.debug('handling event %s with integration %s', event.name, self) | |
247 | log.debug('got event: %r', event) |
|
262 | ||
|
263 | if event.__class__ not in self.valid_events: | |||
|
264 | log.debug('event %r not present in valid event list (%s)', event, self.valid_events) | |||
|
265 | return | |||
|
266 | ||||
|
267 | if not self.event_enabled(event): | |||
|
268 | # NOTE(marcink): for legacy reasons we're skipping this check... | |||
|
269 | # since the email event haven't had any settings... | |||
|
270 | pass | |||
248 |
|
271 | |||
|
272 | handler = EmailEventHandler(self.settings) | |||
|
273 | handler(event, event_data=event.as_dict()) | |||
|
274 | ||||
|
275 | ||||
|
276 | class EmailEventHandler(object): | |||
|
277 | def __init__(self, integration_settings): | |||
|
278 | self.integration_settings = integration_settings | |||
|
279 | ||||
|
280 | def __call__(self, event, event_data): | |||
249 | if isinstance(event, events.RepoPushEvent): |
|
281 | if isinstance(event, events.RepoPushEvent): | |
250 |
repo_push_handler( |
|
282 | self.repo_push_handler(event, event_data) | |
251 | else: |
|
283 | else: | |
252 | log.debug('ignoring event: %r', event) |
|
284 | log.debug('ignoring event: %r', event) | |
253 |
|
285 | |||
254 |
|
286 | def repo_push_handler(self, event, data): | ||
255 | def repo_push_handler(data, settings): |
|
287 | commit_num = len(data['push']['commits']) | |
256 | commit_num = len(data['push']['commits']) |
|
288 | server_url = data['server_url'] | |
257 | server_url = data['server_url'] |
|
|||
258 |
|
289 | |||
259 | if commit_num == 1: |
|
290 | if commit_num == 1: | |
260 | if data['push']['branches']: |
|
291 | if data['push']['branches']: | |
261 | _subject = '[{repo_name}] {author} pushed {commit_num} commit on branches: {branches}' |
|
292 | _subject = '[{repo_name}] {author} pushed {commit_num} commit on branches: {branches}' | |
262 | else: |
|
293 | else: | |
263 | _subject = '[{repo_name}] {author} pushed {commit_num} commit' |
|
294 | _subject = '[{repo_name}] {author} pushed {commit_num} commit' | |
264 | subject = _subject.format( |
|
295 | subject = _subject.format( | |
265 | author=data['actor']['username'], |
|
296 | author=data['actor']['username'], | |
266 | repo_name=data['repo']['repo_name'], |
|
297 | repo_name=data['repo']['repo_name'], | |
267 | commit_num=commit_num, |
|
298 | commit_num=commit_num, | |
268 | branches=', '.join( |
|
299 | branches=', '.join( | |
269 | branch['name'] for branch in data['push']['branches']) |
|
300 | branch['name'] for branch in data['push']['branches']) | |
270 | ) |
|
301 | ) | |
271 | else: |
|
|||
272 | if data['push']['branches']: |
|
|||
273 | _subject = '[{repo_name}] {author} pushed {commit_num} commits on branches: {branches}' |
|
|||
274 | else: |
|
302 | else: | |
275 | _subject = '[{repo_name}] {author} pushed {commit_num} commits' |
|
303 | if data['push']['branches']: | |
276 | subject = _subject.format( |
|
304 | _subject = '[{repo_name}] {author} pushed {commit_num} commits on branches: {branches}' | |
277 | author=data['actor']['username'], |
|
305 | else: | |
278 | repo_name=data['repo']['repo_name'], |
|
306 | _subject = '[{repo_name}] {author} pushed {commit_num} commits' | |
279 | commit_num=commit_num, |
|
307 | subject = _subject.format( | |
280 | branches=', '.join( |
|
308 | author=data['actor']['username'], | |
281 | branch['name'] for branch in data['push']['branches'])) |
|
309 | repo_name=data['repo']['repo_name'], | |
|
310 | commit_num=commit_num, | |||
|
311 | branches=', '.join( | |||
|
312 | branch['name'] for branch in data['push']['branches'])) | |||
282 |
|
313 | |||
283 | email_body_plaintext = render_with_traceback( |
|
314 | email_body_plaintext = render_with_traceback( | |
284 | REPO_PUSH_TEMPLATE_PLAINTEXT, |
|
315 | REPO_PUSH_TEMPLATE_PLAINTEXT, | |
285 | data=data, |
|
316 | data=data, | |
286 | subject=subject, |
|
317 | subject=subject, | |
287 | instance_url=server_url) |
|
318 | instance_url=server_url) | |
288 |
|
319 | |||
289 | email_body_html = render_with_traceback( |
|
320 | email_body_html = render_with_traceback( | |
290 | REPO_PUSH_TEMPLATE_HTML, |
|
321 | REPO_PUSH_TEMPLATE_HTML, | |
291 | data=data, |
|
322 | data=data, | |
292 | subject=subject, |
|
323 | subject=subject, | |
293 | instance_url=server_url) |
|
324 | instance_url=server_url) | |
294 |
|
325 | |||
295 |
|
|
326 | recipients = self.integration_settings['recipients'] | |
296 | run_task( |
|
327 | for email_address in recipients: | |
297 | tasks.send_email, email_address, subject, |
|
328 | run_task( | |
298 | email_body_plaintext, email_body_html) |
|
329 | tasks.send_email, email_address, subject, | |
|
330 | email_body_plaintext, email_body_html) |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -26,6 +26,7 b' import colander' | |||||
26 | import textwrap |
|
26 | import textwrap | |
27 | from mako.template import Template |
|
27 | from mako.template import Template | |
28 | from rhodecode import events |
|
28 | from rhodecode import events | |
|
29 | from rhodecode.model.validation_schema.widgets import CheckboxChoiceWidgetDesc | |||
29 | from rhodecode.translation import _ |
|
30 | from rhodecode.translation import _ | |
30 | from rhodecode.lib import helpers as h |
|
31 | from rhodecode.lib import helpers as h | |
31 | from rhodecode.lib.celerylib import run_task, async_task, RequestContextTask |
|
32 | from rhodecode.lib.celerylib import run_task, async_task, RequestContextTask | |
@@ -119,13 +120,10 b' class HipchatIntegrationType(Integration' | |||||
119 |
|
120 | |||
120 | def send_event(self, event): |
|
121 | def send_event(self, event): | |
121 | if event.__class__ not in self.valid_events: |
|
122 | if event.__class__ not in self.valid_events: | |
122 |
log.debug('event |
|
123 | log.debug('event %r not present in valid event list (%s)', event, self.valid_events) | |
123 | return |
|
124 | return | |
124 |
|
125 | |||
125 | allowed_events = self.settings['events'] |
|
126 | if not self.event_enabled(event): | |
126 | if event.name not in allowed_events: |
|
|||
127 | log.debug('event ignored: %r event %s not in allowed events %s', |
|
|||
128 | event, event.name, allowed_events) |
|
|||
129 | return |
|
127 | return | |
130 |
|
128 | |||
131 | data = event.as_dict() |
|
129 | data = event.as_dict() | |
@@ -133,8 +131,6 b' class HipchatIntegrationType(Integration' | |||||
133 | text = '<b>%s<b> caused a <b>%s</b> event' % ( |
|
131 | text = '<b>%s<b> caused a <b>%s</b> event' % ( | |
134 | data['actor']['username'], event.name) |
|
132 | data['actor']['username'], event.name) | |
135 |
|
133 | |||
136 | log.debug('handling hipchat event for %s', event.name) |
|
|||
137 |
|
||||
138 | if isinstance(event, events.PullRequestCommentEvent): |
|
134 | if isinstance(event, events.PullRequestCommentEvent): | |
139 | text = self.format_pull_request_comment_event(event, data) |
|
135 | text = self.format_pull_request_comment_event(event, data) | |
140 | elif isinstance(event, events.PullRequestReviewEvent): |
|
136 | elif isinstance(event, events.PullRequestReviewEvent): | |
@@ -154,12 +150,12 b' class HipchatIntegrationType(Integration' | |||||
154 | schema = HipchatSettingsSchema() |
|
150 | schema = HipchatSettingsSchema() | |
155 | schema.add(colander.SchemaNode( |
|
151 | schema.add(colander.SchemaNode( | |
156 | colander.Set(), |
|
152 | colander.Set(), | |
157 |
widget= |
|
153 | widget=CheckboxChoiceWidgetDesc( | |
158 | values=sorted( |
|
154 | values=sorted( | |
159 | [(e.name, e.display_name) for e in self.valid_events] |
|
155 | [(e.name, e.display_name, e.description) for e in self.valid_events] | |
160 | ) |
|
156 | ), | |
161 | ), |
|
157 | ), | |
162 |
description=" |
|
158 | description="List of events activated for this integration", | |
163 | name='events' |
|
159 | name='events' | |
164 | )) |
|
160 | )) | |
165 |
|
161 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -30,6 +30,7 b' import colander' | |||||
30 | from mako.template import Template |
|
30 | from mako.template import Template | |
31 |
|
31 | |||
32 | from rhodecode import events |
|
32 | from rhodecode import events | |
|
33 | from rhodecode.model.validation_schema.widgets import CheckboxChoiceWidgetDesc | |||
33 | from rhodecode.translation import _ |
|
34 | from rhodecode.translation import _ | |
34 | from rhodecode.lib import helpers as h |
|
35 | from rhodecode.lib import helpers as h | |
35 | from rhodecode.lib.celerylib import run_task, async_task, RequestContextTask |
|
36 | from rhodecode.lib.celerylib import run_task, async_task, RequestContextTask | |
@@ -134,14 +135,13 b' class SlackIntegrationType(IntegrationTy' | |||||
134 | ] |
|
135 | ] | |
135 |
|
136 | |||
136 | def send_event(self, event): |
|
137 | def send_event(self, event): | |
|
138 | log.debug('handling event %s with integration %s', event.name, self) | |||
|
139 | ||||
137 | if event.__class__ not in self.valid_events: |
|
140 | if event.__class__ not in self.valid_events: | |
138 |
log.debug('event |
|
141 | log.debug('event %r not present in valid event list (%s)', event, self.valid_events) | |
139 | return |
|
142 | return | |
140 |
|
143 | |||
141 | allowed_events = self.settings['events'] |
|
144 | if not self.event_enabled(event): | |
142 | if event.name not in allowed_events: |
|
|||
143 | log.debug('event ignored: %r event %s not in allowed events %s', |
|
|||
144 | event, event.name, allowed_events) |
|
|||
145 | return |
|
145 | return | |
146 |
|
146 | |||
147 | data = event.as_dict() |
|
147 | data = event.as_dict() | |
@@ -154,8 +154,6 b' class SlackIntegrationType(IntegrationTy' | |||||
154 | fields = None |
|
154 | fields = None | |
155 | overrides = None |
|
155 | overrides = None | |
156 |
|
156 | |||
157 | log.debug('handling slack event for %s', event.name) |
|
|||
158 |
|
||||
159 | if isinstance(event, events.PullRequestCommentEvent): |
|
157 | if isinstance(event, events.PullRequestCommentEvent): | |
160 | (title, text, fields, overrides) \ |
|
158 | (title, text, fields, overrides) \ | |
161 | = self.format_pull_request_comment_event(event, data) |
|
159 | = self.format_pull_request_comment_event(event, data) | |
@@ -176,12 +174,12 b' class SlackIntegrationType(IntegrationTy' | |||||
176 | schema = SlackSettingsSchema() |
|
174 | schema = SlackSettingsSchema() | |
177 | schema.add(colander.SchemaNode( |
|
175 | schema.add(colander.SchemaNode( | |
178 | colander.Set(), |
|
176 | colander.Set(), | |
179 |
widget= |
|
177 | widget=CheckboxChoiceWidgetDesc( | |
180 | values=sorted( |
|
178 | values=sorted( | |
181 | [(e.name, e.display_name) for e in self.valid_events] |
|
179 | [(e.name, e.display_name, e.description) for e in self.valid_events] | |
182 | ) |
|
180 | ), | |
183 | ), |
|
181 | ), | |
184 |
description=" |
|
182 | description="List of events activated for this integration", | |
185 | name='events' |
|
183 | name='events' | |
186 | )) |
|
184 | )) | |
187 |
|
185 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -20,13 +20,14 b'' | |||||
20 |
|
20 | |||
21 | from __future__ import unicode_literals |
|
21 | from __future__ import unicode_literals | |
22 |
|
22 | |||
23 | import deform |
|
|||
24 | import deform.widget |
|
23 | import deform.widget | |
25 | import logging |
|
24 | import logging | |
26 | import colander |
|
25 | import colander | |
27 |
|
26 | |||
28 | import rhodecode |
|
27 | import rhodecode | |
29 | from rhodecode import events |
|
28 | from rhodecode import events | |
|
29 | from rhodecode.lib.colander_utils import strip_whitespace | |||
|
30 | from rhodecode.model.validation_schema.widgets import CheckboxChoiceWidgetDesc | |||
30 | from rhodecode.translation import _ |
|
31 | from rhodecode.translation import _ | |
31 | from rhodecode.integrations.types.base import ( |
|
32 | from rhodecode.integrations.types.base import ( | |
32 | IntegrationTypeBase, get_auth, get_web_token, get_url_vars, |
|
33 | IntegrationTypeBase, get_auth, get_web_token, get_url_vars, | |
@@ -53,11 +54,12 b' class WebhookSettingsSchema(colander.Sch' | |||||
53 | 'objects in data in such cases.'), |
|
54 | 'objects in data in such cases.'), | |
54 | missing=colander.required, |
|
55 | missing=colander.required, | |
55 | required=True, |
|
56 | required=True, | |
|
57 | preparer=strip_whitespace, | |||
56 | validator=colander.url, |
|
58 | validator=colander.url, | |
57 | widget=widgets.CodeMirrorWidget( |
|
59 | widget=widgets.CodeMirrorWidget( | |
58 | help_block_collapsable_name='Show url variables', |
|
60 | help_block_collapsable_name='Show url variables', | |
59 | help_block_collapsable=( |
|
61 | help_block_collapsable=( | |
60 | 'E.g http://my-serv/trigger_job/${{event_name}}' |
|
62 | 'E.g http://my-serv.com/trigger_job/${{event_name}}' | |
61 | '?PR_ID=${{pull_request_id}}' |
|
63 | '?PR_ID=${{pull_request_id}}' | |
62 | '\nFull list of vars:\n{}'.format(URL_VARS)), |
|
64 | '\nFull list of vars:\n{}'.format(URL_VARS)), | |
63 | codemirror_mode='text', |
|
65 | codemirror_mode='text', | |
@@ -146,34 +148,31 b' class WebhookIntegrationType(Integration' | |||||
146 | events.PullRequestCreateEvent, |
|
148 | events.PullRequestCreateEvent, | |
147 | events.RepoPushEvent, |
|
149 | events.RepoPushEvent, | |
148 | events.RepoCreateEvent, |
|
150 | events.RepoCreateEvent, | |
|
151 | events.RepoCommitCommentEvent, | |||
149 | ] |
|
152 | ] | |
150 |
|
153 | |||
151 | def settings_schema(self): |
|
154 | def settings_schema(self): | |
152 | schema = WebhookSettingsSchema() |
|
155 | schema = WebhookSettingsSchema() | |
153 | schema.add(colander.SchemaNode( |
|
156 | schema.add(colander.SchemaNode( | |
154 | colander.Set(), |
|
157 | colander.Set(), | |
155 |
widget= |
|
158 | widget=CheckboxChoiceWidgetDesc( | |
156 | values=sorted( |
|
159 | values=sorted( | |
157 | [(e.name, e.display_name) for e in self.valid_events] |
|
160 | [(e.name, e.display_name, e.description) for e in self.valid_events] | |
158 | ) |
|
161 | ), | |
159 | ), |
|
162 | ), | |
160 |
description=" |
|
163 | description="List of events activated for this integration", | |
161 | name='events' |
|
164 | name='events' | |
162 | )) |
|
165 | )) | |
163 | return schema |
|
166 | return schema | |
164 |
|
167 | |||
165 | def send_event(self, event): |
|
168 | def send_event(self, event): | |
166 | log.debug( |
|
169 | log.debug('handling event %s with integration %s', event.name, self) | |
167 | 'handling event %s with Webhook integration %s', event.name, self) |
|
|||
168 |
|
170 | |||
169 | if event.__class__ not in self.valid_events: |
|
171 | if event.__class__ not in self.valid_events: | |
170 |
log.debug('event |
|
172 | log.debug('event %r not present in valid event list (%s)', event, self.valid_events) | |
171 | return |
|
173 | return | |
172 |
|
174 | |||
173 | allowed_events = self.settings['events'] |
|
175 | if not self.event_enabled(event): | |
174 | if event.name not in allowed_events: |
|
|||
175 | log.debug('event ignored: %r event %s not in allowed events %s', |
|
|||
176 | event, event.name, allowed_events) |
|
|||
177 | return |
|
176 | return | |
178 |
|
177 | |||
179 | data = event.as_dict() |
|
178 | data = event.as_dict() |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2017-20 |
|
3 | # Copyright (C) 2017-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -23,6 +23,8 b' authentication and permission libraries' | |||||
23 | """ |
|
23 | """ | |
24 |
|
24 | |||
25 | import os |
|
25 | import os | |
|
26 | ||||
|
27 | import colander | |||
26 | import time |
|
28 | import time | |
27 | import collections |
|
29 | import collections | |
28 | import fnmatch |
|
30 | import fnmatch | |
@@ -45,15 +47,14 b' from rhodecode.model import meta' | |||||
45 | from rhodecode.model.meta import Session |
|
47 | from rhodecode.model.meta import Session | |
46 | from rhodecode.model.user import UserModel |
|
48 | from rhodecode.model.user import UserModel | |
47 | from rhodecode.model.db import ( |
|
49 | from rhodecode.model.db import ( | |
48 | User, Repository, Permission, UserToPerm, UserGroupToPerm, UserGroupMember, |
|
50 | false, User, Repository, Permission, UserToPerm, UserGroupToPerm, UserGroupMember, | |
49 | UserIpMap, UserApiKeys, RepoGroup, UserGroup) |
|
51 | UserIpMap, UserApiKeys, RepoGroup, UserGroup, UserNotice) | |
50 | from rhodecode.lib import rc_cache |
|
52 | from rhodecode.lib import rc_cache | |
51 | from rhodecode.lib.utils2 import safe_unicode, aslist, safe_str, md5, safe_int, sha1 |
|
53 | from rhodecode.lib.utils2 import safe_unicode, aslist, safe_str, md5, safe_int, sha1 | |
52 | from rhodecode.lib.utils import ( |
|
54 | from rhodecode.lib.utils import ( | |
53 | get_repo_slug, get_repo_group_slug, get_user_group_slug) |
|
55 | get_repo_slug, get_repo_group_slug, get_user_group_slug) | |
54 | from rhodecode.lib.caching_query import FromCache |
|
56 | from rhodecode.lib.caching_query import FromCache | |
55 |
|
57 | |||
56 |
|
||||
57 | if rhodecode.is_unix: |
|
58 | if rhodecode.is_unix: | |
58 | import bcrypt |
|
59 | import bcrypt | |
59 |
|
60 | |||
@@ -1312,7 +1313,10 b' class AuthUser(object):' | |||||
1312 | if not perms: |
|
1313 | if not perms: | |
1313 | perms = AuthUser.repo_read_perms |
|
1314 | perms = AuthUser.repo_read_perms | |
1314 |
|
1315 | |||
1315 | def _cached_repo_acl(user_id, perm_def, _name_filter): |
|
1316 | if not isinstance(perms, list): | |
|
1317 | raise ValueError('perms parameter must be a list got {} instead'.format(perms)) | |||
|
1318 | ||||
|
1319 | def _cached_repo_acl(perm_def, _name_filter): | |||
1316 | qry = Repository.query() |
|
1320 | qry = Repository.query() | |
1317 | if _name_filter: |
|
1321 | if _name_filter: | |
1318 | ilike_expression = u'%{}%'.format(safe_unicode(_name_filter)) |
|
1322 | ilike_expression = u'%{}%'.format(safe_unicode(_name_filter)) | |
@@ -1322,7 +1326,21 b' class AuthUser(object):' | |||||
1322 | return [x.repo_id for x in |
|
1326 | return [x.repo_id for x in | |
1323 | RepoList(qry, perm_set=perm_def, extra_kwargs={'user': self})] |
|
1327 | RepoList(qry, perm_set=perm_def, extra_kwargs={'user': self})] | |
1324 |
|
1328 | |||
1325 | return _cached_repo_acl(self.user_id, perms, name_filter) |
|
1329 | log.debug('Computing REPO ACL IDS user %s', self) | |
|
1330 | ||||
|
1331 | cache_namespace_uid = 'cache_user_repo_acl_ids.{}'.format(self.user_id) | |||
|
1332 | region = rc_cache.get_or_create_region('cache_perms', cache_namespace_uid) | |||
|
1333 | ||||
|
1334 | @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache) | |||
|
1335 | def compute_repo_acl_ids(cache_ver, user_id, perm_def, _name_filter): | |||
|
1336 | return _cached_repo_acl(perm_def, _name_filter) | |||
|
1337 | ||||
|
1338 | start = time.time() | |||
|
1339 | result = compute_repo_acl_ids('v1', self.user_id, perms, name_filter) | |||
|
1340 | total = time.time() - start | |||
|
1341 | log.debug('REPO ACL IDS for user %s computed in %.4fs', self, total) | |||
|
1342 | ||||
|
1343 | return result | |||
1326 |
|
1344 | |||
1327 | def repo_group_acl_ids_from_stack(self, perms=None, prefix_filter=None, cache=False): |
|
1345 | def repo_group_acl_ids_from_stack(self, perms=None, prefix_filter=None, cache=False): | |
1328 | if not perms: |
|
1346 | if not perms: | |
@@ -1346,7 +1364,10 b' class AuthUser(object):' | |||||
1346 | if not perms: |
|
1364 | if not perms: | |
1347 | perms = AuthUser.repo_group_read_perms |
|
1365 | perms = AuthUser.repo_group_read_perms | |
1348 |
|
1366 | |||
1349 | def _cached_repo_group_acl(user_id, perm_def, _name_filter): |
|
1367 | if not isinstance(perms, list): | |
|
1368 | raise ValueError('perms parameter must be a list got {} instead'.format(perms)) | |||
|
1369 | ||||
|
1370 | def _cached_repo_group_acl(perm_def, _name_filter): | |||
1350 | qry = RepoGroup.query() |
|
1371 | qry = RepoGroup.query() | |
1351 | if _name_filter: |
|
1372 | if _name_filter: | |
1352 | ilike_expression = u'%{}%'.format(safe_unicode(_name_filter)) |
|
1373 | ilike_expression = u'%{}%'.format(safe_unicode(_name_filter)) | |
@@ -1356,7 +1377,21 b' class AuthUser(object):' | |||||
1356 | return [x.group_id for x in |
|
1377 | return [x.group_id for x in | |
1357 | RepoGroupList(qry, perm_set=perm_def, extra_kwargs={'user': self})] |
|
1378 | RepoGroupList(qry, perm_set=perm_def, extra_kwargs={'user': self})] | |
1358 |
|
1379 | |||
1359 | return _cached_repo_group_acl(self.user_id, perms, name_filter) |
|
1380 | log.debug('Computing REPO GROUP ACL IDS user %s', self) | |
|
1381 | ||||
|
1382 | cache_namespace_uid = 'cache_user_repo_group_acl_ids.{}'.format(self.user_id) | |||
|
1383 | region = rc_cache.get_or_create_region('cache_perms', cache_namespace_uid) | |||
|
1384 | ||||
|
1385 | @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache) | |||
|
1386 | def compute_repo_group_acl_ids(cache_ver, user_id, perm_def, _name_filter): | |||
|
1387 | return _cached_repo_group_acl(perm_def, _name_filter) | |||
|
1388 | ||||
|
1389 | start = time.time() | |||
|
1390 | result = compute_repo_group_acl_ids('v1', self.user_id, perms, name_filter) | |||
|
1391 | total = time.time() - start | |||
|
1392 | log.debug('REPO GROUP ACL IDS for user %s computed in %.4fs', self, total) | |||
|
1393 | ||||
|
1394 | return result | |||
1360 |
|
1395 | |||
1361 | def user_group_acl_ids_from_stack(self, perms=None, cache=False): |
|
1396 | def user_group_acl_ids_from_stack(self, perms=None, cache=False): | |
1362 | if not perms: |
|
1397 | if not perms: | |
@@ -1378,17 +1413,34 b' class AuthUser(object):' | |||||
1378 | if not perms: |
|
1413 | if not perms: | |
1379 | perms = AuthUser.user_group_read_perms |
|
1414 | perms = AuthUser.user_group_read_perms | |
1380 |
|
1415 | |||
1381 | def _cached_user_group_acl(user_id, perm_def, name_filter): |
|
1416 | if not isinstance(perms, list): | |
|
1417 | raise ValueError('perms parameter must be a list got {} instead'.format(perms)) | |||
|
1418 | ||||
|
1419 | def _cached_user_group_acl(perm_def, _name_filter): | |||
1382 | qry = UserGroup.query() |
|
1420 | qry = UserGroup.query() | |
1383 | if name_filter: |
|
1421 | if _name_filter: | |
1384 | ilike_expression = u'%{}%'.format(safe_unicode(name_filter)) |
|
1422 | ilike_expression = u'%{}%'.format(safe_unicode(_name_filter)) | |
1385 | qry = qry.filter( |
|
1423 | qry = qry.filter( | |
1386 | UserGroup.users_group_name.ilike(ilike_expression)) |
|
1424 | UserGroup.users_group_name.ilike(ilike_expression)) | |
1387 |
|
1425 | |||
1388 | return [x.users_group_id for x in |
|
1426 | return [x.users_group_id for x in | |
1389 | UserGroupList(qry, perm_set=perm_def, extra_kwargs={'user': self})] |
|
1427 | UserGroupList(qry, perm_set=perm_def, extra_kwargs={'user': self})] | |
1390 |
|
1428 | |||
1391 | return _cached_user_group_acl(self.user_id, perms, name_filter) |
|
1429 | log.debug('Computing USER GROUP ACL IDS user %s', self) | |
|
1430 | ||||
|
1431 | cache_namespace_uid = 'cache_user_user_group_acl_ids.{}'.format(self.user_id) | |||
|
1432 | region = rc_cache.get_or_create_region('cache_perms', cache_namespace_uid) | |||
|
1433 | ||||
|
1434 | @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache) | |||
|
1435 | def compute_user_group_acl_ids(cache_ver, user_id, perm_def, _name_filter): | |||
|
1436 | return _cached_user_group_acl(perm_def, _name_filter) | |||
|
1437 | ||||
|
1438 | start = time.time() | |||
|
1439 | result = compute_user_group_acl_ids('v1', self.user_id, perms, name_filter) | |||
|
1440 | total = time.time() - start | |||
|
1441 | log.debug('USER GROUP ACL IDS for user %s computed in %.4fs', self, total) | |||
|
1442 | ||||
|
1443 | return result | |||
1392 |
|
1444 | |||
1393 | @property |
|
1445 | @property | |
1394 | def ip_allowed(self): |
|
1446 | def ip_allowed(self): | |
@@ -1402,6 +1454,7 b' class AuthUser(object):' | |||||
1402 | inherit = self.inherit_default_permissions |
|
1454 | inherit = self.inherit_default_permissions | |
1403 | return AuthUser.check_ip_allowed(self.user_id, self.ip_addr, |
|
1455 | return AuthUser.check_ip_allowed(self.user_id, self.ip_addr, | |
1404 | inherit_from_default=inherit) |
|
1456 | inherit_from_default=inherit) | |
|
1457 | ||||
1405 | @property |
|
1458 | @property | |
1406 | def personal_repo_group(self): |
|
1459 | def personal_repo_group(self): | |
1407 | return RepoGroup.get_user_personal_repo_group(self.user_id) |
|
1460 | return RepoGroup.get_user_personal_repo_group(self.user_id) | |
@@ -1455,9 +1508,40 b' class AuthUser(object):' | |||||
1455 |
|
1508 | |||
1456 | return rule, default_perm |
|
1509 | return rule, default_perm | |
1457 |
|
1510 | |||
|
1511 | def get_notice_messages(self): | |||
|
1512 | ||||
|
1513 | notice_level = 'notice-error' | |||
|
1514 | notice_messages = [] | |||
|
1515 | if self.is_default: | |||
|
1516 | return [], notice_level | |||
|
1517 | ||||
|
1518 | notices = UserNotice.query()\ | |||
|
1519 | .filter(UserNotice.user_id == self.user_id)\ | |||
|
1520 | .filter(UserNotice.notice_read == false())\ | |||
|
1521 | .all() | |||
|
1522 | ||||
|
1523 | try: | |||
|
1524 | for entry in notices: | |||
|
1525 | ||||
|
1526 | msg = { | |||
|
1527 | 'msg_id': entry.user_notice_id, | |||
|
1528 | 'level': entry.notification_level, | |||
|
1529 | 'subject': entry.notice_subject, | |||
|
1530 | 'body': entry.notice_body, | |||
|
1531 | } | |||
|
1532 | notice_messages.append(msg) | |||
|
1533 | ||||
|
1534 | log.debug('Got user %s %s messages', self, len(notice_messages)) | |||
|
1535 | ||||
|
1536 | levels = [x['level'] for x in notice_messages] | |||
|
1537 | notice_level = 'notice-error' if 'error' in levels else 'notice-warning' | |||
|
1538 | except Exception: | |||
|
1539 | pass | |||
|
1540 | ||||
|
1541 | return notice_messages, notice_level | |||
|
1542 | ||||
1458 | def __repr__(self): |
|
1543 | def __repr__(self): | |
1459 | return "<AuthUser('id:%s[%s] ip:%s auth:%s')>"\ |
|
1544 | return self.repr_user(self.user_id, self.username, self.ip_addr, self.is_authenticated) | |
1460 | % (self.user_id, self.username, self.ip_addr, self.is_authenticated) |
|
|||
1461 |
|
1545 | |||
1462 | def set_authenticated(self, authenticated=True): |
|
1546 | def set_authenticated(self, authenticated=True): | |
1463 | if self.user_id != self.anonymous_user.user_id: |
|
1547 | if self.user_id != self.anonymous_user.user_id: | |
@@ -1472,6 +1556,11 b' class AuthUser(object):' | |||||
1472 | } |
|
1556 | } | |
1473 |
|
1557 | |||
1474 | @classmethod |
|
1558 | @classmethod | |
|
1559 | def repr_user(cls, user_id=0, username='ANONYMOUS', ip='0.0.0.0', is_authenticated=False): | |||
|
1560 | tmpl = "<AuthUser('id:{}[{}] ip:{} auth:{}')>" | |||
|
1561 | return tmpl.format(user_id, username, ip, is_authenticated) | |||
|
1562 | ||||
|
1563 | @classmethod | |||
1475 | def from_cookie_store(cls, cookie_store): |
|
1564 | def from_cookie_store(cls, cookie_store): | |
1476 | """ |
|
1565 | """ | |
1477 | Creates AuthUser from a cookie store |
|
1566 | Creates AuthUser from a cookie store |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -283,7 +283,7 b' def get_current_lang(request):' | |||||
283 | return getattr(request, '_LOCALE_', request.locale_name) |
|
283 | return getattr(request, '_LOCALE_', request.locale_name) | |
284 |
|
284 | |||
285 |
|
285 | |||
286 | def attach_context_attributes(context, request, user_id=None): |
|
286 | def attach_context_attributes(context, request, user_id=None, is_api=None): | |
287 | """ |
|
287 | """ | |
288 | Attach variables into template context called `c`. |
|
288 | Attach variables into template context called `c`. | |
289 | """ |
|
289 | """ | |
@@ -379,7 +379,8 b' def attach_context_attributes(context, r' | |||||
379 | "sideside": "sideside" |
|
379 | "sideside": "sideside" | |
380 | }.get(request.GET.get('diffmode')) |
|
380 | }.get(request.GET.get('diffmode')) | |
381 |
|
381 | |||
382 | is_api = hasattr(request, 'rpc_user') |
|
382 | if is_api is not None: | |
|
383 | is_api = hasattr(request, 'rpc_user') | |||
383 | session_attrs = { |
|
384 | session_attrs = { | |
384 | # defaults |
|
385 | # defaults | |
385 | "clone_url_format": "http", |
|
386 | "clone_url_format": "http", | |
@@ -436,7 +437,7 b' def attach_context_attributes(context, r' | |||||
436 |
|
437 | |||
437 | context.csrf_token = csrf_token |
|
438 | context.csrf_token = csrf_token | |
438 | context.backends = rhodecode.BACKENDS.keys() |
|
439 | context.backends = rhodecode.BACKENDS.keys() | |
439 | context.backends.sort() |
|
440 | ||
440 | unread_count = 0 |
|
441 | unread_count = 0 | |
441 | user_bookmark_list = [] |
|
442 | user_bookmark_list = [] | |
442 | if user_id: |
|
443 | if user_id: |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
@@ -49,6 +49,7 b' def send_email(recipients, subject, body' | |||||
49 | :param subject: subject of the mail |
|
49 | :param subject: subject of the mail | |
50 | :param body: body of the mail |
|
50 | :param body: body of the mail | |
51 | :param html_body: html version of body |
|
51 | :param html_body: html version of body | |
|
52 | :param email_config: specify custom configuration for mailer | |||
52 | """ |
|
53 | """ | |
53 | log = get_logger(send_email) |
|
54 | log = get_logger(send_email) | |
54 |
|
55 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2016-20 |
|
3 | # Copyright (C) 2016-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2011-20 |
|
3 | # Copyright (C) 2011-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2012-20 |
|
3 | # Copyright (C) 2012-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -12,10 +12,11 b' from sqlalchemy import __version__ as _s' | |||||
12 |
|
12 | |||
13 | warnings.simplefilter('always', DeprecationWarning) |
|
13 | warnings.simplefilter('always', DeprecationWarning) | |
14 |
|
14 | |||
15 | _sa_version = tuple(int(re.match("\d+", x).group(0)) |
|
15 | _sa_version = tuple(int(re.match("\d+", x).group(0)) for x in _sa_version.split(".")) | |
16 | for x in _sa_version.split(".")) |
|
|||
17 | SQLA_07 = _sa_version >= (0, 7) |
|
16 | SQLA_07 = _sa_version >= (0, 7) | |
18 | SQLA_08 = _sa_version >= (0, 8) |
|
17 | SQLA_08 = _sa_version >= (0, 8) | |
|
18 | SQLA_09 = _sa_version >= (0, 9) | |||
|
19 | SQLA_10 = _sa_version >= (1, 0) | |||
19 |
|
20 | |||
20 | del re |
|
21 | del re | |
21 | del _sa_version |
|
22 | del _sa_version | |
@@ -23,8 +24,8 b' del _sa_version' | |||||
23 | from rhodecode.lib.dbmigrate.migrate.changeset.schema import * |
|
24 | from rhodecode.lib.dbmigrate.migrate.changeset.schema import * | |
24 | from rhodecode.lib.dbmigrate.migrate.changeset.constraint import * |
|
25 | from rhodecode.lib.dbmigrate.migrate.changeset.constraint import * | |
25 |
|
26 | |||
26 | sqlalchemy.schema.Table.__bases__ += (ChangesetTable,) |
|
27 | sqlalchemy.schema.Table.__bases__ += (ChangesetTable, ) | |
27 | sqlalchemy.schema.Column.__bases__ += (ChangesetColumn,) |
|
28 | sqlalchemy.schema.Column.__bases__ += (ChangesetColumn, ) | |
28 | sqlalchemy.schema.Index.__bases__ += (ChangesetIndex,) |
|
29 | sqlalchemy.schema.Index.__bases__ += (ChangesetIndex, ) | |
29 |
|
30 | |||
30 | sqlalchemy.schema.DefaultClause.__bases__ += (ChangesetDefaultClause,) |
|
31 | sqlalchemy.schema.DefaultClause.__bases__ += (ChangesetDefaultClause, ) |
@@ -97,7 +97,6 b' class ANSIColumnGenerator(AlterTableVisi' | |||||
97 |
|
97 | |||
98 | table = self.start_alter_table(column) |
|
98 | table = self.start_alter_table(column) | |
99 | self.append("ADD ") |
|
99 | self.append("ADD ") | |
100 |
|
||||
101 | self.append(self.get_column_specification(column)) |
|
100 | self.append(self.get_column_specification(column)) | |
102 |
|
101 | |||
103 | for cons in column.constraints: |
|
102 | for cons in column.constraints: |
@@ -111,7 +111,7 b' class ForeignKeyConstraint(ConstraintCha' | |||||
111 | refcolnames, reftable = self._normalize_columns(refcolumns, |
|
111 | refcolnames, reftable = self._normalize_columns(refcolumns, | |
112 | table_name=True) |
|
112 | table_name=True) | |
113 | super(ForeignKeyConstraint, self).__init__( |
|
113 | super(ForeignKeyConstraint, self).__init__( | |
114 | colnames, refcolnames, *args,**kwargs |
|
114 | colnames, refcolnames, *args, **kwargs | |
115 | ) |
|
115 | ) | |
116 | if table is not None: |
|
116 | if table is not None: | |
117 | self._set_parent(table) |
|
117 | self._set_parent(table) |
@@ -3,16 +3,20 b'' | |||||
3 |
|
3 | |||
4 | .. _`SQLite`: http://www.sqlite.org/ |
|
4 | .. _`SQLite`: http://www.sqlite.org/ | |
5 | """ |
|
5 | """ | |
6 | from UserDict import DictMixin |
|
6 | try: # Python 3 | |
|
7 | from collections.abc import MutableMapping as DictMixin | |||
|
8 | except ImportError: # Python 2 | |||
|
9 | from UserDict import DictMixin | |||
7 | from copy import copy |
|
10 | from copy import copy | |
8 | import re |
|
11 | import re | |
9 |
|
12 | |||
10 | from sqlalchemy.databases import sqlite as sa_base |
|
13 | from sqlalchemy.databases import sqlite as sa_base | |
|
14 | from sqlalchemy.schema import ForeignKeyConstraint | |||
11 | from sqlalchemy.schema import UniqueConstraint |
|
15 | from sqlalchemy.schema import UniqueConstraint | |
12 |
|
16 | |||
13 | from rhodecode.lib.dbmigrate.migrate import exceptions |
|
17 | from rhodecode.lib.dbmigrate.migrate import exceptions | |
14 | from rhodecode.lib.dbmigrate.migrate.changeset import ansisql |
|
18 | from rhodecode.lib.dbmigrate.migrate.changeset import ansisql | |
15 |
|
19 | import sqlite3 | ||
16 |
|
20 | |||
17 | SQLiteSchemaGenerator = sa_base.SQLiteDDLCompiler |
|
21 | SQLiteSchemaGenerator = sa_base.SQLiteDDLCompiler | |
18 |
|
22 | |||
@@ -73,10 +77,16 b' class SQLiteHelper(SQLiteCommon):' | |||||
73 | cons for cons in table.constraints |
|
77 | cons for cons in table.constraints | |
74 | if omit_uniques is None or cons.name not in omit_uniques |
|
78 | if omit_uniques is None or cons.name not in omit_uniques | |
75 | ]) |
|
79 | ]) | |
|
80 | tup = sqlite3.sqlite_version_info | |||
|
81 | if tup[0] > 3 or (tup[0] == 3 and tup[1] >= 26): | |||
|
82 | self.append('PRAGMA legacy_alter_table = ON') | |||
|
83 | self.execute() | |||
76 |
|
84 | |||
77 | self.append('ALTER TABLE %s RENAME TO migration_tmp' % table_name) |
|
85 | self.append('ALTER TABLE %s RENAME TO migration_tmp' % table_name) | |
78 | self.execute() |
|
86 | self.execute() | |
79 |
|
87 | if tup[0] > 3 or (tup[0] == 3 and tup[1] >= 26): | ||
|
88 | self.append('PRAGMA legacy_alter_table = OFF') | |||
|
89 | self.execute() | |||
80 | insertion_string = self._modify_table(table, column, delta) |
|
90 | insertion_string = self._modify_table(table, column, delta) | |
81 |
|
91 | |||
82 | table.create(bind=self.connection) |
|
92 | table.create(bind=self.connection) |
@@ -1,10 +1,13 b'' | |||||
1 | """ |
|
1 | """ | |
2 | Schema module providing common schema operations. |
|
2 | Schema module providing common schema operations. | |
3 | """ |
|
3 | """ | |
|
4 | import abc | |||
|
5 | try: # Python 3 | |||
|
6 | from collections.abc import MutableMapping as DictMixin | |||
|
7 | except ImportError: # Python 2 | |||
|
8 | from UserDict import DictMixin | |||
4 | import warnings |
|
9 | import warnings | |
5 |
|
10 | |||
6 | from UserDict import DictMixin |
|
|||
7 |
|
||||
8 | import sqlalchemy |
|
11 | import sqlalchemy | |
9 |
|
12 | |||
10 | from sqlalchemy.schema import ForeignKeyConstraint |
|
13 | from sqlalchemy.schema import ForeignKeyConstraint |
@@ -1,6 +1,17 b'' | |||||
1 | """ |
|
1 | """ | |
2 | Safe quoting method |
|
2 | Safe quoting method | |
3 | """ |
|
3 | """ | |
|
4 | from rhodecode.lib.dbmigrate.migrate.changeset import SQLA_10 | |||
|
5 | ||||
|
6 | ||||
|
7 | def fk_column_names(constraint): | |||
|
8 | if SQLA_10: | |||
|
9 | return [ | |||
|
10 | constraint.columns[key].name for key in constraint.column_keys] | |||
|
11 | else: | |||
|
12 | return [ | |||
|
13 | element.parent.name for element in constraint.elements] | |||
|
14 | ||||
4 |
|
15 | |||
5 | def safe_quote(obj): |
|
16 | def safe_quote(obj): | |
6 | # this is the SQLA 0.9 approach |
|
17 | # this is the SQLA 0.9 approach |
@@ -27,6 +27,10 b' class InvalidVersionError(ControlledSche' | |||||
27 | """Invalid version number.""" |
|
27 | """Invalid version number.""" | |
28 |
|
28 | |||
29 |
|
29 | |||
|
30 | class VersionNotFoundError(KeyError): | |||
|
31 | """Specified version is not present.""" | |||
|
32 | ||||
|
33 | ||||
30 | class DatabaseNotControlledError(ControlledSchemaError): |
|
34 | class DatabaseNotControlledError(ControlledSchemaError): | |
31 | """Database should be under version control, but it's not.""" |
|
35 | """Database should be under version control, but it's not.""" | |
32 |
|
36 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
@@ -1,6 +1,6 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 |
# Copyright (C) 2010-20 |
|
3 | # Copyright (C) 2010-2020 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
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