##// END OF EJS Templates
release: Merge default into stable for release preparation
marcink -
r4357:77bbe14f merge stable
parent child Browse files
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
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 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,6 +1,6 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.18.3
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]
6
6
@@ -1,33 +1,28 b''
1 [DEFAULT]
1 [DEFAULT]
2 done = false
2 done = false
3
3
4 [task:bump_version]
4 [task:bump_version]
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 = prepared
20 state = in_progress
24 version = 4.18.3
21 version = 4.19.0
25
26 [task:updated_translation]
27
22
28 [task:generate_js_routes]
23 [task:generate_js_routes]
29
24
30 [task:updated_trial_license]
25 [task:updated_trial_license]
31
26
32 [task:generate_oss_licenses]
27 [task:generate_oss_licenses]
33
28
@@ -1,65 +1,69 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
11 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' -o -iname '*.orig' \) -exec rm '{}' ';'
12 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' -o -iname '*.orig' \) -exec rm '{}' ';'
12
13
13 test:
14 test:
14 make test-clean
15 make test-clean
15 make test-only
16 make test-only
16
17
17 test-clean:
18 test-clean:
18 rm -rf coverage.xml htmlcov junit.xml pylint.log result
19 rm -rf coverage.xml htmlcov junit.xml pylint.log result
19 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
20 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
20 find . -type f \( -iname '.coverage.*' \) -exec rm '{}' ';'
21 find . -type f \( -iname '.coverage.*' \) -exec rm '{}' ';'
21
22
22 test-only:
23 test-only:
23 PYTHONHASHSEED=random \
24 PYTHONHASHSEED=random \
24 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
25 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
25 --cov-report=term-missing --cov-report=html \
26 --cov-report=term-missing --cov-report=html \
26 rhodecode
27 rhodecode
27
28
28 test-only-mysql:
29 test-only-mysql:
29 PYTHONHASHSEED=random \
30 PYTHONHASHSEED=random \
30 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
31 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
31 --cov-report=term-missing --cov-report=html \
32 --cov-report=term-missing --cov-report=html \
32 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test?charset=utf8"}}' \
33 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test?charset=utf8"}}' \
33 rhodecode
34 rhodecode
34
35
35 test-only-postgres:
36 test-only-postgres:
36 PYTHONHASHSEED=random \
37 PYTHONHASHSEED=random \
37 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
38 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
38 --cov-report=term-missing --cov-report=html \
39 --cov-report=term-missing --cov-report=html \
39 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
40 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
40 rhodecode
41 rhodecode
41
42
42
43
43 docs:
44 docs:
44 (cd docs; nix-build default.nix -o result; make clean html)
45 (cd docs; nix-build default.nix -o result; make clean html)
45
46
46 docs-clean:
47 docs-clean:
47 (cd docs; make clean)
48 (cd docs; make clean)
48
49
49 docs-cleanup:
50 docs-cleanup:
50 (cd docs; make cleanup)
51 (cd docs; make cleanup)
51
52
52 web-build:
53 web-build:
53 NODE_PATH=$(NODE_PATH) $(GRUNT)
54 NODE_PATH=$(NODE_PATH) $(GRUNT)
54
55
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" && \
61 sed -i -e 's/http:\/\//https:\/\//g' pkgs/node-packages.nix
65 sed -i -e 's/http:\/\//https:\/\//g' pkgs/node-packages.nix
62
66
63 generate-license-meta:
67 generate-license-meta:
64 nix-build pkgs/license-generate.nix -o result-license && \
68 nix-build pkgs/license-generate.nix -o result-license && \
65 cat result-license/licenses.json | python -m json.tool > rhodecode/config/licenses.json No newline at end of file
69 cat result-license/licenses.json | python -m json.tool > rhodecode/config/licenses.json
@@ -1,833 +1,845 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 ; #########################################
3 ; #########################################
4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
5 ; #########################################
5 ; #########################################
6
6
7 [DEFAULT]
7 [DEFAULT]
8 ; Debug flag sets all loggers to debug, and enables request tracking
8 ; Debug flag sets all loggers to debug, and enables request tracking
9 debug = true
9 debug = true
10
10
11 ; ########################################################################
11 ; ########################################################################
12 ; EMAIL CONFIGURATION
12 ; EMAIL CONFIGURATION
13 ; These settings will be used by the RhodeCode mailing system
13 ; These settings will be used by the RhodeCode mailing system
14 ; ########################################################################
14 ; ########################################################################
15
15
16 ; prefix all emails subjects with given prefix, helps filtering out emails
16 ; prefix all emails subjects with given prefix, helps filtering out emails
17 #email_prefix = [RhodeCode]
17 #email_prefix = [RhodeCode]
18
18
19 ; email FROM address all mails will be sent
19 ; email FROM address all mails will be sent
20 #app_email_from = rhodecode-noreply@localhost
20 #app_email_from = rhodecode-noreply@localhost
21
21
22 #smtp_server = mail.server.com
22 #smtp_server = mail.server.com
23 #smtp_username =
23 #smtp_username =
24 #smtp_password =
24 #smtp_password =
25 #smtp_port =
25 #smtp_port =
26 #smtp_use_tls = false
26 #smtp_use_tls = false
27 #smtp_use_ssl = true
27 #smtp_use_ssl = true
28
28
29 [server:main]
29 [server:main]
30 ; COMMON HOST/IP CONFIG
30 ; COMMON HOST/IP CONFIG
31 host = 127.0.0.1
31 host = 127.0.0.1
32 port = 5000
32 port = 5000
33
33
34 ; ##################################################
34 ; ##################################################
35 ; WAITRESS WSGI SERVER - Recommended for Development
35 ; WAITRESS WSGI SERVER - Recommended for Development
36 ; ##################################################
36 ; ##################################################
37
37
38 ; use server type
38 ; use server type
39 use = egg:waitress#main
39 use = egg:waitress#main
40
40
41 ; number of worker threads
41 ; number of worker threads
42 threads = 5
42 threads = 5
43
43
44 ; MAX BODY SIZE 100GB
44 ; MAX BODY SIZE 100GB
45 max_request_body_size = 107374182400
45 max_request_body_size = 107374182400
46
46
47 ; Use poll instead of select, fixes file descriptors limits problems.
47 ; Use poll instead of select, fixes file descriptors limits problems.
48 ; May not work on old windows systems.
48 ; May not work on old windows systems.
49 asyncore_use_poll = true
49 asyncore_use_poll = true
50
50
51
51
52 ; ###########################
52 ; ###########################
53 ; GUNICORN APPLICATION SERVER
53 ; GUNICORN APPLICATION SERVER
54 ; ###########################
54 ; ###########################
55
55
56 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
56 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
57
57
58 ; Module to use, this setting shouldn't be changed
58 ; Module to use, this setting shouldn't be changed
59 #use = egg:gunicorn#main
59 #use = egg:gunicorn#main
60
60
61 ; Sets the number of process workers. More workers means more concurrent connections
61 ; Sets the number of process workers. More workers means more concurrent connections
62 ; RhodeCode can handle at the same time. Each additional worker also it increases
62 ; RhodeCode can handle at the same time. Each additional worker also it increases
63 ; memory usage as each has it's own set of caches.
63 ; memory usage as each has it's own set of caches.
64 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
64 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
65 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
65 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
66 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
66 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
67 ; when using more than 1 worker.
67 ; when using more than 1 worker.
68 #workers = 2
68 #workers = 2
69
69
70 ; Gunicorn access log level
70 ; Gunicorn access log level
71 #loglevel = info
71 #loglevel = info
72
72
73 ; Process name visible in process list
73 ; Process name visible in process list
74 #proc_name = rhodecode
74 #proc_name = rhodecode
75
75
76 ; Type of worker class, one of `sync`, `gevent`
76 ; Type of worker class, one of `sync`, `gevent`
77 ; Recommended type is `gevent`
77 ; Recommended type is `gevent`
78 #worker_class = gevent
78 #worker_class = gevent
79
79
80 ; The maximum number of simultaneous clients. Valid only for gevent
80 ; The maximum number of simultaneous clients. Valid only for gevent
81 #worker_connections = 10
81 #worker_connections = 10
82
82
83 ; Max number of requests that worker will handle before being gracefully restarted.
83 ; Max number of requests that worker will handle before being gracefully restarted.
84 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
84 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
85 #max_requests = 1000
85 #max_requests = 1000
86 #max_requests_jitter = 30
86 #max_requests_jitter = 30
87
87
88 ; Amount of time a worker can spend with handling a request before it
88 ; Amount of time a worker can spend with handling a request before it
89 ; gets killed and restarted. By default set to 21600 (6hrs)
89 ; gets killed and restarted. By default set to 21600 (6hrs)
90 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
90 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
91 #timeout = 21600
91 #timeout = 21600
92
92
93 ; The maximum size of HTTP request line in bytes.
93 ; The maximum size of HTTP request line in bytes.
94 ; 0 for unlimited
94 ; 0 for unlimited
95 #limit_request_line = 0
95 #limit_request_line = 0
96
96
97 ; Limit the number of HTTP headers fields in a request.
97 ; Limit the number of HTTP headers fields in a request.
98 ; By default this value is 100 and can't be larger than 32768.
98 ; By default this value is 100 and can't be larger than 32768.
99 #limit_request_fields = 32768
99 #limit_request_fields = 32768
100
100
101 ; Limit the allowed size of an HTTP request header field.
101 ; Limit the allowed size of an HTTP request header field.
102 ; Value is a positive number or 0.
102 ; Value is a positive number or 0.
103 ; Setting it to 0 will allow unlimited header field sizes.
103 ; Setting it to 0 will allow unlimited header field sizes.
104 #limit_request_field_size = 0
104 #limit_request_field_size = 0
105
105
106 ; Timeout for graceful workers restart.
106 ; Timeout for graceful workers restart.
107 ; After receiving a restart signal, workers have this much time to finish
107 ; After receiving a restart signal, workers have this much time to finish
108 ; serving requests. Workers still alive after the timeout (starting from the
108 ; serving requests. Workers still alive after the timeout (starting from the
109 ; receipt of the restart signal) are force killed.
109 ; receipt of the restart signal) are force killed.
110 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
110 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
111 #graceful_timeout = 3600
111 #graceful_timeout = 3600
112
112
113 # The number of seconds to wait for requests on a Keep-Alive connection.
113 # The number of seconds to wait for requests on a Keep-Alive connection.
114 # Generally set in the 1-5 seconds range.
114 # Generally set in the 1-5 seconds range.
115 #keepalive = 2
115 #keepalive = 2
116
116
117 ; Maximum memory usage that each worker can use before it will receive a
117 ; Maximum memory usage that each worker can use before it will receive a
118 ; graceful restart signal 0 = memory monitoring is disabled
118 ; graceful restart signal 0 = memory monitoring is disabled
119 ; Examples: 268435456 (256MB), 536870912 (512MB)
119 ; Examples: 268435456 (256MB), 536870912 (512MB)
120 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
120 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
121 #memory_max_usage = 0
121 #memory_max_usage = 0
122
122
123 ; How often in seconds to check for memory usage for each gunicorn worker
123 ; How often in seconds to check for memory usage for each gunicorn worker
124 #memory_usage_check_interval = 60
124 #memory_usage_check_interval = 60
125
125
126 ; Threshold value for which we don't recycle worker if GarbageCollection
126 ; Threshold value for which we don't recycle worker if GarbageCollection
127 ; frees up enough resources. Before each restart we try to run GC on worker
127 ; frees up enough resources. Before each restart we try to run GC on worker
128 ; in case we get enough free memory after that, restart will not happen.
128 ; in case we get enough free memory after that, restart will not happen.
129 #memory_usage_recovery_threshold = 0.8
129 #memory_usage_recovery_threshold = 0.8
130
130
131
131
132 ; Prefix middleware for RhodeCode.
132 ; Prefix middleware for RhodeCode.
133 ; recommended when using proxy setup.
133 ; recommended when using proxy setup.
134 ; allows to set RhodeCode under a prefix in server.
134 ; allows to set RhodeCode under a prefix in server.
135 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
135 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
136 ; And set your prefix like: `prefix = /custom_prefix`
136 ; And set your prefix like: `prefix = /custom_prefix`
137 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
137 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
138 ; to make your cookies only work on prefix url
138 ; to make your cookies only work on prefix url
139 [filter:proxy-prefix]
139 [filter:proxy-prefix]
140 use = egg:PasteDeploy#prefix
140 use = egg:PasteDeploy#prefix
141 prefix = /
141 prefix = /
142
142
143 [app:main]
143 [app:main]
144 ; The %(here)s variable will be replaced with the absolute path of parent directory
144 ; The %(here)s variable will be replaced with the absolute path of parent directory
145 ; of this file
145 ; of this file
146 ; In addition ENVIRONMENT variables usage is possible, e.g
146 ; In addition ENVIRONMENT variables usage is possible, e.g
147 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
147 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
148
148
149 use = egg:rhodecode-enterprise-ce
149 use = egg:rhodecode-enterprise-ce
150
150
151 ; enable proxy prefix middleware, defined above
151 ; enable proxy prefix middleware, defined above
152 #filter-with = proxy-prefix
152 #filter-with = proxy-prefix
153
153
154 ; #############
154 ; #############
155 ; DEBUG OPTIONS
155 ; DEBUG OPTIONS
156 ; #############
156 ; #############
157
157
158 pyramid.reload_templates = true
158 pyramid.reload_templates = true
159
159
160 # During development the we want to have the debug toolbar enabled
160 # During development the we want to have the debug toolbar enabled
161 pyramid.includes =
161 pyramid.includes =
162 pyramid_debugtoolbar
162 pyramid_debugtoolbar
163
163
164 debugtoolbar.hosts = 0.0.0.0/0
164 debugtoolbar.hosts = 0.0.0.0/0
165 debugtoolbar.exclude_prefixes =
165 debugtoolbar.exclude_prefixes =
166 /css
166 /css
167 /fonts
167 /fonts
168 /images
168 /images
169 /js
169 /js
170
170
171 ## RHODECODE PLUGINS ##
171 ## RHODECODE PLUGINS ##
172 rhodecode.includes =
172 rhodecode.includes =
173 rhodecode.api
173 rhodecode.api
174
174
175
175
176 # api prefix url
176 # api prefix url
177 rhodecode.api.url = /_admin/api
177 rhodecode.api.url = /_admin/api
178
178
179 ; enable debug style page
179 ; enable debug style page
180 debug_style = true
180 debug_style = true
181
181
182 ; #################
182 ; #################
183 ; END DEBUG OPTIONS
183 ; END DEBUG OPTIONS
184 ; #################
184 ; #################
185
185
186 ; encryption key used to encrypt social plugin tokens,
186 ; encryption key used to encrypt social plugin tokens,
187 ; remote_urls with credentials etc, if not set it defaults to
187 ; remote_urls with credentials etc, if not set it defaults to
188 ; `beaker.session.secret`
188 ; `beaker.session.secret`
189 #rhodecode.encrypted_values.secret =
189 #rhodecode.encrypted_values.secret =
190
190
191 ; decryption strict mode (enabled by default). It controls if decryption raises
191 ; decryption strict mode (enabled by default). It controls if decryption raises
192 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
192 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
193 #rhodecode.encrypted_values.strict = false
193 #rhodecode.encrypted_values.strict = false
194
194
195 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
195 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
196 ; fernet is safer, and we strongly recommend switching to it.
196 ; fernet is safer, and we strongly recommend switching to it.
197 ; Due to backward compatibility aes is used as default.
197 ; Due to backward compatibility aes is used as default.
198 #rhodecode.encrypted_values.algorithm = fernet
198 #rhodecode.encrypted_values.algorithm = fernet
199
199
200 ; Return gzipped responses from RhodeCode (static files/application)
200 ; Return gzipped responses from RhodeCode (static files/application)
201 gzip_responses = false
201 gzip_responses = false
202
202
203 ; Auto-generate javascript routes file on startup
203 ; Auto-generate javascript routes file on startup
204 generate_js_files = false
204 generate_js_files = false
205
205
206 ; System global default language.
206 ; System global default language.
207 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
207 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
208 lang = en
208 lang = en
209
209
210 ; Perform a full repository scan and import on each server start.
210 ; Perform a full repository scan and import on each server start.
211 ; Settings this to true could lead to very long startup time.
211 ; Settings this to true could lead to very long startup time.
212 startup.import_repos = false
212 startup.import_repos = false
213
213
214 ; Uncomment and set this path to use archive download cache.
214 ; Uncomment and set this path to use archive download cache.
215 ; Once enabled, generated archives will be cached at this location
215 ; Once enabled, generated archives will be cached at this location
216 ; and served from the cache during subsequent requests for the same archive of
216 ; and served from the cache during subsequent requests for the same archive of
217 ; the repository.
217 ; the repository.
218 #archive_cache_dir = /tmp/tarballcache
218 #archive_cache_dir = /tmp/tarballcache
219
219
220 ; URL at which the application is running. This is used for Bootstrapping
220 ; URL at which the application is running. This is used for Bootstrapping
221 ; requests in context when no web request is available. Used in ishell, or
221 ; requests in context when no web request is available. Used in ishell, or
222 ; SSH calls. Set this for events to receive proper url for SSH calls.
222 ; SSH calls. Set this for events to receive proper url for SSH calls.
223 app.base_url = http://rhodecode.local
223 app.base_url = http://rhodecode.local
224
224
225 ; Unique application ID. Should be a random unique string for security.
225 ; Unique application ID. Should be a random unique string for security.
226 app_instance_uuid = rc-production
226 app_instance_uuid = rc-production
227
227
228 ; Cut off limit for large diffs (size in bytes). If overall diff size on
228 ; Cut off limit for large diffs (size in bytes). If overall diff size on
229 ; commit, or pull request exceeds this limit this diff will be displayed
229 ; commit, or pull request exceeds this limit this diff will be displayed
230 ; partially. E.g 512000 == 512Kb
230 ; partially. E.g 512000 == 512Kb
231 cut_off_limit_diff = 512000
231 cut_off_limit_diff = 512000
232
232
233 ; Cut off limit for large files inside diffs (size in bytes). Each individual
233 ; Cut off limit for large files inside diffs (size in bytes). Each individual
234 ; file inside diff which exceeds this limit will be displayed partially.
234 ; file inside diff which exceeds this limit will be displayed partially.
235 ; E.g 128000 == 128Kb
235 ; E.g 128000 == 128Kb
236 cut_off_limit_file = 128000
236 cut_off_limit_file = 128000
237
237
238 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
238 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
239 vcs_full_cache = true
239 vcs_full_cache = true
240
240
241 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
241 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
242 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
242 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
243 force_https = false
243 force_https = false
244
244
245 ; use Strict-Transport-Security headers
245 ; use Strict-Transport-Security headers
246 use_htsts = false
246 use_htsts = false
247
247
248 ; Set to true if your repos are exposed using the dumb protocol
248 ; Set to true if your repos are exposed using the dumb protocol
249 git_update_server_info = false
249 git_update_server_info = false
250
250
251 ; RSS/ATOM feed options
251 ; RSS/ATOM feed options
252 rss_cut_off_limit = 256000
252 rss_cut_off_limit = 256000
253 rss_items_per_page = 10
253 rss_items_per_page = 10
254 rss_include_diff = false
254 rss_include_diff = false
255
255
256 ; gist URL alias, used to create nicer urls for gist. This should be an
256 ; gist URL alias, used to create nicer urls for gist. This should be an
257 ; url that does rewrites to _admin/gists/{gistid}.
257 ; url that does rewrites to _admin/gists/{gistid}.
258 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
258 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
259 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
259 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
260 gist_alias_url =
260 gist_alias_url =
261
261
262 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
262 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
263 ; used for access.
263 ; used for access.
264 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
264 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
265 ; came from the the logged in user who own this authentication token.
265 ; came from the the logged in user who own this authentication token.
266 ; Additionally @TOKEN syntax can be used to bound the view to specific
266 ; Additionally @TOKEN syntax can be used to bound the view to specific
267 ; authentication token. Such view would be only accessible when used together
267 ; authentication token. Such view would be only accessible when used together
268 ; with this authentication token
268 ; with this authentication token
269 ; list of all views can be found under `/_admin/permissions/auth_token_access`
269 ; list of all views can be found under `/_admin/permissions/auth_token_access`
270 ; The list should be "," separated and on a single line.
270 ; The list should be "," separated and on a single line.
271 ; Most common views to enable:
271 ; Most common views to enable:
272
272
273 # RepoCommitsView:repo_commit_download
273 # RepoCommitsView:repo_commit_download
274 # RepoCommitsView:repo_commit_patch
274 # RepoCommitsView:repo_commit_patch
275 # RepoCommitsView:repo_commit_raw
275 # RepoCommitsView:repo_commit_raw
276 # RepoCommitsView:repo_commit_raw@TOKEN
276 # RepoCommitsView:repo_commit_raw@TOKEN
277 # RepoFilesView:repo_files_diff
277 # RepoFilesView:repo_files_diff
278 # RepoFilesView:repo_archivefile
278 # RepoFilesView:repo_archivefile
279 # RepoFilesView:repo_file_raw
279 # RepoFilesView:repo_file_raw
280 # GistView:*
280 # GistView:*
281 api_access_controllers_whitelist =
281 api_access_controllers_whitelist =
282
282
283 ; Default encoding used to convert from and to unicode
283 ; Default encoding used to convert from and to unicode
284 ; can be also a comma separated list of encoding in case of mixed encodings
284 ; can be also a comma separated list of encoding in case of mixed encodings
285 default_encoding = UTF-8
285 default_encoding = UTF-8
286
286
287 ; instance-id prefix
287 ; instance-id prefix
288 ; a prefix key for this instance used for cache invalidation when running
288 ; a prefix key for this instance used for cache invalidation when running
289 ; multiple instances of RhodeCode, make sure it's globally unique for
289 ; multiple instances of RhodeCode, make sure it's globally unique for
290 ; all running RhodeCode instances. Leave empty if you don't use it
290 ; all running RhodeCode instances. Leave empty if you don't use it
291 instance_id =
291 instance_id =
292
292
293 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
293 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
294 ; of an authentication plugin also if it is disabled by it's settings.
294 ; of an authentication plugin also if it is disabled by it's settings.
295 ; This could be useful if you are unable to log in to the system due to broken
295 ; This could be useful if you are unable to log in to the system due to broken
296 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
296 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
297 ; module to log in again and fix the settings.
297 ; module to log in again and fix the settings.
298 ; Available builtin plugin IDs (hash is part of the ID):
298 ; Available builtin plugin IDs (hash is part of the ID):
299 ; egg:rhodecode-enterprise-ce#rhodecode
299 ; egg:rhodecode-enterprise-ce#rhodecode
300 ; egg:rhodecode-enterprise-ce#pam
300 ; egg:rhodecode-enterprise-ce#pam
301 ; egg:rhodecode-enterprise-ce#ldap
301 ; egg:rhodecode-enterprise-ce#ldap
302 ; egg:rhodecode-enterprise-ce#jasig_cas
302 ; egg:rhodecode-enterprise-ce#jasig_cas
303 ; egg:rhodecode-enterprise-ce#headers
303 ; egg:rhodecode-enterprise-ce#headers
304 ; egg:rhodecode-enterprise-ce#crowd
304 ; egg:rhodecode-enterprise-ce#crowd
305
305
306 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
306 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
307
307
308 ; Flag to control loading of legacy plugins in py:/path format
308 ; Flag to control loading of legacy plugins in py:/path format
309 auth_plugin.import_legacy_plugins = true
309 auth_plugin.import_legacy_plugins = true
310
310
311 ; alternative return HTTP header for failed authentication. Default HTTP
311 ; alternative return HTTP header for failed authentication. Default HTTP
312 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
312 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
313 ; handling that causing a series of failed authentication calls.
313 ; handling that causing a series of failed authentication calls.
314 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
314 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
315 ; This will be served instead of default 401 on bad authentication
315 ; This will be served instead of default 401 on bad authentication
316 auth_ret_code =
316 auth_ret_code =
317
317
318 ; use special detection method when serving auth_ret_code, instead of serving
318 ; use special detection method when serving auth_ret_code, instead of serving
319 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
319 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
320 ; and then serve auth_ret_code to clients
320 ; and then serve auth_ret_code to clients
321 auth_ret_code_detection = false
321 auth_ret_code_detection = false
322
322
323 ; locking return code. When repository is locked return this HTTP code. 2XX
323 ; locking return code. When repository is locked return this HTTP code. 2XX
324 ; codes don't break the transactions while 4XX codes do
324 ; codes don't break the transactions while 4XX codes do
325 lock_ret_code = 423
325 lock_ret_code = 423
326
326
327 ; allows to change the repository location in settings page
327 ; allows to change the repository location in settings page
328 allow_repo_location_change = true
328 allow_repo_location_change = true
329
329
330 ; allows to setup custom hooks in settings page
330 ; allows to setup custom hooks in settings page
331 allow_custom_hooks_settings = true
331 allow_custom_hooks_settings = true
332
332
333 ; Generated license token required for EE edition license.
333 ; Generated license token required for EE edition license.
334 ; New generated token value can be found in Admin > settings > license page.
334 ; New generated token value can be found in Admin > settings > license page.
335 license_token =
335 license_token =
336
336
337 ; This flag hides sensitive information on the license page such as token, and license data
337 ; This flag hides sensitive information on the license page such as token, and license data
338 license.hide_license_info = false
338 license.hide_license_info = false
339
339
340 ; supervisor connection uri, for managing supervisor and logs.
340 ; supervisor connection uri, for managing supervisor and logs.
341 supervisor.uri =
341 supervisor.uri =
342
342
343 ; supervisord group name/id we only want this RC instance to handle
343 ; supervisord group name/id we only want this RC instance to handle
344 supervisor.group_id = dev
344 supervisor.group_id = dev
345
345
346 ; Display extended labs settings
346 ; Display extended labs settings
347 labs_settings_active = true
347 labs_settings_active = true
348
348
349 ; Custom exception store path, defaults to TMPDIR
349 ; Custom exception store path, defaults to TMPDIR
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
356 ; Storage backend, available options are: local
367 ; Storage backend, available options are: local
357 file_store.backend = local
368 file_store.backend = local
358
369
359 ; path to store the uploaded binaries
370 ; path to store the uploaded binaries
360 file_store.storage_path = %(here)s/data/file_store
371 file_store.storage_path = %(here)s/data/file_store
361
372
362
373
363 ; #############
374 ; #############
364 ; CELERY CONFIG
375 ; CELERY CONFIG
365 ; #############
376 ; #############
366
377
367 ; manually run celery: /path/to/celery worker -E --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
378 ; manually run celery: /path/to/celery worker -E --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
368
379
369 use_celery = false
380 use_celery = false
370
381
371 ; connection url to the message broker (default redis)
382 ; connection url to the message broker (default redis)
372 celery.broker_url = redis://localhost:6379/8
383 celery.broker_url = redis://localhost:6379/8
373
384
374 ; rabbitmq example
385 ; rabbitmq example
375 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
386 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
376
387
377 ; maximum tasks to execute before worker restart
388 ; maximum tasks to execute before worker restart
378 celery.max_tasks_per_child = 100
389 celery.max_tasks_per_child = 100
379
390
380 ; tasks will never be sent to the queue, but executed locally instead.
391 ; tasks will never be sent to the queue, but executed locally instead.
381 celery.task_always_eager = false
392 celery.task_always_eager = false
382
393
383 ; #############
394 ; #############
384 ; DOGPILE CACHE
395 ; DOGPILE CACHE
385 ; #############
396 ; #############
386
397
387 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
398 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
388 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
399 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
389 cache_dir = %(here)s/data
400 cache_dir = %(here)s/data
390
401
391 ; *********************************************
402 ; *********************************************
392 ; `sql_cache_short` cache for heavy SQL queries
403 ; `sql_cache_short` cache for heavy SQL queries
393 ; Only supported backend is `memory_lru`
404 ; Only supported backend is `memory_lru`
394 ; *********************************************
405 ; *********************************************
395 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
406 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
396 rc_cache.sql_cache_short.expiration_time = 30
407 rc_cache.sql_cache_short.expiration_time = 30
397
408
398
409
399 ; *****************************************************
410 ; *****************************************************
400 ; `cache_repo_longterm` cache for repo object instances
411 ; `cache_repo_longterm` cache for repo object instances
401 ; Only supported backend is `memory_lru`
412 ; Only supported backend is `memory_lru`
402 ; *****************************************************
413 ; *****************************************************
403 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
414 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
404 ; by default we use 30 Days, cache is still invalidated on push
415 ; by default we use 30 Days, cache is still invalidated on push
405 rc_cache.cache_repo_longterm.expiration_time = 2592000
416 rc_cache.cache_repo_longterm.expiration_time = 2592000
406 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
417 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
407 rc_cache.cache_repo_longterm.max_size = 10000
418 rc_cache.cache_repo_longterm.max_size = 10000
408
419
409
420
410 ; *************************************************
421 ; *************************************************
411 ; `cache_perms` cache for permission tree, auth TTL
422 ; `cache_perms` cache for permission tree, auth TTL
412 ; *************************************************
423 ; *************************************************
413 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
424 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
414 rc_cache.cache_perms.expiration_time = 300
425 rc_cache.cache_perms.expiration_time = 300
415 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
426 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
416 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
427 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
417
428
418 ; alternative `cache_perms` redis backend with distributed lock
429 ; alternative `cache_perms` redis backend with distributed lock
419 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
430 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
420 #rc_cache.cache_perms.expiration_time = 300
431 #rc_cache.cache_perms.expiration_time = 300
421
432
422 ; redis_expiration_time needs to be greater then expiration_time
433 ; redis_expiration_time needs to be greater then expiration_time
423 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
434 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
424
435
425 #rc_cache.cache_perms.arguments.host = localhost
436 #rc_cache.cache_perms.arguments.host = localhost
426 #rc_cache.cache_perms.arguments.port = 6379
437 #rc_cache.cache_perms.arguments.port = 6379
427 #rc_cache.cache_perms.arguments.db = 0
438 #rc_cache.cache_perms.arguments.db = 0
428 #rc_cache.cache_perms.arguments.socket_timeout = 30
439 #rc_cache.cache_perms.arguments.socket_timeout = 30
429 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
440 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
430 #rc_cache.cache_perms.arguments.distributed_lock = true
441 #rc_cache.cache_perms.arguments.distributed_lock = true
431
442
432
443
433 ; ***************************************************
444 ; ***************************************************
434 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
445 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
435 ; ***************************************************
446 ; ***************************************************
436 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
447 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
437 rc_cache.cache_repo.expiration_time = 2592000
448 rc_cache.cache_repo.expiration_time = 2592000
438 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
449 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
439 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
450 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
440
451
441 ; alternative `cache_repo` redis backend with distributed lock
452 ; alternative `cache_repo` redis backend with distributed lock
442 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
453 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
443 #rc_cache.cache_repo.expiration_time = 2592000
454 #rc_cache.cache_repo.expiration_time = 2592000
444
455
445 ; redis_expiration_time needs to be greater then expiration_time
456 ; redis_expiration_time needs to be greater then expiration_time
446 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
457 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
447
458
448 #rc_cache.cache_repo.arguments.host = localhost
459 #rc_cache.cache_repo.arguments.host = localhost
449 #rc_cache.cache_repo.arguments.port = 6379
460 #rc_cache.cache_repo.arguments.port = 6379
450 #rc_cache.cache_repo.arguments.db = 1
461 #rc_cache.cache_repo.arguments.db = 1
451 #rc_cache.cache_repo.arguments.socket_timeout = 30
462 #rc_cache.cache_repo.arguments.socket_timeout = 30
452 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
463 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
453 #rc_cache.cache_repo.arguments.distributed_lock = true
464 #rc_cache.cache_repo.arguments.distributed_lock = true
454
465
455
466
456 ; ##############
467 ; ##############
457 ; BEAKER SESSION
468 ; BEAKER SESSION
458 ; ##############
469 ; ##############
459
470
460 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
471 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
461 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
472 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
462 ; Fastest ones are Redis and ext:database
473 ; Fastest ones are Redis and ext:database
463 beaker.session.type = file
474 beaker.session.type = file
464 beaker.session.data_dir = %(here)s/data/sessions
475 beaker.session.data_dir = %(here)s/data/sessions
465
476
466 ; Redis based sessions
477 ; Redis based sessions
467 #beaker.session.type = ext:redis
478 #beaker.session.type = ext:redis
468 #beaker.session.url = redis://127.0.0.1:6379/2
479 #beaker.session.url = redis://127.0.0.1:6379/2
469
480
470 ; DB based session, fast, and allows easy management over logged in users
481 ; DB based session, fast, and allows easy management over logged in users
471 #beaker.session.type = ext:database
482 #beaker.session.type = ext:database
472 #beaker.session.table_name = db_session
483 #beaker.session.table_name = db_session
473 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
484 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
474 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
485 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
475 #beaker.session.sa.pool_recycle = 3600
486 #beaker.session.sa.pool_recycle = 3600
476 #beaker.session.sa.echo = false
487 #beaker.session.sa.echo = false
477
488
478 beaker.session.key = rhodecode
489 beaker.session.key = rhodecode
479 beaker.session.secret = develop-rc-uytcxaz
490 beaker.session.secret = develop-rc-uytcxaz
480 beaker.session.lock_dir = %(here)s/data/sessions/lock
491 beaker.session.lock_dir = %(here)s/data/sessions/lock
481
492
482 ; Secure encrypted cookie. Requires AES and AES python libraries
493 ; Secure encrypted cookie. Requires AES and AES python libraries
483 ; you must disable beaker.session.secret to use this
494 ; you must disable beaker.session.secret to use this
484 #beaker.session.encrypt_key = key_for_encryption
495 #beaker.session.encrypt_key = key_for_encryption
485 #beaker.session.validate_key = validation_key
496 #beaker.session.validate_key = validation_key
486
497
487 ; Sets session as invalid (also logging out user) if it haven not been
498 ; Sets session as invalid (also logging out user) if it haven not been
488 ; accessed for given amount of time in seconds
499 ; accessed for given amount of time in seconds
489 beaker.session.timeout = 2592000
500 beaker.session.timeout = 2592000
490 beaker.session.httponly = true
501 beaker.session.httponly = true
491
502
492 ; Path to use for the cookie. Set to prefix if you use prefix middleware
503 ; Path to use for the cookie. Set to prefix if you use prefix middleware
493 #beaker.session.cookie_path = /custom_prefix
504 #beaker.session.cookie_path = /custom_prefix
494
505
495 ; Set https secure cookie
506 ; Set https secure cookie
496 beaker.session.secure = false
507 beaker.session.secure = false
497
508
498 ; default cookie expiration time in seconds, set to `true` to set expire
509 ; default cookie expiration time in seconds, set to `true` to set expire
499 ; at browser close
510 ; at browser close
500 #beaker.session.cookie_expires = 3600
511 #beaker.session.cookie_expires = 3600
501
512
502 ; #############################
513 ; #############################
503 ; SEARCH INDEXING CONFIGURATION
514 ; SEARCH INDEXING CONFIGURATION
504 ; #############################
515 ; #############################
505
516
506 ; Full text search indexer is available in rhodecode-tools under
517 ; Full text search indexer is available in rhodecode-tools under
507 ; `rhodecode-tools index` command
518 ; `rhodecode-tools index` command
508
519
509 ; WHOOSH Backend, doesn't require additional services to run
520 ; WHOOSH Backend, doesn't require additional services to run
510 ; it works good with few dozen repos
521 ; it works good with few dozen repos
511 search.module = rhodecode.lib.index.whoosh
522 search.module = rhodecode.lib.index.whoosh
512 search.location = %(here)s/data/index
523 search.location = %(here)s/data/index
513
524
514 ; ####################
525 ; ####################
515 ; CHANNELSTREAM CONFIG
526 ; CHANNELSTREAM CONFIG
516 ; ####################
527 ; ####################
517
528
518 ; channelstream enables persistent connections and live notification
529 ; channelstream enables persistent connections and live notification
519 ; in the system. It's also used by the chat system
530 ; in the system. It's also used by the chat system
520
531
521 channelstream.enabled = false
532 channelstream.enabled = false
522
533
523 ; server address for channelstream server on the backend
534 ; server address for channelstream server on the backend
524 channelstream.server = 127.0.0.1:9800
535 channelstream.server = 127.0.0.1:9800
525
536
526 ; location of the channelstream server from outside world
537 ; location of the channelstream server from outside world
527 ; use ws:// for http or wss:// for https. This address needs to be handled
538 ; use ws:// for http or wss:// for https. This address needs to be handled
528 ; by external HTTP server such as Nginx or Apache
539 ; by external HTTP server such as Nginx or Apache
529 ; see Nginx/Apache configuration examples in our docs
540 ; see Nginx/Apache configuration examples in our docs
530 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
541 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
531 channelstream.secret = secret
542 channelstream.secret = secret
532 channelstream.history.location = %(here)s/channelstream_history
543 channelstream.history.location = %(here)s/channelstream_history
533
544
534 ; Internal application path that Javascript uses to connect into.
545 ; Internal application path that Javascript uses to connect into.
535 ; If you use proxy-prefix the prefix should be added before /_channelstream
546 ; If you use proxy-prefix the prefix should be added before /_channelstream
536 channelstream.proxy_path = /_channelstream
547 channelstream.proxy_path = /_channelstream
537
548
538
549
539 ; ##############################
550 ; ##############################
540 ; MAIN RHODECODE DATABASE CONFIG
551 ; MAIN RHODECODE DATABASE CONFIG
541 ; ##############################
552 ; ##############################
542
553
543 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
554 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
544 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
555 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
545 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
556 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
546 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
557 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
547 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
558 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
548
559
549 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
560 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
550
561
551 ; see sqlalchemy docs for other advanced settings
562 ; see sqlalchemy docs for other advanced settings
552 ; print the sql statements to output
563 ; print the sql statements to output
553 sqlalchemy.db1.echo = false
564 sqlalchemy.db1.echo = false
554
565
555 ; recycle the connections after this amount of seconds
566 ; recycle the connections after this amount of seconds
556 sqlalchemy.db1.pool_recycle = 3600
567 sqlalchemy.db1.pool_recycle = 3600
557 sqlalchemy.db1.convert_unicode = true
568 sqlalchemy.db1.convert_unicode = true
558
569
559 ; the number of connections to keep open inside the connection pool.
570 ; the number of connections to keep open inside the connection pool.
560 ; 0 indicates no limit
571 ; 0 indicates no limit
561 #sqlalchemy.db1.pool_size = 5
572 #sqlalchemy.db1.pool_size = 5
562
573
563 ; The number of connections to allow in connection pool "overflow", that is
574 ; The number of connections to allow in connection pool "overflow", that is
564 ; connections that can be opened above and beyond the pool_size setting,
575 ; connections that can be opened above and beyond the pool_size setting,
565 ; which defaults to five.
576 ; which defaults to five.
566 #sqlalchemy.db1.max_overflow = 10
577 #sqlalchemy.db1.max_overflow = 10
567
578
568 ; Connection check ping, used to detect broken database connections
579 ; Connection check ping, used to detect broken database connections
569 ; could be enabled to better handle cases if MySQL has gone away errors
580 ; could be enabled to better handle cases if MySQL has gone away errors
570 #sqlalchemy.db1.ping_connection = true
581 #sqlalchemy.db1.ping_connection = true
571
582
572 ; ##########
583 ; ##########
573 ; VCS CONFIG
584 ; VCS CONFIG
574 ; ##########
585 ; ##########
575 vcs.server.enable = true
586 vcs.server.enable = true
576 vcs.server = localhost:9900
587 vcs.server = localhost:9900
577
588
578 ; Web server connectivity protocol, responsible for web based VCS operations
589 ; Web server connectivity protocol, responsible for web based VCS operations
579 ; Available protocols are:
590 ; Available protocols are:
580 ; `http` - use http-rpc backend (default)
591 ; `http` - use http-rpc backend (default)
581 vcs.server.protocol = http
592 vcs.server.protocol = http
582
593
583 ; Push/Pull operations protocol, available options are:
594 ; Push/Pull operations protocol, available options are:
584 ; `http` - use http-rpc backend (default)
595 ; `http` - use http-rpc backend (default)
585 vcs.scm_app_implementation = http
596 vcs.scm_app_implementation = http
586
597
587 ; Push/Pull operations hooks protocol, available options are:
598 ; Push/Pull operations hooks protocol, available options are:
588 ; `http` - use http-rpc backend (default)
599 ; `http` - use http-rpc backend (default)
589 vcs.hooks.protocol = http
600 vcs.hooks.protocol = http
590
601
591 ; Host on which this instance is listening for hooks. If vcsserver is in other location
602 ; Host on which this instance is listening for hooks. If vcsserver is in other location
592 ; this should be adjusted.
603 ; this should be adjusted.
593 vcs.hooks.host = 127.0.0.1
604 vcs.hooks.host = 127.0.0.1
594
605
595 ; Start VCSServer with this instance as a subprocess, useful for development
606 ; Start VCSServer with this instance as a subprocess, useful for development
596 vcs.start_server = false
607 vcs.start_server = false
597
608
598 ; List of enabled VCS backends, available options are:
609 ; List of enabled VCS backends, available options are:
599 ; `hg` - mercurial
610 ; `hg` - mercurial
600 ; `git` - git
611 ; `git` - git
601 ; `svn` - subversion
612 ; `svn` - subversion
602 vcs.backends = hg, git, svn
613 vcs.backends = hg, git, svn
603
614
604 ; Wait this number of seconds before killing connection to the vcsserver
615 ; Wait this number of seconds before killing connection to the vcsserver
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 ; ####################################################
613 ; Subversion proxy support (mod_dav_svn)
625 ; Subversion proxy support (mod_dav_svn)
614 ; Maps RhodeCode repo groups into SVN paths for Apache
626 ; Maps RhodeCode repo groups into SVN paths for Apache
615 ; ####################################################
627 ; ####################################################
616
628
617 ; Enable or disable the config file generation.
629 ; Enable or disable the config file generation.
618 svn.proxy.generate_config = false
630 svn.proxy.generate_config = false
619
631
620 ; Generate config file with `SVNListParentPath` set to `On`.
632 ; Generate config file with `SVNListParentPath` set to `On`.
621 svn.proxy.list_parent_path = true
633 svn.proxy.list_parent_path = true
622
634
623 ; Set location and file name of generated config file.
635 ; Set location and file name of generated config file.
624 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
636 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
625
637
626 ; alternative mod_dav config template. This needs to be a valid mako template
638 ; alternative mod_dav config template. This needs to be a valid mako template
627 ; Example template can be found in the source code:
639 ; Example template can be found in the source code:
628 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
640 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
629 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
641 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
630
642
631 ; Used as a prefix to the `Location` block in the generated config file.
643 ; Used as a prefix to the `Location` block in the generated config file.
632 ; In most cases it should be set to `/`.
644 ; In most cases it should be set to `/`.
633 svn.proxy.location_root = /
645 svn.proxy.location_root = /
634
646
635 ; Command to reload the mod dav svn configuration on change.
647 ; Command to reload the mod dav svn configuration on change.
636 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
648 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
637 ; Make sure user who runs RhodeCode process is allowed to reload Apache
649 ; Make sure user who runs RhodeCode process is allowed to reload Apache
638 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
650 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
639
651
640 ; If the timeout expires before the reload command finishes, the command will
652 ; If the timeout expires before the reload command finishes, the command will
641 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
653 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
642 #svn.proxy.reload_timeout = 10
654 #svn.proxy.reload_timeout = 10
643
655
644 ; ####################
656 ; ####################
645 ; SSH Support Settings
657 ; SSH Support Settings
646 ; ####################
658 ; ####################
647
659
648 ; Defines if a custom authorized_keys file should be created and written on
660 ; Defines if a custom authorized_keys file should be created and written on
649 ; any change user ssh keys. Setting this to false also disables possibility
661 ; any change user ssh keys. Setting this to false also disables possibility
650 ; of adding SSH keys by users from web interface. Super admins can still
662 ; of adding SSH keys by users from web interface. Super admins can still
651 ; manage SSH Keys.
663 ; manage SSH Keys.
652 ssh.generate_authorized_keyfile = false
664 ssh.generate_authorized_keyfile = false
653
665
654 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
666 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
655 # ssh.authorized_keys_ssh_opts =
667 # ssh.authorized_keys_ssh_opts =
656
668
657 ; Path to the authorized_keys file where the generate entries are placed.
669 ; Path to the authorized_keys file where the generate entries are placed.
658 ; It is possible to have multiple key files specified in `sshd_config` e.g.
670 ; It is possible to have multiple key files specified in `sshd_config` e.g.
659 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
671 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
660 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
672 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
661
673
662 ; Command to execute the SSH wrapper. The binary is available in the
674 ; Command to execute the SSH wrapper. The binary is available in the
663 ; RhodeCode installation directory.
675 ; RhodeCode installation directory.
664 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
676 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
665 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
677 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
666
678
667 ; Allow shell when executing the ssh-wrapper command
679 ; Allow shell when executing the ssh-wrapper command
668 ssh.wrapper_cmd_allow_shell = false
680 ssh.wrapper_cmd_allow_shell = false
669
681
670 ; Enables logging, and detailed output send back to the client during SSH
682 ; Enables logging, and detailed output send back to the client during SSH
671 ; operations. Useful for debugging, shouldn't be used in production.
683 ; operations. Useful for debugging, shouldn't be used in production.
672 ssh.enable_debug_logging = true
684 ssh.enable_debug_logging = true
673
685
674 ; Paths to binary executable, by default they are the names, but we can
686 ; Paths to binary executable, by default they are the names, but we can
675 ; override them if we want to use a custom one
687 ; override them if we want to use a custom one
676 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
688 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
677 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
689 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
678 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
690 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
679
691
680 ; Enables SSH key generator web interface. Disabling this still allows users
692 ; Enables SSH key generator web interface. Disabling this still allows users
681 ; to add their own keys.
693 ; to add their own keys.
682 ssh.enable_ui_key_generator = true
694 ssh.enable_ui_key_generator = true
683
695
684
696
685 ; #################
697 ; #################
686 ; APPENLIGHT CONFIG
698 ; APPENLIGHT CONFIG
687 ; #################
699 ; #################
688
700
689 ; Appenlight is tailored to work with RhodeCode, see
701 ; Appenlight is tailored to work with RhodeCode, see
690 ; http://appenlight.rhodecode.com for details how to obtain an account
702 ; http://appenlight.rhodecode.com for details how to obtain an account
691
703
692 ; Appenlight integration enabled
704 ; Appenlight integration enabled
693 appenlight = false
705 appenlight = false
694
706
695 appenlight.server_url = https://api.appenlight.com
707 appenlight.server_url = https://api.appenlight.com
696 appenlight.api_key = YOUR_API_KEY
708 appenlight.api_key = YOUR_API_KEY
697 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
709 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
698
710
699 ; used for JS client
711 ; used for JS client
700 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
712 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
701
713
702 ; TWEAK AMOUNT OF INFO SENT HERE
714 ; TWEAK AMOUNT OF INFO SENT HERE
703
715
704 ; enables 404 error logging (default False)
716 ; enables 404 error logging (default False)
705 appenlight.report_404 = false
717 appenlight.report_404 = false
706
718
707 ; time in seconds after request is considered being slow (default 1)
719 ; time in seconds after request is considered being slow (default 1)
708 appenlight.slow_request_time = 1
720 appenlight.slow_request_time = 1
709
721
710 ; record slow requests in application
722 ; record slow requests in application
711 ; (needs to be enabled for slow datastore recording and time tracking)
723 ; (needs to be enabled for slow datastore recording and time tracking)
712 appenlight.slow_requests = true
724 appenlight.slow_requests = true
713
725
714 ; enable hooking to application loggers
726 ; enable hooking to application loggers
715 appenlight.logging = true
727 appenlight.logging = true
716
728
717 ; minimum log level for log capture
729 ; minimum log level for log capture
718 appenlight.logging.level = WARNING
730 appenlight.logging.level = WARNING
719
731
720 ; send logs only from erroneous/slow requests
732 ; send logs only from erroneous/slow requests
721 ; (saves API quota for intensive logging)
733 ; (saves API quota for intensive logging)
722 appenlight.logging_on_error = false
734 appenlight.logging_on_error = false
723
735
724 ; list of additional keywords that should be grabbed from environ object
736 ; list of additional keywords that should be grabbed from environ object
725 ; can be string with comma separated list of words in lowercase
737 ; can be string with comma separated list of words in lowercase
726 ; (by default client will always send following info:
738 ; (by default client will always send following info:
727 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
739 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
728 ; start with HTTP* this list be extended with additional keywords here
740 ; start with HTTP* this list be extended with additional keywords here
729 appenlight.environ_keys_whitelist =
741 appenlight.environ_keys_whitelist =
730
742
731 ; list of keywords that should be blanked from request object
743 ; list of keywords that should be blanked from request object
732 ; can be string with comma separated list of words in lowercase
744 ; can be string with comma separated list of words in lowercase
733 ; (by default client will always blank keys that contain following words
745 ; (by default client will always blank keys that contain following words
734 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
746 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
735 ; this list be extended with additional keywords set here
747 ; this list be extended with additional keywords set here
736 appenlight.request_keys_blacklist =
748 appenlight.request_keys_blacklist =
737
749
738 ; list of namespaces that should be ignores when gathering log entries
750 ; list of namespaces that should be ignores when gathering log entries
739 ; can be string with comma separated list of namespaces
751 ; can be string with comma separated list of namespaces
740 ; (by default the client ignores own entries: appenlight_client.client)
752 ; (by default the client ignores own entries: appenlight_client.client)
741 appenlight.log_namespace_blacklist =
753 appenlight.log_namespace_blacklist =
742
754
743 ; Dummy marker to add new entries after.
755 ; Dummy marker to add new entries after.
744 ; Add any custom entries below. Please don't remove this marker.
756 ; Add any custom entries below. Please don't remove this marker.
745 custom.conf = 1
757 custom.conf = 1
746
758
747
759
748 ; #####################
760 ; #####################
749 ; LOGGING CONFIGURATION
761 ; LOGGING CONFIGURATION
750 ; #####################
762 ; #####################
751 [loggers]
763 [loggers]
752 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
764 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
753
765
754 [handlers]
766 [handlers]
755 keys = console, console_sql
767 keys = console, console_sql
756
768
757 [formatters]
769 [formatters]
758 keys = generic, color_formatter, color_formatter_sql
770 keys = generic, color_formatter, color_formatter_sql
759
771
760 ; #######
772 ; #######
761 ; LOGGERS
773 ; LOGGERS
762 ; #######
774 ; #######
763 [logger_root]
775 [logger_root]
764 level = NOTSET
776 level = NOTSET
765 handlers = console
777 handlers = console
766
778
767 [logger_sqlalchemy]
779 [logger_sqlalchemy]
768 level = INFO
780 level = INFO
769 handlers = console_sql
781 handlers = console_sql
770 qualname = sqlalchemy.engine
782 qualname = sqlalchemy.engine
771 propagate = 0
783 propagate = 0
772
784
773 [logger_beaker]
785 [logger_beaker]
774 level = DEBUG
786 level = DEBUG
775 handlers =
787 handlers =
776 qualname = beaker.container
788 qualname = beaker.container
777 propagate = 1
789 propagate = 1
778
790
779 [logger_rhodecode]
791 [logger_rhodecode]
780 level = DEBUG
792 level = DEBUG
781 handlers =
793 handlers =
782 qualname = rhodecode
794 qualname = rhodecode
783 propagate = 1
795 propagate = 1
784
796
785 [logger_ssh_wrapper]
797 [logger_ssh_wrapper]
786 level = DEBUG
798 level = DEBUG
787 handlers =
799 handlers =
788 qualname = ssh_wrapper
800 qualname = ssh_wrapper
789 propagate = 1
801 propagate = 1
790
802
791 [logger_celery]
803 [logger_celery]
792 level = DEBUG
804 level = DEBUG
793 handlers =
805 handlers =
794 qualname = celery
806 qualname = celery
795
807
796
808
797 ; ########
809 ; ########
798 ; HANDLERS
810 ; HANDLERS
799 ; ########
811 ; ########
800
812
801 [handler_console]
813 [handler_console]
802 class = StreamHandler
814 class = StreamHandler
803 args = (sys.stderr, )
815 args = (sys.stderr, )
804 level = DEBUG
816 level = DEBUG
805 formatter = color_formatter
817 formatter = color_formatter
806
818
807 [handler_console_sql]
819 [handler_console_sql]
808 ; "level = DEBUG" logs SQL queries and results.
820 ; "level = DEBUG" logs SQL queries and results.
809 ; "level = INFO" logs SQL queries.
821 ; "level = INFO" logs SQL queries.
810 ; "level = WARN" logs neither. (Recommended for production systems.)
822 ; "level = WARN" logs neither. (Recommended for production systems.)
811 class = StreamHandler
823 class = StreamHandler
812 args = (sys.stderr, )
824 args = (sys.stderr, )
813 level = WARN
825 level = WARN
814 formatter = color_formatter_sql
826 formatter = color_formatter_sql
815
827
816 ; ##########
828 ; ##########
817 ; FORMATTERS
829 ; FORMATTERS
818 ; ##########
830 ; ##########
819
831
820 [formatter_generic]
832 [formatter_generic]
821 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
833 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
822 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
834 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
823 datefmt = %Y-%m-%d %H:%M:%S
835 datefmt = %Y-%m-%d %H:%M:%S
824
836
825 [formatter_color_formatter]
837 [formatter_color_formatter]
826 class = rhodecode.lib.logging_formatter.ColorFormatter
838 class = rhodecode.lib.logging_formatter.ColorFormatter
827 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
839 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
828 datefmt = %Y-%m-%d %H:%M:%S
840 datefmt = %Y-%m-%d %H:%M:%S
829
841
830 [formatter_color_formatter_sql]
842 [formatter_color_formatter_sql]
831 class = rhodecode.lib.logging_formatter.ColorFormatterSql
843 class = rhodecode.lib.logging_formatter.ColorFormatterSql
832 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
844 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
833 datefmt = %Y-%m-%d %H:%M:%S
845 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,784 +1,796 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 ; #########################################
3 ; #########################################
4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
5 ; #########################################
5 ; #########################################
6
6
7 [DEFAULT]
7 [DEFAULT]
8 ; Debug flag sets all loggers to debug, and enables request tracking
8 ; Debug flag sets all loggers to debug, and enables request tracking
9 debug = false
9 debug = false
10
10
11 ; ########################################################################
11 ; ########################################################################
12 ; EMAIL CONFIGURATION
12 ; EMAIL CONFIGURATION
13 ; These settings will be used by the RhodeCode mailing system
13 ; These settings will be used by the RhodeCode mailing system
14 ; ########################################################################
14 ; ########################################################################
15
15
16 ; prefix all emails subjects with given prefix, helps filtering out emails
16 ; prefix all emails subjects with given prefix, helps filtering out emails
17 #email_prefix = [RhodeCode]
17 #email_prefix = [RhodeCode]
18
18
19 ; email FROM address all mails will be sent
19 ; email FROM address all mails will be sent
20 #app_email_from = rhodecode-noreply@localhost
20 #app_email_from = rhodecode-noreply@localhost
21
21
22 #smtp_server = mail.server.com
22 #smtp_server = mail.server.com
23 #smtp_username =
23 #smtp_username =
24 #smtp_password =
24 #smtp_password =
25 #smtp_port =
25 #smtp_port =
26 #smtp_use_tls = false
26 #smtp_use_tls = false
27 #smtp_use_ssl = true
27 #smtp_use_ssl = true
28
28
29 [server:main]
29 [server:main]
30 ; COMMON HOST/IP CONFIG
30 ; COMMON HOST/IP CONFIG
31 host = 127.0.0.1
31 host = 127.0.0.1
32 port = 5000
32 port = 5000
33
33
34
34
35 ; ###########################
35 ; ###########################
36 ; GUNICORN APPLICATION SERVER
36 ; GUNICORN APPLICATION SERVER
37 ; ###########################
37 ; ###########################
38
38
39 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
39 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
40
40
41 ; Module to use, this setting shouldn't be changed
41 ; Module to use, this setting shouldn't be changed
42 use = egg:gunicorn#main
42 use = egg:gunicorn#main
43
43
44 ; Sets the number of process workers. More workers means more concurrent connections
44 ; Sets the number of process workers. More workers means more concurrent connections
45 ; RhodeCode can handle at the same time. Each additional worker also it increases
45 ; RhodeCode can handle at the same time. Each additional worker also it increases
46 ; memory usage as each has it's own set of caches.
46 ; memory usage as each has it's own set of caches.
47 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
47 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
48 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
48 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
49 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
49 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
50 ; when using more than 1 worker.
50 ; when using more than 1 worker.
51 workers = 2
51 workers = 2
52
52
53 ; Gunicorn access log level
53 ; Gunicorn access log level
54 loglevel = info
54 loglevel = info
55
55
56 ; Process name visible in process list
56 ; Process name visible in process list
57 proc_name = rhodecode
57 proc_name = rhodecode
58
58
59 ; Type of worker class, one of `sync`, `gevent`
59 ; Type of worker class, one of `sync`, `gevent`
60 ; Recommended type is `gevent`
60 ; Recommended type is `gevent`
61 worker_class = gevent
61 worker_class = gevent
62
62
63 ; The maximum number of simultaneous clients per worker. Valid only for gevent
63 ; The maximum number of simultaneous clients per worker. Valid only for gevent
64 worker_connections = 10
64 worker_connections = 10
65
65
66 ; Max number of requests that worker will handle before being gracefully restarted.
66 ; Max number of requests that worker will handle before being gracefully restarted.
67 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
67 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
68 max_requests = 1000
68 max_requests = 1000
69 max_requests_jitter = 30
69 max_requests_jitter = 30
70
70
71 ; Amount of time a worker can spend with handling a request before it
71 ; Amount of time a worker can spend with handling a request before it
72 ; gets killed and restarted. By default set to 21600 (6hrs)
72 ; gets killed and restarted. By default set to 21600 (6hrs)
73 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
73 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
74 timeout = 21600
74 timeout = 21600
75
75
76 ; The maximum size of HTTP request line in bytes.
76 ; The maximum size of HTTP request line in bytes.
77 ; 0 for unlimited
77 ; 0 for unlimited
78 limit_request_line = 0
78 limit_request_line = 0
79
79
80 ; Limit the number of HTTP headers fields in a request.
80 ; Limit the number of HTTP headers fields in a request.
81 ; By default this value is 100 and can't be larger than 32768.
81 ; By default this value is 100 and can't be larger than 32768.
82 limit_request_fields = 32768
82 limit_request_fields = 32768
83
83
84 ; Limit the allowed size of an HTTP request header field.
84 ; Limit the allowed size of an HTTP request header field.
85 ; Value is a positive number or 0.
85 ; Value is a positive number or 0.
86 ; Setting it to 0 will allow unlimited header field sizes.
86 ; Setting it to 0 will allow unlimited header field sizes.
87 limit_request_field_size = 0
87 limit_request_field_size = 0
88
88
89 ; Timeout for graceful workers restart.
89 ; Timeout for graceful workers restart.
90 ; After receiving a restart signal, workers have this much time to finish
90 ; After receiving a restart signal, workers have this much time to finish
91 ; serving requests. Workers still alive after the timeout (starting from the
91 ; serving requests. Workers still alive after the timeout (starting from the
92 ; receipt of the restart signal) are force killed.
92 ; receipt of the restart signal) are force killed.
93 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
93 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
94 graceful_timeout = 3600
94 graceful_timeout = 3600
95
95
96 # The number of seconds to wait for requests on a Keep-Alive connection.
96 # The number of seconds to wait for requests on a Keep-Alive connection.
97 # Generally set in the 1-5 seconds range.
97 # Generally set in the 1-5 seconds range.
98 keepalive = 2
98 keepalive = 2
99
99
100 ; Maximum memory usage that each worker can use before it will receive a
100 ; Maximum memory usage that each worker can use before it will receive a
101 ; graceful restart signal 0 = memory monitoring is disabled
101 ; graceful restart signal 0 = memory monitoring is disabled
102 ; Examples: 268435456 (256MB), 536870912 (512MB)
102 ; Examples: 268435456 (256MB), 536870912 (512MB)
103 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
103 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
104 memory_max_usage = 0
104 memory_max_usage = 0
105
105
106 ; How often in seconds to check for memory usage for each gunicorn worker
106 ; How often in seconds to check for memory usage for each gunicorn worker
107 memory_usage_check_interval = 60
107 memory_usage_check_interval = 60
108
108
109 ; Threshold value for which we don't recycle worker if GarbageCollection
109 ; Threshold value for which we don't recycle worker if GarbageCollection
110 ; frees up enough resources. Before each restart we try to run GC on worker
110 ; frees up enough resources. Before each restart we try to run GC on worker
111 ; in case we get enough free memory after that, restart will not happen.
111 ; in case we get enough free memory after that, restart will not happen.
112 memory_usage_recovery_threshold = 0.8
112 memory_usage_recovery_threshold = 0.8
113
113
114
114
115 ; Prefix middleware for RhodeCode.
115 ; Prefix middleware for RhodeCode.
116 ; recommended when using proxy setup.
116 ; recommended when using proxy setup.
117 ; allows to set RhodeCode under a prefix in server.
117 ; allows to set RhodeCode under a prefix in server.
118 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
118 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
119 ; And set your prefix like: `prefix = /custom_prefix`
119 ; And set your prefix like: `prefix = /custom_prefix`
120 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
120 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
121 ; to make your cookies only work on prefix url
121 ; to make your cookies only work on prefix url
122 [filter:proxy-prefix]
122 [filter:proxy-prefix]
123 use = egg:PasteDeploy#prefix
123 use = egg:PasteDeploy#prefix
124 prefix = /
124 prefix = /
125
125
126 [app:main]
126 [app:main]
127 ; The %(here)s variable will be replaced with the absolute path of parent directory
127 ; The %(here)s variable will be replaced with the absolute path of parent directory
128 ; of this file
128 ; of this file
129 ; In addition ENVIRONMENT variables usage is possible, e.g
129 ; In addition ENVIRONMENT variables usage is possible, e.g
130 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
130 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
131
131
132 use = egg:rhodecode-enterprise-ce
132 use = egg:rhodecode-enterprise-ce
133
133
134 ; enable proxy prefix middleware, defined above
134 ; enable proxy prefix middleware, defined above
135 #filter-with = proxy-prefix
135 #filter-with = proxy-prefix
136
136
137 ; encryption key used to encrypt social plugin tokens,
137 ; encryption key used to encrypt social plugin tokens,
138 ; remote_urls with credentials etc, if not set it defaults to
138 ; remote_urls with credentials etc, if not set it defaults to
139 ; `beaker.session.secret`
139 ; `beaker.session.secret`
140 #rhodecode.encrypted_values.secret =
140 #rhodecode.encrypted_values.secret =
141
141
142 ; decryption strict mode (enabled by default). It controls if decryption raises
142 ; decryption strict mode (enabled by default). It controls if decryption raises
143 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
143 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
144 #rhodecode.encrypted_values.strict = false
144 #rhodecode.encrypted_values.strict = false
145
145
146 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
146 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
147 ; fernet is safer, and we strongly recommend switching to it.
147 ; fernet is safer, and we strongly recommend switching to it.
148 ; Due to backward compatibility aes is used as default.
148 ; Due to backward compatibility aes is used as default.
149 #rhodecode.encrypted_values.algorithm = fernet
149 #rhodecode.encrypted_values.algorithm = fernet
150
150
151 ; Return gzipped responses from RhodeCode (static files/application)
151 ; Return gzipped responses from RhodeCode (static files/application)
152 gzip_responses = false
152 gzip_responses = false
153
153
154 ; Auto-generate javascript routes file on startup
154 ; Auto-generate javascript routes file on startup
155 generate_js_files = false
155 generate_js_files = false
156
156
157 ; System global default language.
157 ; System global default language.
158 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
158 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
159 lang = en
159 lang = en
160
160
161 ; Perform a full repository scan and import on each server start.
161 ; Perform a full repository scan and import on each server start.
162 ; Settings this to true could lead to very long startup time.
162 ; Settings this to true could lead to very long startup time.
163 startup.import_repos = false
163 startup.import_repos = false
164
164
165 ; Uncomment and set this path to use archive download cache.
165 ; Uncomment and set this path to use archive download cache.
166 ; Once enabled, generated archives will be cached at this location
166 ; Once enabled, generated archives will be cached at this location
167 ; and served from the cache during subsequent requests for the same archive of
167 ; and served from the cache during subsequent requests for the same archive of
168 ; the repository.
168 ; the repository.
169 #archive_cache_dir = /tmp/tarballcache
169 #archive_cache_dir = /tmp/tarballcache
170
170
171 ; URL at which the application is running. This is used for Bootstrapping
171 ; URL at which the application is running. This is used for Bootstrapping
172 ; requests in context when no web request is available. Used in ishell, or
172 ; requests in context when no web request is available. Used in ishell, or
173 ; SSH calls. Set this for events to receive proper url for SSH calls.
173 ; SSH calls. Set this for events to receive proper url for SSH calls.
174 app.base_url = http://rhodecode.local
174 app.base_url = http://rhodecode.local
175
175
176 ; Unique application ID. Should be a random unique string for security.
176 ; Unique application ID. Should be a random unique string for security.
177 app_instance_uuid = rc-production
177 app_instance_uuid = rc-production
178
178
179 ; Cut off limit for large diffs (size in bytes). If overall diff size on
179 ; Cut off limit for large diffs (size in bytes). If overall diff size on
180 ; commit, or pull request exceeds this limit this diff will be displayed
180 ; commit, or pull request exceeds this limit this diff will be displayed
181 ; partially. E.g 512000 == 512Kb
181 ; partially. E.g 512000 == 512Kb
182 cut_off_limit_diff = 512000
182 cut_off_limit_diff = 512000
183
183
184 ; Cut off limit for large files inside diffs (size in bytes). Each individual
184 ; Cut off limit for large files inside diffs (size in bytes). Each individual
185 ; file inside diff which exceeds this limit will be displayed partially.
185 ; file inside diff which exceeds this limit will be displayed partially.
186 ; E.g 128000 == 128Kb
186 ; E.g 128000 == 128Kb
187 cut_off_limit_file = 128000
187 cut_off_limit_file = 128000
188
188
189 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
189 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
190 vcs_full_cache = true
190 vcs_full_cache = true
191
191
192 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
192 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
193 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
193 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
194 force_https = false
194 force_https = false
195
195
196 ; use Strict-Transport-Security headers
196 ; use Strict-Transport-Security headers
197 use_htsts = false
197 use_htsts = false
198
198
199 ; Set to true if your repos are exposed using the dumb protocol
199 ; Set to true if your repos are exposed using the dumb protocol
200 git_update_server_info = false
200 git_update_server_info = false
201
201
202 ; RSS/ATOM feed options
202 ; RSS/ATOM feed options
203 rss_cut_off_limit = 256000
203 rss_cut_off_limit = 256000
204 rss_items_per_page = 10
204 rss_items_per_page = 10
205 rss_include_diff = false
205 rss_include_diff = false
206
206
207 ; gist URL alias, used to create nicer urls for gist. This should be an
207 ; gist URL alias, used to create nicer urls for gist. This should be an
208 ; url that does rewrites to _admin/gists/{gistid}.
208 ; url that does rewrites to _admin/gists/{gistid}.
209 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
209 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
210 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
210 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
211 gist_alias_url =
211 gist_alias_url =
212
212
213 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
213 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
214 ; used for access.
214 ; used for access.
215 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
215 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
216 ; came from the the logged in user who own this authentication token.
216 ; came from the the logged in user who own this authentication token.
217 ; Additionally @TOKEN syntax can be used to bound the view to specific
217 ; Additionally @TOKEN syntax can be used to bound the view to specific
218 ; authentication token. Such view would be only accessible when used together
218 ; authentication token. Such view would be only accessible when used together
219 ; with this authentication token
219 ; with this authentication token
220 ; list of all views can be found under `/_admin/permissions/auth_token_access`
220 ; list of all views can be found under `/_admin/permissions/auth_token_access`
221 ; The list should be "," separated and on a single line.
221 ; The list should be "," separated and on a single line.
222 ; Most common views to enable:
222 ; Most common views to enable:
223
223
224 # RepoCommitsView:repo_commit_download
224 # RepoCommitsView:repo_commit_download
225 # RepoCommitsView:repo_commit_patch
225 # RepoCommitsView:repo_commit_patch
226 # RepoCommitsView:repo_commit_raw
226 # RepoCommitsView:repo_commit_raw
227 # RepoCommitsView:repo_commit_raw@TOKEN
227 # RepoCommitsView:repo_commit_raw@TOKEN
228 # RepoFilesView:repo_files_diff
228 # RepoFilesView:repo_files_diff
229 # RepoFilesView:repo_archivefile
229 # RepoFilesView:repo_archivefile
230 # RepoFilesView:repo_file_raw
230 # RepoFilesView:repo_file_raw
231 # GistView:*
231 # GistView:*
232 api_access_controllers_whitelist =
232 api_access_controllers_whitelist =
233
233
234 ; Default encoding used to convert from and to unicode
234 ; Default encoding used to convert from and to unicode
235 ; can be also a comma separated list of encoding in case of mixed encodings
235 ; can be also a comma separated list of encoding in case of mixed encodings
236 default_encoding = UTF-8
236 default_encoding = UTF-8
237
237
238 ; instance-id prefix
238 ; instance-id prefix
239 ; a prefix key for this instance used for cache invalidation when running
239 ; a prefix key for this instance used for cache invalidation when running
240 ; multiple instances of RhodeCode, make sure it's globally unique for
240 ; multiple instances of RhodeCode, make sure it's globally unique for
241 ; all running RhodeCode instances. Leave empty if you don't use it
241 ; all running RhodeCode instances. Leave empty if you don't use it
242 instance_id =
242 instance_id =
243
243
244 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
244 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
245 ; of an authentication plugin also if it is disabled by it's settings.
245 ; of an authentication plugin also if it is disabled by it's settings.
246 ; This could be useful if you are unable to log in to the system due to broken
246 ; This could be useful if you are unable to log in to the system due to broken
247 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
247 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
248 ; module to log in again and fix the settings.
248 ; module to log in again and fix the settings.
249 ; Available builtin plugin IDs (hash is part of the ID):
249 ; Available builtin plugin IDs (hash is part of the ID):
250 ; egg:rhodecode-enterprise-ce#rhodecode
250 ; egg:rhodecode-enterprise-ce#rhodecode
251 ; egg:rhodecode-enterprise-ce#pam
251 ; egg:rhodecode-enterprise-ce#pam
252 ; egg:rhodecode-enterprise-ce#ldap
252 ; egg:rhodecode-enterprise-ce#ldap
253 ; egg:rhodecode-enterprise-ce#jasig_cas
253 ; egg:rhodecode-enterprise-ce#jasig_cas
254 ; egg:rhodecode-enterprise-ce#headers
254 ; egg:rhodecode-enterprise-ce#headers
255 ; egg:rhodecode-enterprise-ce#crowd
255 ; egg:rhodecode-enterprise-ce#crowd
256
256
257 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
257 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
258
258
259 ; Flag to control loading of legacy plugins in py:/path format
259 ; Flag to control loading of legacy plugins in py:/path format
260 auth_plugin.import_legacy_plugins = true
260 auth_plugin.import_legacy_plugins = true
261
261
262 ; alternative return HTTP header for failed authentication. Default HTTP
262 ; alternative return HTTP header for failed authentication. Default HTTP
263 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
263 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
264 ; handling that causing a series of failed authentication calls.
264 ; handling that causing a series of failed authentication calls.
265 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
265 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
266 ; This will be served instead of default 401 on bad authentication
266 ; This will be served instead of default 401 on bad authentication
267 auth_ret_code =
267 auth_ret_code =
268
268
269 ; use special detection method when serving auth_ret_code, instead of serving
269 ; use special detection method when serving auth_ret_code, instead of serving
270 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
270 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
271 ; and then serve auth_ret_code to clients
271 ; and then serve auth_ret_code to clients
272 auth_ret_code_detection = false
272 auth_ret_code_detection = false
273
273
274 ; locking return code. When repository is locked return this HTTP code. 2XX
274 ; locking return code. When repository is locked return this HTTP code. 2XX
275 ; codes don't break the transactions while 4XX codes do
275 ; codes don't break the transactions while 4XX codes do
276 lock_ret_code = 423
276 lock_ret_code = 423
277
277
278 ; allows to change the repository location in settings page
278 ; allows to change the repository location in settings page
279 allow_repo_location_change = true
279 allow_repo_location_change = true
280
280
281 ; allows to setup custom hooks in settings page
281 ; allows to setup custom hooks in settings page
282 allow_custom_hooks_settings = true
282 allow_custom_hooks_settings = true
283
283
284 ; Generated license token required for EE edition license.
284 ; Generated license token required for EE edition license.
285 ; New generated token value can be found in Admin > settings > license page.
285 ; New generated token value can be found in Admin > settings > license page.
286 license_token =
286 license_token =
287
287
288 ; This flag hides sensitive information on the license page such as token, and license data
288 ; This flag hides sensitive information on the license page such as token, and license data
289 license.hide_license_info = false
289 license.hide_license_info = false
290
290
291 ; supervisor connection uri, for managing supervisor and logs.
291 ; supervisor connection uri, for managing supervisor and logs.
292 supervisor.uri =
292 supervisor.uri =
293
293
294 ; supervisord group name/id we only want this RC instance to handle
294 ; supervisord group name/id we only want this RC instance to handle
295 supervisor.group_id = prod
295 supervisor.group_id = prod
296
296
297 ; Display extended labs settings
297 ; Display extended labs settings
298 labs_settings_active = true
298 labs_settings_active = true
299
299
300 ; Custom exception store path, defaults to TMPDIR
300 ; Custom exception store path, defaults to TMPDIR
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
307 ; Storage backend, available options are: local
318 ; Storage backend, available options are: local
308 file_store.backend = local
319 file_store.backend = local
309
320
310 ; path to store the uploaded binaries
321 ; path to store the uploaded binaries
311 file_store.storage_path = %(here)s/data/file_store
322 file_store.storage_path = %(here)s/data/file_store
312
323
313
324
314 ; #############
325 ; #############
315 ; CELERY CONFIG
326 ; CELERY CONFIG
316 ; #############
327 ; #############
317
328
318 ; manually run celery: /path/to/celery worker -E --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
329 ; manually run celery: /path/to/celery worker -E --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
319
330
320 use_celery = false
331 use_celery = false
321
332
322 ; connection url to the message broker (default redis)
333 ; connection url to the message broker (default redis)
323 celery.broker_url = redis://localhost:6379/8
334 celery.broker_url = redis://localhost:6379/8
324
335
325 ; rabbitmq example
336 ; rabbitmq example
326 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
337 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
327
338
328 ; maximum tasks to execute before worker restart
339 ; maximum tasks to execute before worker restart
329 celery.max_tasks_per_child = 100
340 celery.max_tasks_per_child = 100
330
341
331 ; tasks will never be sent to the queue, but executed locally instead.
342 ; tasks will never be sent to the queue, but executed locally instead.
332 celery.task_always_eager = false
343 celery.task_always_eager = false
333
344
334 ; #############
345 ; #############
335 ; DOGPILE CACHE
346 ; DOGPILE CACHE
336 ; #############
347 ; #############
337
348
338 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
349 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
339 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
350 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
340 cache_dir = %(here)s/data
351 cache_dir = %(here)s/data
341
352
342 ; *********************************************
353 ; *********************************************
343 ; `sql_cache_short` cache for heavy SQL queries
354 ; `sql_cache_short` cache for heavy SQL queries
344 ; Only supported backend is `memory_lru`
355 ; Only supported backend is `memory_lru`
345 ; *********************************************
356 ; *********************************************
346 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
357 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
347 rc_cache.sql_cache_short.expiration_time = 30
358 rc_cache.sql_cache_short.expiration_time = 30
348
359
349
360
350 ; *****************************************************
361 ; *****************************************************
351 ; `cache_repo_longterm` cache for repo object instances
362 ; `cache_repo_longterm` cache for repo object instances
352 ; Only supported backend is `memory_lru`
363 ; Only supported backend is `memory_lru`
353 ; *****************************************************
364 ; *****************************************************
354 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
365 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
355 ; by default we use 30 Days, cache is still invalidated on push
366 ; by default we use 30 Days, cache is still invalidated on push
356 rc_cache.cache_repo_longterm.expiration_time = 2592000
367 rc_cache.cache_repo_longterm.expiration_time = 2592000
357 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
368 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
358 rc_cache.cache_repo_longterm.max_size = 10000
369 rc_cache.cache_repo_longterm.max_size = 10000
359
370
360
371
361 ; *************************************************
372 ; *************************************************
362 ; `cache_perms` cache for permission tree, auth TTL
373 ; `cache_perms` cache for permission tree, auth TTL
363 ; *************************************************
374 ; *************************************************
364 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
375 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
365 rc_cache.cache_perms.expiration_time = 300
376 rc_cache.cache_perms.expiration_time = 300
366 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
377 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
367 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
378 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
368
379
369 ; alternative `cache_perms` redis backend with distributed lock
380 ; alternative `cache_perms` redis backend with distributed lock
370 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
381 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
371 #rc_cache.cache_perms.expiration_time = 300
382 #rc_cache.cache_perms.expiration_time = 300
372
383
373 ; redis_expiration_time needs to be greater then expiration_time
384 ; redis_expiration_time needs to be greater then expiration_time
374 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
385 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
375
386
376 #rc_cache.cache_perms.arguments.host = localhost
387 #rc_cache.cache_perms.arguments.host = localhost
377 #rc_cache.cache_perms.arguments.port = 6379
388 #rc_cache.cache_perms.arguments.port = 6379
378 #rc_cache.cache_perms.arguments.db = 0
389 #rc_cache.cache_perms.arguments.db = 0
379 #rc_cache.cache_perms.arguments.socket_timeout = 30
390 #rc_cache.cache_perms.arguments.socket_timeout = 30
380 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
391 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
381 #rc_cache.cache_perms.arguments.distributed_lock = true
392 #rc_cache.cache_perms.arguments.distributed_lock = true
382
393
383
394
384 ; ***************************************************
395 ; ***************************************************
385 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
396 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
386 ; ***************************************************
397 ; ***************************************************
387 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
398 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
388 rc_cache.cache_repo.expiration_time = 2592000
399 rc_cache.cache_repo.expiration_time = 2592000
389 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
400 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
390 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
401 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
391
402
392 ; alternative `cache_repo` redis backend with distributed lock
403 ; alternative `cache_repo` redis backend with distributed lock
393 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
404 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
394 #rc_cache.cache_repo.expiration_time = 2592000
405 #rc_cache.cache_repo.expiration_time = 2592000
395
406
396 ; redis_expiration_time needs to be greater then expiration_time
407 ; redis_expiration_time needs to be greater then expiration_time
397 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
408 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
398
409
399 #rc_cache.cache_repo.arguments.host = localhost
410 #rc_cache.cache_repo.arguments.host = localhost
400 #rc_cache.cache_repo.arguments.port = 6379
411 #rc_cache.cache_repo.arguments.port = 6379
401 #rc_cache.cache_repo.arguments.db = 1
412 #rc_cache.cache_repo.arguments.db = 1
402 #rc_cache.cache_repo.arguments.socket_timeout = 30
413 #rc_cache.cache_repo.arguments.socket_timeout = 30
403 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
414 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
404 #rc_cache.cache_repo.arguments.distributed_lock = true
415 #rc_cache.cache_repo.arguments.distributed_lock = true
405
416
406
417
407 ; ##############
418 ; ##############
408 ; BEAKER SESSION
419 ; BEAKER SESSION
409 ; ##############
420 ; ##############
410
421
411 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
422 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
412 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
423 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
413 ; Fastest ones are Redis and ext:database
424 ; Fastest ones are Redis and ext:database
414 beaker.session.type = file
425 beaker.session.type = file
415 beaker.session.data_dir = %(here)s/data/sessions
426 beaker.session.data_dir = %(here)s/data/sessions
416
427
417 ; Redis based sessions
428 ; Redis based sessions
418 #beaker.session.type = ext:redis
429 #beaker.session.type = ext:redis
419 #beaker.session.url = redis://127.0.0.1:6379/2
430 #beaker.session.url = redis://127.0.0.1:6379/2
420
431
421 ; DB based session, fast, and allows easy management over logged in users
432 ; DB based session, fast, and allows easy management over logged in users
422 #beaker.session.type = ext:database
433 #beaker.session.type = ext:database
423 #beaker.session.table_name = db_session
434 #beaker.session.table_name = db_session
424 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
435 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
425 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
436 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
426 #beaker.session.sa.pool_recycle = 3600
437 #beaker.session.sa.pool_recycle = 3600
427 #beaker.session.sa.echo = false
438 #beaker.session.sa.echo = false
428
439
429 beaker.session.key = rhodecode
440 beaker.session.key = rhodecode
430 beaker.session.secret = production-rc-uytcxaz
441 beaker.session.secret = production-rc-uytcxaz
431 beaker.session.lock_dir = %(here)s/data/sessions/lock
442 beaker.session.lock_dir = %(here)s/data/sessions/lock
432
443
433 ; Secure encrypted cookie. Requires AES and AES python libraries
444 ; Secure encrypted cookie. Requires AES and AES python libraries
434 ; you must disable beaker.session.secret to use this
445 ; you must disable beaker.session.secret to use this
435 #beaker.session.encrypt_key = key_for_encryption
446 #beaker.session.encrypt_key = key_for_encryption
436 #beaker.session.validate_key = validation_key
447 #beaker.session.validate_key = validation_key
437
448
438 ; Sets session as invalid (also logging out user) if it haven not been
449 ; Sets session as invalid (also logging out user) if it haven not been
439 ; accessed for given amount of time in seconds
450 ; accessed for given amount of time in seconds
440 beaker.session.timeout = 2592000
451 beaker.session.timeout = 2592000
441 beaker.session.httponly = true
452 beaker.session.httponly = true
442
453
443 ; Path to use for the cookie. Set to prefix if you use prefix middleware
454 ; Path to use for the cookie. Set to prefix if you use prefix middleware
444 #beaker.session.cookie_path = /custom_prefix
455 #beaker.session.cookie_path = /custom_prefix
445
456
446 ; Set https secure cookie
457 ; Set https secure cookie
447 beaker.session.secure = false
458 beaker.session.secure = false
448
459
449 ; default cookie expiration time in seconds, set to `true` to set expire
460 ; default cookie expiration time in seconds, set to `true` to set expire
450 ; at browser close
461 ; at browser close
451 #beaker.session.cookie_expires = 3600
462 #beaker.session.cookie_expires = 3600
452
463
453 ; #############################
464 ; #############################
454 ; SEARCH INDEXING CONFIGURATION
465 ; SEARCH INDEXING CONFIGURATION
455 ; #############################
466 ; #############################
456
467
457 ; Full text search indexer is available in rhodecode-tools under
468 ; Full text search indexer is available in rhodecode-tools under
458 ; `rhodecode-tools index` command
469 ; `rhodecode-tools index` command
459
470
460 ; WHOOSH Backend, doesn't require additional services to run
471 ; WHOOSH Backend, doesn't require additional services to run
461 ; it works good with few dozen repos
472 ; it works good with few dozen repos
462 search.module = rhodecode.lib.index.whoosh
473 search.module = rhodecode.lib.index.whoosh
463 search.location = %(here)s/data/index
474 search.location = %(here)s/data/index
464
475
465 ; ####################
476 ; ####################
466 ; CHANNELSTREAM CONFIG
477 ; CHANNELSTREAM CONFIG
467 ; ####################
478 ; ####################
468
479
469 ; channelstream enables persistent connections and live notification
480 ; channelstream enables persistent connections and live notification
470 ; in the system. It's also used by the chat system
481 ; in the system. It's also used by the chat system
471
482
472 channelstream.enabled = false
483 channelstream.enabled = false
473
484
474 ; server address for channelstream server on the backend
485 ; server address for channelstream server on the backend
475 channelstream.server = 127.0.0.1:9800
486 channelstream.server = 127.0.0.1:9800
476
487
477 ; location of the channelstream server from outside world
488 ; location of the channelstream server from outside world
478 ; use ws:// for http or wss:// for https. This address needs to be handled
489 ; use ws:// for http or wss:// for https. This address needs to be handled
479 ; by external HTTP server such as Nginx or Apache
490 ; by external HTTP server such as Nginx or Apache
480 ; see Nginx/Apache configuration examples in our docs
491 ; see Nginx/Apache configuration examples in our docs
481 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
492 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
482 channelstream.secret = secret
493 channelstream.secret = secret
483 channelstream.history.location = %(here)s/channelstream_history
494 channelstream.history.location = %(here)s/channelstream_history
484
495
485 ; Internal application path that Javascript uses to connect into.
496 ; Internal application path that Javascript uses to connect into.
486 ; If you use proxy-prefix the prefix should be added before /_channelstream
497 ; If you use proxy-prefix the prefix should be added before /_channelstream
487 channelstream.proxy_path = /_channelstream
498 channelstream.proxy_path = /_channelstream
488
499
489
500
490 ; ##############################
501 ; ##############################
491 ; MAIN RHODECODE DATABASE CONFIG
502 ; MAIN RHODECODE DATABASE CONFIG
492 ; ##############################
503 ; ##############################
493
504
494 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
505 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
495 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
506 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
496 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
507 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
497 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
508 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
498 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
509 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
499
510
500 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
511 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
501
512
502 ; see sqlalchemy docs for other advanced settings
513 ; see sqlalchemy docs for other advanced settings
503 ; print the sql statements to output
514 ; print the sql statements to output
504 sqlalchemy.db1.echo = false
515 sqlalchemy.db1.echo = false
505
516
506 ; recycle the connections after this amount of seconds
517 ; recycle the connections after this amount of seconds
507 sqlalchemy.db1.pool_recycle = 3600
518 sqlalchemy.db1.pool_recycle = 3600
508 sqlalchemy.db1.convert_unicode = true
519 sqlalchemy.db1.convert_unicode = true
509
520
510 ; the number of connections to keep open inside the connection pool.
521 ; the number of connections to keep open inside the connection pool.
511 ; 0 indicates no limit
522 ; 0 indicates no limit
512 #sqlalchemy.db1.pool_size = 5
523 #sqlalchemy.db1.pool_size = 5
513
524
514 ; The number of connections to allow in connection pool "overflow", that is
525 ; The number of connections to allow in connection pool "overflow", that is
515 ; connections that can be opened above and beyond the pool_size setting,
526 ; connections that can be opened above and beyond the pool_size setting,
516 ; which defaults to five.
527 ; which defaults to five.
517 #sqlalchemy.db1.max_overflow = 10
528 #sqlalchemy.db1.max_overflow = 10
518
529
519 ; Connection check ping, used to detect broken database connections
530 ; Connection check ping, used to detect broken database connections
520 ; could be enabled to better handle cases if MySQL has gone away errors
531 ; could be enabled to better handle cases if MySQL has gone away errors
521 #sqlalchemy.db1.ping_connection = true
532 #sqlalchemy.db1.ping_connection = true
522
533
523 ; ##########
534 ; ##########
524 ; VCS CONFIG
535 ; VCS CONFIG
525 ; ##########
536 ; ##########
526 vcs.server.enable = true
537 vcs.server.enable = true
527 vcs.server = localhost:9900
538 vcs.server = localhost:9900
528
539
529 ; Web server connectivity protocol, responsible for web based VCS operations
540 ; Web server connectivity protocol, responsible for web based VCS operations
530 ; Available protocols are:
541 ; Available protocols are:
531 ; `http` - use http-rpc backend (default)
542 ; `http` - use http-rpc backend (default)
532 vcs.server.protocol = http
543 vcs.server.protocol = http
533
544
534 ; Push/Pull operations protocol, available options are:
545 ; Push/Pull operations protocol, available options are:
535 ; `http` - use http-rpc backend (default)
546 ; `http` - use http-rpc backend (default)
536 vcs.scm_app_implementation = http
547 vcs.scm_app_implementation = http
537
548
538 ; Push/Pull operations hooks protocol, available options are:
549 ; Push/Pull operations hooks protocol, available options are:
539 ; `http` - use http-rpc backend (default)
550 ; `http` - use http-rpc backend (default)
540 vcs.hooks.protocol = http
551 vcs.hooks.protocol = http
541
552
542 ; Host on which this instance is listening for hooks. If vcsserver is in other location
553 ; Host on which this instance is listening for hooks. If vcsserver is in other location
543 ; this should be adjusted.
554 ; this should be adjusted.
544 vcs.hooks.host = 127.0.0.1
555 vcs.hooks.host = 127.0.0.1
545
556
546 ; Start VCSServer with this instance as a subprocess, useful for development
557 ; Start VCSServer with this instance as a subprocess, useful for development
547 vcs.start_server = false
558 vcs.start_server = false
548
559
549 ; List of enabled VCS backends, available options are:
560 ; List of enabled VCS backends, available options are:
550 ; `hg` - mercurial
561 ; `hg` - mercurial
551 ; `git` - git
562 ; `git` - git
552 ; `svn` - subversion
563 ; `svn` - subversion
553 vcs.backends = hg, git, svn
564 vcs.backends = hg, git, svn
554
565
555 ; Wait this number of seconds before killing connection to the vcsserver
566 ; Wait this number of seconds before killing connection to the vcsserver
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 ; ####################################################
564 ; Subversion proxy support (mod_dav_svn)
576 ; Subversion proxy support (mod_dav_svn)
565 ; Maps RhodeCode repo groups into SVN paths for Apache
577 ; Maps RhodeCode repo groups into SVN paths for Apache
566 ; ####################################################
578 ; ####################################################
567
579
568 ; Enable or disable the config file generation.
580 ; Enable or disable the config file generation.
569 svn.proxy.generate_config = false
581 svn.proxy.generate_config = false
570
582
571 ; Generate config file with `SVNListParentPath` set to `On`.
583 ; Generate config file with `SVNListParentPath` set to `On`.
572 svn.proxy.list_parent_path = true
584 svn.proxy.list_parent_path = true
573
585
574 ; Set location and file name of generated config file.
586 ; Set location and file name of generated config file.
575 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
587 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
576
588
577 ; alternative mod_dav config template. This needs to be a valid mako template
589 ; alternative mod_dav config template. This needs to be a valid mako template
578 ; Example template can be found in the source code:
590 ; Example template can be found in the source code:
579 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
591 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
580 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
592 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
581
593
582 ; Used as a prefix to the `Location` block in the generated config file.
594 ; Used as a prefix to the `Location` block in the generated config file.
583 ; In most cases it should be set to `/`.
595 ; In most cases it should be set to `/`.
584 svn.proxy.location_root = /
596 svn.proxy.location_root = /
585
597
586 ; Command to reload the mod dav svn configuration on change.
598 ; Command to reload the mod dav svn configuration on change.
587 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
599 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
588 ; Make sure user who runs RhodeCode process is allowed to reload Apache
600 ; Make sure user who runs RhodeCode process is allowed to reload Apache
589 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
601 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
590
602
591 ; If the timeout expires before the reload command finishes, the command will
603 ; If the timeout expires before the reload command finishes, the command will
592 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
604 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
593 #svn.proxy.reload_timeout = 10
605 #svn.proxy.reload_timeout = 10
594
606
595 ; ####################
607 ; ####################
596 ; SSH Support Settings
608 ; SSH Support Settings
597 ; ####################
609 ; ####################
598
610
599 ; Defines if a custom authorized_keys file should be created and written on
611 ; Defines if a custom authorized_keys file should be created and written on
600 ; any change user ssh keys. Setting this to false also disables possibility
612 ; any change user ssh keys. Setting this to false also disables possibility
601 ; of adding SSH keys by users from web interface. Super admins can still
613 ; of adding SSH keys by users from web interface. Super admins can still
602 ; manage SSH Keys.
614 ; manage SSH Keys.
603 ssh.generate_authorized_keyfile = false
615 ssh.generate_authorized_keyfile = false
604
616
605 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
617 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
606 # ssh.authorized_keys_ssh_opts =
618 # ssh.authorized_keys_ssh_opts =
607
619
608 ; Path to the authorized_keys file where the generate entries are placed.
620 ; Path to the authorized_keys file where the generate entries are placed.
609 ; It is possible to have multiple key files specified in `sshd_config` e.g.
621 ; It is possible to have multiple key files specified in `sshd_config` e.g.
610 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
622 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
611 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
623 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
612
624
613 ; Command to execute the SSH wrapper. The binary is available in the
625 ; Command to execute the SSH wrapper. The binary is available in the
614 ; RhodeCode installation directory.
626 ; RhodeCode installation directory.
615 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
627 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
616 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
628 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
617
629
618 ; Allow shell when executing the ssh-wrapper command
630 ; Allow shell when executing the ssh-wrapper command
619 ssh.wrapper_cmd_allow_shell = false
631 ssh.wrapper_cmd_allow_shell = false
620
632
621 ; Enables logging, and detailed output send back to the client during SSH
633 ; Enables logging, and detailed output send back to the client during SSH
622 ; operations. Useful for debugging, shouldn't be used in production.
634 ; operations. Useful for debugging, shouldn't be used in production.
623 ssh.enable_debug_logging = false
635 ssh.enable_debug_logging = false
624
636
625 ; Paths to binary executable, by default they are the names, but we can
637 ; Paths to binary executable, by default they are the names, but we can
626 ; override them if we want to use a custom one
638 ; override them if we want to use a custom one
627 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
639 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
628 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
640 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
629 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
641 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
630
642
631 ; Enables SSH key generator web interface. Disabling this still allows users
643 ; Enables SSH key generator web interface. Disabling this still allows users
632 ; to add their own keys.
644 ; to add their own keys.
633 ssh.enable_ui_key_generator = true
645 ssh.enable_ui_key_generator = true
634
646
635
647
636 ; #################
648 ; #################
637 ; APPENLIGHT CONFIG
649 ; APPENLIGHT CONFIG
638 ; #################
650 ; #################
639
651
640 ; Appenlight is tailored to work with RhodeCode, see
652 ; Appenlight is tailored to work with RhodeCode, see
641 ; http://appenlight.rhodecode.com for details how to obtain an account
653 ; http://appenlight.rhodecode.com for details how to obtain an account
642
654
643 ; Appenlight integration enabled
655 ; Appenlight integration enabled
644 appenlight = false
656 appenlight = false
645
657
646 appenlight.server_url = https://api.appenlight.com
658 appenlight.server_url = https://api.appenlight.com
647 appenlight.api_key = YOUR_API_KEY
659 appenlight.api_key = YOUR_API_KEY
648 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
660 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
649
661
650 ; used for JS client
662 ; used for JS client
651 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
663 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
652
664
653 ; TWEAK AMOUNT OF INFO SENT HERE
665 ; TWEAK AMOUNT OF INFO SENT HERE
654
666
655 ; enables 404 error logging (default False)
667 ; enables 404 error logging (default False)
656 appenlight.report_404 = false
668 appenlight.report_404 = false
657
669
658 ; time in seconds after request is considered being slow (default 1)
670 ; time in seconds after request is considered being slow (default 1)
659 appenlight.slow_request_time = 1
671 appenlight.slow_request_time = 1
660
672
661 ; record slow requests in application
673 ; record slow requests in application
662 ; (needs to be enabled for slow datastore recording and time tracking)
674 ; (needs to be enabled for slow datastore recording and time tracking)
663 appenlight.slow_requests = true
675 appenlight.slow_requests = true
664
676
665 ; enable hooking to application loggers
677 ; enable hooking to application loggers
666 appenlight.logging = true
678 appenlight.logging = true
667
679
668 ; minimum log level for log capture
680 ; minimum log level for log capture
669 appenlight.logging.level = WARNING
681 appenlight.logging.level = WARNING
670
682
671 ; send logs only from erroneous/slow requests
683 ; send logs only from erroneous/slow requests
672 ; (saves API quota for intensive logging)
684 ; (saves API quota for intensive logging)
673 appenlight.logging_on_error = false
685 appenlight.logging_on_error = false
674
686
675 ; list of additional keywords that should be grabbed from environ object
687 ; list of additional keywords that should be grabbed from environ object
676 ; can be string with comma separated list of words in lowercase
688 ; can be string with comma separated list of words in lowercase
677 ; (by default client will always send following info:
689 ; (by default client will always send following info:
678 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
690 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
679 ; start with HTTP* this list be extended with additional keywords here
691 ; start with HTTP* this list be extended with additional keywords here
680 appenlight.environ_keys_whitelist =
692 appenlight.environ_keys_whitelist =
681
693
682 ; list of keywords that should be blanked from request object
694 ; list of keywords that should be blanked from request object
683 ; can be string with comma separated list of words in lowercase
695 ; can be string with comma separated list of words in lowercase
684 ; (by default client will always blank keys that contain following words
696 ; (by default client will always blank keys that contain following words
685 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
697 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
686 ; this list be extended with additional keywords set here
698 ; this list be extended with additional keywords set here
687 appenlight.request_keys_blacklist =
699 appenlight.request_keys_blacklist =
688
700
689 ; list of namespaces that should be ignores when gathering log entries
701 ; list of namespaces that should be ignores when gathering log entries
690 ; can be string with comma separated list of namespaces
702 ; can be string with comma separated list of namespaces
691 ; (by default the client ignores own entries: appenlight_client.client)
703 ; (by default the client ignores own entries: appenlight_client.client)
692 appenlight.log_namespace_blacklist =
704 appenlight.log_namespace_blacklist =
693
705
694 ; Dummy marker to add new entries after.
706 ; Dummy marker to add new entries after.
695 ; Add any custom entries below. Please don't remove this marker.
707 ; Add any custom entries below. Please don't remove this marker.
696 custom.conf = 1
708 custom.conf = 1
697
709
698
710
699 ; #####################
711 ; #####################
700 ; LOGGING CONFIGURATION
712 ; LOGGING CONFIGURATION
701 ; #####################
713 ; #####################
702 [loggers]
714 [loggers]
703 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
715 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
704
716
705 [handlers]
717 [handlers]
706 keys = console, console_sql
718 keys = console, console_sql
707
719
708 [formatters]
720 [formatters]
709 keys = generic, color_formatter, color_formatter_sql
721 keys = generic, color_formatter, color_formatter_sql
710
722
711 ; #######
723 ; #######
712 ; LOGGERS
724 ; LOGGERS
713 ; #######
725 ; #######
714 [logger_root]
726 [logger_root]
715 level = NOTSET
727 level = NOTSET
716 handlers = console
728 handlers = console
717
729
718 [logger_sqlalchemy]
730 [logger_sqlalchemy]
719 level = INFO
731 level = INFO
720 handlers = console_sql
732 handlers = console_sql
721 qualname = sqlalchemy.engine
733 qualname = sqlalchemy.engine
722 propagate = 0
734 propagate = 0
723
735
724 [logger_beaker]
736 [logger_beaker]
725 level = DEBUG
737 level = DEBUG
726 handlers =
738 handlers =
727 qualname = beaker.container
739 qualname = beaker.container
728 propagate = 1
740 propagate = 1
729
741
730 [logger_rhodecode]
742 [logger_rhodecode]
731 level = DEBUG
743 level = DEBUG
732 handlers =
744 handlers =
733 qualname = rhodecode
745 qualname = rhodecode
734 propagate = 1
746 propagate = 1
735
747
736 [logger_ssh_wrapper]
748 [logger_ssh_wrapper]
737 level = DEBUG
749 level = DEBUG
738 handlers =
750 handlers =
739 qualname = ssh_wrapper
751 qualname = ssh_wrapper
740 propagate = 1
752 propagate = 1
741
753
742 [logger_celery]
754 [logger_celery]
743 level = DEBUG
755 level = DEBUG
744 handlers =
756 handlers =
745 qualname = celery
757 qualname = celery
746
758
747
759
748 ; ########
760 ; ########
749 ; HANDLERS
761 ; HANDLERS
750 ; ########
762 ; ########
751
763
752 [handler_console]
764 [handler_console]
753 class = StreamHandler
765 class = StreamHandler
754 args = (sys.stderr, )
766 args = (sys.stderr, )
755 level = INFO
767 level = INFO
756 formatter = generic
768 formatter = generic
757
769
758 [handler_console_sql]
770 [handler_console_sql]
759 ; "level = DEBUG" logs SQL queries and results.
771 ; "level = DEBUG" logs SQL queries and results.
760 ; "level = INFO" logs SQL queries.
772 ; "level = INFO" logs SQL queries.
761 ; "level = WARN" logs neither. (Recommended for production systems.)
773 ; "level = WARN" logs neither. (Recommended for production systems.)
762 class = StreamHandler
774 class = StreamHandler
763 args = (sys.stderr, )
775 args = (sys.stderr, )
764 level = WARN
776 level = WARN
765 formatter = generic
777 formatter = generic
766
778
767 ; ##########
779 ; ##########
768 ; FORMATTERS
780 ; FORMATTERS
769 ; ##########
781 ; ##########
770
782
771 [formatter_generic]
783 [formatter_generic]
772 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
784 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
773 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
785 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
774 datefmt = %Y-%m-%d %H:%M:%S
786 datefmt = %Y-%m-%d %H:%M:%S
775
787
776 [formatter_color_formatter]
788 [formatter_color_formatter]
777 class = rhodecode.lib.logging_formatter.ColorFormatter
789 class = rhodecode.lib.logging_formatter.ColorFormatter
778 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
790 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
779 datefmt = %Y-%m-%d %H:%M:%S
791 datefmt = %Y-%m-%d %H:%M:%S
780
792
781 [formatter_color_formatter_sql]
793 [formatter_color_formatter_sql]
782 class = rhodecode.lib.logging_formatter.ColorFormatterSql
794 class = rhodecode.lib.logging_formatter.ColorFormatterSql
783 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
795 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
784 datefmt = %Y-%m-%d %H:%M:%S
796 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,61 +1,104 b''
1 .. _repo-admin-tasks:
1 .. _repo-admin-tasks:
2
2
3 Common Admin Tasks for Repositories
3 Common Admin Tasks for Repositories
4 -----------------------------------
4 -----------------------------------
5
5
6
6
7 Manually Force Delete Repository
7 Manually Force Delete Repository
8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9
9
10 In case of attached forks or pull-requests repositories should be archived.
10 In case of attached forks or pull-requests repositories should be archived.
11 Here is how to force delete a repository and remove all dependent objects
11 Here is how to force delete a repository and remove all dependent objects
12
12
13
13
14 .. code-block:: bash
14 .. code-block:: bash
15 :dedent: 1
15 :dedent: 1
16
16
17 # starts the ishell interactive prompt
17 # starts the ishell interactive prompt
18 $ rccontrol ishell enterprise-1
18 $ rccontrol ishell enterprise-1
19
19
20 .. code-block:: python
20 .. code-block:: python
21 :dedent: 1
21 :dedent: 1
22
22
23 In [4]: from rhodecode.model.repo import RepoModel
23 In [4]: from rhodecode.model.repo import RepoModel
24 In [3]: repo = Repository.get_by_repo_name('test_repos/repo_with_prs')
24 In [3]: repo = Repository.get_by_repo_name('test_repos/repo_with_prs')
25 In [5]: RepoModel().delete(repo, forks='detach', pull_requests='delete')
25 In [5]: RepoModel().delete(repo, forks='detach', pull_requests='delete')
26 In [6]: Session().commit()
26 In [6]: Session().commit()
27
27
28
28
29 Below is a fully automated example to force delete repositories reading from a
29 Below is a fully automated example to force delete repositories reading from a
30 file where each line is a repository name. This can be executed via simple CLI command
30 file where each line is a repository name. This can be executed via simple CLI command
31 without entering the interactive shell.
31 without entering the interactive shell.
32
32
33 Save the below content as a file named `repo_delete_task.py`
33 Save the below content as a file named `repo_delete_task.py`
34
34
35
35
36 .. code-block:: python
36 .. code-block:: python
37 :dedent: 1
37 :dedent: 1
38
38
39 from rhodecode.model.db import *
39 from rhodecode.model.db import *
40 from rhodecode.model.repo import RepoModel
40 from rhodecode.model.repo import RepoModel
41 with open('delete_repos.txt', 'rb') as f:
41 with open('delete_repos.txt', 'rb') as f:
42 # read all lines from file
42 # read all lines from file
43 repos = f.readlines()
43 repos = f.readlines()
44 for repo_name in repos:
44 for repo_name in repos:
45 repo_name = repo_name.strip() # cleanup the name just in case
45 repo_name = repo_name.strip() # cleanup the name just in case
46 repo = Repository.get_by_repo_name(repo_name)
46 repo = Repository.get_by_repo_name(repo_name)
47 if not repo:
47 if not repo:
48 raise Exception('Repo with name {} not found'.format(repo_name))
48 raise Exception('Repo with name {} not found'.format(repo_name))
49 RepoModel().delete(repo, forks='detach', pull_requests='delete')
49 RepoModel().delete(repo, forks='detach', pull_requests='delete')
50 Session().commit()
50 Session().commit()
51 print('Removed repository {}'.format(repo_name))
51 print('Removed repository {}'.format(repo_name))
52
52
53
53
54 The code above will read the names of repositories from a file called `delete_repos.txt`
54 The code above will read the names of repositories from a file called `delete_repos.txt`
55 Each lines should represent a single name e.g `repo_name_1` or `repo_group/repo_name_2`
55 Each lines should represent a single name e.g `repo_name_1` or `repo_group/repo_name_2`
56
56
57 Run this line from CLI to execute the code from the `repo_delete_task.py` file and
57 Run this line from CLI to execute the code from the `repo_delete_task.py` file and
58 exit the ishell after the execution::
58 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
@@ -1,171 +1,172 b''
1 .. _system-overview-ref:
1 .. _system-overview-ref:
2
2
3 System Overview
3 System Overview
4 ===============
4 ===============
5
5
6 Latest Version
6 Latest Version
7 --------------
7 --------------
8
8
9 * |release| on Unix and Windows systems.
9 * |release| on Unix and Windows systems.
10
10
11 System Architecture
11 System Architecture
12 -------------------
12 -------------------
13
13
14 The following diagram shows a typical production architecture.
14 The following diagram shows a typical production architecture.
15
15
16 .. image:: ../images/architecture-diagram.png
16 .. image:: ../images/architecture-diagram.png
17 :align: center
17 :align: center
18
18
19 Supported Operating Systems
19 Supported Operating Systems
20 ---------------------------
20 ---------------------------
21
21
22 Linux
22 Linux
23 ^^^^^
23 ^^^^^
24
24
25 * Ubuntu 14.04
25 * Ubuntu 14.04+
26 * CentOS 6.2 and 7
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
30 * SUSE Linux
31 * SUSE Linux
31
32
32 Windows
33 Windows
33 ^^^^^^^
34 ^^^^^^^
34
35
35 * Windows Vista Ultimate 64bit
36 * Windows Vista Ultimate 64bit
36 * Windows 7 Ultimate 64bit
37 * Windows 7 Ultimate 64bit
37 * Windows 8 Professional 64bit
38 * Windows 8 Professional 64bit
38 * Windows 8.1 Enterprise 64bit
39 * Windows 8.1 Enterprise 64bit
39 * Windows Server 2008 64bit
40 * Windows Server 2008 64bit
40 * Windows Server 2008-R2 64bit
41 * Windows Server 2008-R2 64bit
41 * Windows Server 2012 64bit
42 * Windows Server 2012 64bit
42
43
43 Supported Databases
44 Supported Databases
44 -------------------
45 -------------------
45
46
46 * SQLite
47 * SQLite
47 * MySQL
48 * MySQL
48 * MariaDB
49 * MariaDB
49 * PostgreSQL
50 * PostgreSQL
50
51
51 Supported Browsers
52 Supported Browsers
52 ------------------
53 ------------------
53
54
54 * Chrome
55 * Chrome
55 * Safari
56 * Safari
56 * Firefox
57 * Firefox
57 * Internet Explorer 10 & 11
58 * Internet Explorer 10 & 11
58
59
59 System Requirements
60 System Requirements
60 -------------------
61 -------------------
61
62
62 |RCE| performs best on machines with ultra-fast hard disks. Generally disk
63 |RCE| performs best on machines with ultra-fast hard disks. Generally disk
63 performance is more important than CPU performance. In a corporate production
64 performance is more important than CPU performance. In a corporate production
64 environment handling 1000s of users and |repos| you should deploy on a 12+
65 environment handling 1000s of users and |repos| you should deploy on a 12+
65 core 64GB RAM server. In short, the more RAM the better.
66 core 64GB RAM server. In short, the more RAM the better.
66
67
67
68
68 For example:
69 For example:
69
70
70 - for team of 1 - 5 active users you can run on 1GB RAM machine with 1CPU
71 - for team of 1 - 5 active users you can run on 1GB RAM machine with 1CPU
71 - above 250 active users, |RCE| needs at least 8GB of memory.
72 - above 250 active users, |RCE| needs at least 8GB of memory.
72 Number of CPUs is less important, but recommended to have at least 2-3 CPUs
73 Number of CPUs is less important, but recommended to have at least 2-3 CPUs
73
74
74
75
75 .. _config-rce-files:
76 .. _config-rce-files:
76
77
77 Configuration Files
78 Configuration Files
78 -------------------
79 -------------------
79
80
80 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
81 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
81 * :file:`/home/{user}/.rccontrol/{instance-id}/search_mapping.ini`
82 * :file:`/home/{user}/.rccontrol/{instance-id}/search_mapping.ini`
82 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`
83 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`
83 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.ini`
84 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.ini`
84 * :file:`/home/{user}/.rccontrol.ini`
85 * :file:`/home/{user}/.rccontrol.ini`
85 * :file:`/home/{user}/.rhoderc`
86 * :file:`/home/{user}/.rhoderc`
86 * :file:`/home/{user}/.rccontrol/cache/MANIFEST`
87 * :file:`/home/{user}/.rccontrol/cache/MANIFEST`
87
88
88 For more information, see the :ref:`config-files` section.
89 For more information, see the :ref:`config-files` section.
89
90
90 Log Files
91 Log Files
91 ---------
92 ---------
92
93
93 * :file:`/home/{user}/.rccontrol/{instance-id}/enterprise.log`
94 * :file:`/home/{user}/.rccontrol/{instance-id}/enterprise.log`
94 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.log`
95 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.log`
95 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.log`
96 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.log`
96 * :file:`/tmp/rccontrol.log`
97 * :file:`/tmp/rccontrol.log`
97 * :file:`/tmp/rhodecode_tools.log`
98 * :file:`/tmp/rhodecode_tools.log`
98
99
99 Storage Files
100 Storage Files
100 -------------
101 -------------
101
102
102 * :file:`/home/{user}/.rccontrol/{instance-id}/data/index/{index-file.toc}`
103 * :file:`/home/{user}/.rccontrol/{instance-id}/data/index/{index-file.toc}`
103 * :file:`/home/{user}/repos/.rc_gist_store`
104 * :file:`/home/{user}/repos/.rc_gist_store`
104 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
105 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
105 * :file:`/opt/rhodecode/store/{unique-hash}`
106 * :file:`/opt/rhodecode/store/{unique-hash}`
106
107
107 Default Repositories Location
108 Default Repositories Location
108 -----------------------------
109 -----------------------------
109
110
110 * :file:`/home/{user}/repos`
111 * :file:`/home/{user}/repos`
111
112
112 Connection Methods
113 Connection Methods
113 ------------------
114 ------------------
114
115
115 * HTTPS
116 * HTTPS
116 * SSH
117 * SSH
117 * |RCE| API
118 * |RCE| API
118
119
119 Internationalization Support
120 Internationalization Support
120 ----------------------------
121 ----------------------------
121
122
122 Currently available in the following languages, see `Transifex`_ for the
123 Currently available in the following languages, see `Transifex`_ for the
123 latest details. If you want a new language added, please contact us. To
124 latest details. If you want a new language added, please contact us. To
124 configure your language settings, see the :ref:`set-lang` section.
125 configure your language settings, see the :ref:`set-lang` section.
125
126
126 .. hlist::
127 .. hlist::
127
128
128 * Belorussian
129 * Belorussian
129 * Chinese
130 * Chinese
130 * French
131 * French
131 * German
132 * German
132 * Italian
133 * Italian
133 * Japanese
134 * Japanese
134 * Portuguese
135 * Portuguese
135 * Polish
136 * Polish
136 * Russian
137 * Russian
137 * Spanish
138 * Spanish
138
139
139 Licencing Information
140 Licencing Information
140 ---------------------
141 ---------------------
141
142
142 * See licencing information `here`_
143 * See licencing information `here`_
143
144
144 Peer-to-peer Failover Support
145 Peer-to-peer Failover Support
145 -----------------------------
146 -----------------------------
146
147
147 * Yes
148 * Yes
148
149
149 Additional Binaries
150 Additional Binaries
150 -------------------
151 -------------------
151
152
152 * Yes, see :ref:`rhodecode-nix-ref` for full details.
153 * Yes, see :ref:`rhodecode-nix-ref` for full details.
153
154
154 Remote Connectivity
155 Remote Connectivity
155 -------------------
156 -------------------
156
157
157 * Available
158 * Available
158
159
159 Executable Files
160 Executable Files
160 ----------------
161 ----------------
161
162
162 Windows: :file:`RhodeCode-installer-{version}.exe`
163 Windows: :file:`RhodeCode-installer-{version}.exe`
163
164
164 Deprecated Support
165 Deprecated Support
165 ------------------
166 ------------------
166
167
167 - Internet Explorer 8 support deprecated since version 3.7.0.
168 - Internet Explorer 8 support deprecated since version 3.7.0.
168 - Internet Explorer 9 support deprecated since version 3.8.0.
169 - Internet Explorer 9 support deprecated since version 3.8.0.
169
170
170 .. _here: https://rhodecode.com/licenses/
171 .. _here: https://rhodecode.com/licenses/
171 .. _Transifex: https://www.transifex.com/projects/p/RhodeCode/
172 .. _Transifex: https://www.transifex.com/projects/p/RhodeCode/
@@ -1,442 +1,447 b''
1 .. _pull-request-methods-ref:
1 .. _pull-request-methods-ref:
2
2
3 pull_request methods
3 pull_request methods
4 ====================
4 ====================
5
5
6 close_pull_request
6 close_pull_request
7 ------------------
7 ------------------
8
8
9 .. py:function:: close_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>, message=<Optional:''>)
9 .. py:function:: close_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>, message=<Optional:''>)
10
10
11 Close the pull request specified by `pullrequestid`.
11 Close the pull request specified by `pullrequestid`.
12
12
13 :param apiuser: This is filled automatically from the |authtoken|.
13 :param apiuser: This is filled automatically from the |authtoken|.
14 :type apiuser: AuthUser
14 :type apiuser: AuthUser
15 :param repoid: Repository name or repository ID to which the pull
15 :param repoid: Repository name or repository ID to which the pull
16 request belongs.
16 request belongs.
17 :type repoid: str or int
17 :type repoid: str or int
18 :param pullrequestid: ID of the pull request to be closed.
18 :param pullrequestid: ID of the pull request to be closed.
19 :type pullrequestid: int
19 :type pullrequestid: int
20 :param userid: Close the pull request as this user.
20 :param userid: Close the pull request as this user.
21 :type userid: Optional(str or int)
21 :type userid: Optional(str or int)
22 :param message: Optional message to close the Pull Request with. If not
22 :param message: Optional message to close the Pull Request with. If not
23 specified it will be generated automatically.
23 specified it will be generated automatically.
24 :type message: Optional(str)
24 :type message: Optional(str)
25
25
26 Example output:
26 Example output:
27
27
28 .. code-block:: bash
28 .. code-block:: bash
29
29
30 "id": <id_given_in_input>,
30 "id": <id_given_in_input>,
31 "result": {
31 "result": {
32 "pull_request_id": "<int>",
32 "pull_request_id": "<int>",
33 "close_status": "<str:status_lbl>,
33 "close_status": "<str:status_lbl>,
34 "closed": "<bool>"
34 "closed": "<bool>"
35 },
35 },
36 "error": null
36 "error": null
37
37
38
38
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
46 review status.
46 review status.
47
47
48 :param apiuser: This is filled automatically from the |authtoken|.
48 :param apiuser: This is filled automatically from the |authtoken|.
49 :type apiuser: AuthUser
49 :type apiuser: AuthUser
50 :param repoid: Optional repository name or repository ID.
50 :param repoid: Optional repository name or repository ID.
51 :type repoid: str or int
51 :type repoid: str or int
52 :param pullrequestid: The pull request ID.
52 :param pullrequestid: The pull request ID.
53 :type pullrequestid: int
53 :type pullrequestid: int
54 :param commit_id: Specify the commit_id for which to set a comment. If
54 :param commit_id: Specify the commit_id for which to set a comment. If
55 given commit_id is different than latest in the PR status
55 given commit_id is different than latest in the PR status
56 change won't be performed.
56 change won't be performed.
57 :type commit_id: str
57 :type commit_id: str
58 :param message: The text content of the comment.
58 :param message: The text content of the comment.
59 :type message: str
59 :type message: str
60 :param status: (**Optional**) Set the approval status of the pull
60 :param status: (**Optional**) Set the approval status of the pull
61 request. One of: 'not_reviewed', 'approved', 'rejected',
61 request. One of: 'not_reviewed', 'approved', 'rejected',
62 'under_review'
62 'under_review'
63 :type status: str
63 :type status: str
64 :param comment_type: Comment type, one of: 'note', 'todo'
64 :param comment_type: Comment type, one of: 'note', 'todo'
65 :type comment_type: Optional(str), default: 'note'
65 :type comment_type: Optional(str), default: 'note'
66 :param resolves_comment_id: id of comment which this one will resolve
66 :param resolves_comment_id: id of comment which this one will resolve
67 :type resolves_comment_id: Optional(int)
67 :type resolves_comment_id: Optional(int)
68 :param extra_recipients: list of user ids or usernames to add
68 :param extra_recipients: list of user ids or usernames to add
69 notifications for this comment. Acts like a CC for notification
69 notifications for this comment. Acts like a CC for notification
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
76 .. code-block:: bash
78 .. code-block:: bash
77
79
78 id : <id_given_in_input>
80 id : <id_given_in_input>
79 result : {
81 result : {
80 "pull_request_id": "<Integer>",
82 "pull_request_id": "<Integer>",
81 "comment_id": "<Integer>",
83 "comment_id": "<Integer>",
82 "status": {"given": <given_status>,
84 "status": {"given": <given_status>,
83 "was_changed": <bool status_was_actually_changed> },
85 "was_changed": <bool status_was_actually_changed> },
84 },
86 },
85 error : null
87 error : null
86
88
87
89
88 create_pull_request
90 create_pull_request
89 -------------------
91 -------------------
90
92
91 .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, owner=<Optional:<OptionalAttr:apiuser>>, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>)
93 .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, owner=<Optional:<OptionalAttr:apiuser>>, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>)
92
94
93 Creates a new pull request.
95 Creates a new pull request.
94
96
95 Accepts refs in the following formats:
97 Accepts refs in the following formats:
96
98
97 * branch:<branch_name>:<sha>
99 * branch:<branch_name>:<sha>
98 * branch:<branch_name>
100 * branch:<branch_name>
99 * bookmark:<bookmark_name>:<sha> (Mercurial only)
101 * bookmark:<bookmark_name>:<sha> (Mercurial only)
100 * bookmark:<bookmark_name> (Mercurial only)
102 * bookmark:<bookmark_name> (Mercurial only)
101
103
102 :param apiuser: This is filled automatically from the |authtoken|.
104 :param apiuser: This is filled automatically from the |authtoken|.
103 :type apiuser: AuthUser
105 :type apiuser: AuthUser
104 :param source_repo: Set the source repository name.
106 :param source_repo: Set the source repository name.
105 :type source_repo: str
107 :type source_repo: str
106 :param target_repo: Set the target repository name.
108 :param target_repo: Set the target repository name.
107 :type target_repo: str
109 :type target_repo: str
108 :param source_ref: Set the source ref name.
110 :param source_ref: Set the source ref name.
109 :type source_ref: str
111 :type source_ref: str
110 :param target_ref: Set the target ref name.
112 :param target_ref: Set the target ref name.
111 :type target_ref: str
113 :type target_ref: str
112 :param owner: user_id or username
114 :param owner: user_id or username
113 :type owner: Optional(str)
115 :type owner: Optional(str)
114 :param title: Optionally Set the pull request title, it's generated otherwise
116 :param title: Optionally Set the pull request title, it's generated otherwise
115 :type title: str
117 :type title: str
116 :param description: Set the pull request description.
118 :param description: Set the pull request description.
117 :type description: Optional(str)
119 :type description: Optional(str)
118 :type description_renderer: Optional(str)
120 :type description_renderer: Optional(str)
119 :param description_renderer: Set pull request renderer for the description.
121 :param description_renderer: Set pull request renderer for the description.
120 It should be 'rst', 'markdown' or 'plain'. If not give default
122 It should be 'rst', 'markdown' or 'plain'. If not give default
121 system renderer will be used
123 system renderer will be used
122 :param reviewers: Set the new pull request reviewers list.
124 :param reviewers: Set the new pull request reviewers list.
123 Reviewer defined by review rules will be added automatically to the
125 Reviewer defined by review rules will be added automatically to the
124 defined list.
126 defined list.
125 :type reviewers: Optional(list)
127 :type reviewers: Optional(list)
126 Accepts username strings or objects of the format:
128 Accepts username strings or objects of the format:
127
129
128 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
130 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
129
131
130
132
131 get_pull_request
133 get_pull_request
132 ----------------
134 ----------------
133
135
134 .. py:function:: get_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, merge_state=<Optional:False>)
136 .. py:function:: get_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, merge_state=<Optional:False>)
135
137
136 Get a pull request based on the given ID.
138 Get a pull request based on the given ID.
137
139
138 :param apiuser: This is filled automatically from the |authtoken|.
140 :param apiuser: This is filled automatically from the |authtoken|.
139 :type apiuser: AuthUser
141 :type apiuser: AuthUser
140 :param repoid: Optional, repository name or repository ID from where
142 :param repoid: Optional, repository name or repository ID from where
141 the pull request was opened.
143 the pull request was opened.
142 :type repoid: str or int
144 :type repoid: str or int
143 :param pullrequestid: ID of the requested pull request.
145 :param pullrequestid: ID of the requested pull request.
144 :type pullrequestid: int
146 :type pullrequestid: int
145 :param merge_state: Optional calculate merge state for each repository.
147 :param merge_state: Optional calculate merge state for each repository.
146 This could result in longer time to fetch the data
148 This could result in longer time to fetch the data
147 :type merge_state: bool
149 :type merge_state: bool
148
150
149 Example output:
151 Example output:
150
152
151 .. code-block:: bash
153 .. code-block:: bash
152
154
153 "id": <id_given_in_input>,
155 "id": <id_given_in_input>,
154 "result":
156 "result":
155 {
157 {
156 "pull_request_id": "<pull_request_id>",
158 "pull_request_id": "<pull_request_id>",
157 "url": "<url>",
159 "url": "<url>",
158 "title": "<title>",
160 "title": "<title>",
159 "description": "<description>",
161 "description": "<description>",
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>",
166 "<commit_id>",
169 "<commit_id>",
167 ...
170 ...
168 ],
171 ],
169 "review_status": "<review_status>",
172 "review_status": "<review_status>",
170 "mergeable": {
173 "mergeable": {
171 "status": "<bool>",
174 "status": "<bool>",
172 "message": "<message>",
175 "message": "<message>",
173 },
176 },
174 "source": {
177 "source": {
175 "clone_url": "<clone_url>",
178 "clone_url": "<clone_url>",
176 "repository": "<repository_name>",
179 "repository": "<repository_name>",
177 "reference":
180 "reference":
178 {
181 {
179 "name": "<name>",
182 "name": "<name>",
180 "type": "<type>",
183 "type": "<type>",
181 "commit_id": "<commit_id>",
184 "commit_id": "<commit_id>",
182 }
185 }
183 },
186 },
184 "target": {
187 "target": {
185 "clone_url": "<clone_url>",
188 "clone_url": "<clone_url>",
186 "repository": "<repository_name>",
189 "repository": "<repository_name>",
187 "reference":
190 "reference":
188 {
191 {
189 "name": "<name>",
192 "name": "<name>",
190 "type": "<type>",
193 "type": "<type>",
191 "commit_id": "<commit_id>",
194 "commit_id": "<commit_id>",
192 }
195 }
193 },
196 },
194 "merge": {
197 "merge": {
195 "clone_url": "<clone_url>",
198 "clone_url": "<clone_url>",
196 "reference":
199 "reference":
197 {
200 {
198 "name": "<name>",
201 "name": "<name>",
199 "type": "<type>",
202 "type": "<type>",
200 "commit_id": "<commit_id>",
203 "commit_id": "<commit_id>",
201 }
204 }
202 },
205 },
203 "author": <user_obj>,
206 "author": <user_obj>,
204 "reviewers": [
207 "reviewers": [
205 ...
208 ...
206 {
209 {
207 "user": "<user_obj>",
210 "user": "<user_obj>",
208 "review_status": "<review_status>",
211 "review_status": "<review_status>",
209 }
212 }
210 ...
213 ...
211 ]
214 ]
212 },
215 },
213 "error": null
216 "error": null
214
217
215
218
216 get_pull_request_comments
219 get_pull_request_comments
217 -------------------------
220 -------------------------
218
221
219 .. py:function:: get_pull_request_comments(apiuser, pullrequestid, repoid=<Optional:None>)
222 .. py:function:: get_pull_request_comments(apiuser, pullrequestid, repoid=<Optional:None>)
220
223
221 Get all comments of pull request specified with the `pullrequestid`
224 Get all comments of pull request specified with the `pullrequestid`
222
225
223 :param apiuser: This is filled automatically from the |authtoken|.
226 :param apiuser: This is filled automatically from the |authtoken|.
224 :type apiuser: AuthUser
227 :type apiuser: AuthUser
225 :param repoid: Optional repository name or repository ID.
228 :param repoid: Optional repository name or repository ID.
226 :type repoid: str or int
229 :type repoid: str or int
227 :param pullrequestid: The pull request ID.
230 :param pullrequestid: The pull request ID.
228 :type pullrequestid: int
231 :type pullrequestid: int
229
232
230 Example output:
233 Example output:
231
234
232 .. code-block:: bash
235 .. code-block:: bash
233
236
234 id : <id_given_in_input>
237 id : <id_given_in_input>
235 result : [
238 result : [
236 {
239 {
237 "comment_author": {
240 "comment_author": {
238 "active": true,
241 "active": true,
239 "full_name_or_username": "Tom Gore",
242 "full_name_or_username": "Tom Gore",
240 "username": "admin"
243 "username": "admin"
241 },
244 },
242 "comment_created_on": "2017-01-02T18:43:45.533",
245 "comment_created_on": "2017-01-02T18:43:45.533",
243 "comment_f_path": null,
246 "comment_f_path": null,
244 "comment_id": 25,
247 "comment_id": 25,
245 "comment_lineno": null,
248 "comment_lineno": null,
246 "comment_status": {
249 "comment_status": {
247 "status": "under_review",
250 "status": "under_review",
248 "status_lbl": "Under Review"
251 "status_lbl": "Under Review"
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
256
261
257
262
258 get_pull_requests
263 get_pull_requests
259 -----------------
264 -----------------
260
265
261 .. py:function:: get_pull_requests(apiuser, repoid, status=<Optional:'new'>, merge_state=<Optional:False>)
266 .. py:function:: get_pull_requests(apiuser, repoid, status=<Optional:'new'>, merge_state=<Optional:False>)
262
267
263 Get all pull requests from the repository specified in `repoid`.
268 Get all pull requests from the repository specified in `repoid`.
264
269
265 :param apiuser: This is filled automatically from the |authtoken|.
270 :param apiuser: This is filled automatically from the |authtoken|.
266 :type apiuser: AuthUser
271 :type apiuser: AuthUser
267 :param repoid: Optional repository name or repository ID.
272 :param repoid: Optional repository name or repository ID.
268 :type repoid: str or int
273 :type repoid: str or int
269 :param status: Only return pull requests with the specified status.
274 :param status: Only return pull requests with the specified status.
270 Valid options are.
275 Valid options are.
271 * ``new`` (default)
276 * ``new`` (default)
272 * ``open``
277 * ``open``
273 * ``closed``
278 * ``closed``
274 :type status: str
279 :type status: str
275 :param merge_state: Optional calculate merge state for each repository.
280 :param merge_state: Optional calculate merge state for each repository.
276 This could result in longer time to fetch the data
281 This could result in longer time to fetch the data
277 :type merge_state: bool
282 :type merge_state: bool
278
283
279 Example output:
284 Example output:
280
285
281 .. code-block:: bash
286 .. code-block:: bash
282
287
283 "id": <id_given_in_input>,
288 "id": <id_given_in_input>,
284 "result":
289 "result":
285 [
290 [
286 ...
291 ...
287 {
292 {
288 "pull_request_id": "<pull_request_id>",
293 "pull_request_id": "<pull_request_id>",
289 "url": "<url>",
294 "url": "<url>",
290 "title" : "<title>",
295 "title" : "<title>",
291 "description": "<description>",
296 "description": "<description>",
292 "status": "<status>",
297 "status": "<status>",
293 "created_on": "<date_time_created>",
298 "created_on": "<date_time_created>",
294 "updated_on": "<date_time_updated>",
299 "updated_on": "<date_time_updated>",
295 "commit_ids": [
300 "commit_ids": [
296 ...
301 ...
297 "<commit_id>",
302 "<commit_id>",
298 "<commit_id>",
303 "<commit_id>",
299 ...
304 ...
300 ],
305 ],
301 "review_status": "<review_status>",
306 "review_status": "<review_status>",
302 "mergeable": {
307 "mergeable": {
303 "status": "<bool>",
308 "status": "<bool>",
304 "message: "<message>",
309 "message: "<message>",
305 },
310 },
306 "source": {
311 "source": {
307 "clone_url": "<clone_url>",
312 "clone_url": "<clone_url>",
308 "reference":
313 "reference":
309 {
314 {
310 "name": "<name>",
315 "name": "<name>",
311 "type": "<type>",
316 "type": "<type>",
312 "commit_id": "<commit_id>",
317 "commit_id": "<commit_id>",
313 }
318 }
314 },
319 },
315 "target": {
320 "target": {
316 "clone_url": "<clone_url>",
321 "clone_url": "<clone_url>",
317 "reference":
322 "reference":
318 {
323 {
319 "name": "<name>",
324 "name": "<name>",
320 "type": "<type>",
325 "type": "<type>",
321 "commit_id": "<commit_id>",
326 "commit_id": "<commit_id>",
322 }
327 }
323 },
328 },
324 "merge": {
329 "merge": {
325 "clone_url": "<clone_url>",
330 "clone_url": "<clone_url>",
326 "reference":
331 "reference":
327 {
332 {
328 "name": "<name>",
333 "name": "<name>",
329 "type": "<type>",
334 "type": "<type>",
330 "commit_id": "<commit_id>",
335 "commit_id": "<commit_id>",
331 }
336 }
332 },
337 },
333 "author": <user_obj>,
338 "author": <user_obj>,
334 "reviewers": [
339 "reviewers": [
335 ...
340 ...
336 {
341 {
337 "user": "<user_obj>",
342 "user": "<user_obj>",
338 "review_status": "<review_status>",
343 "review_status": "<review_status>",
339 }
344 }
340 ...
345 ...
341 ]
346 ]
342 }
347 }
343 ...
348 ...
344 ],
349 ],
345 "error": null
350 "error": null
346
351
347
352
348 merge_pull_request
353 merge_pull_request
349 ------------------
354 ------------------
350
355
351 .. py:function:: merge_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
356 .. py:function:: merge_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
352
357
353 Merge the pull request specified by `pullrequestid` into its target
358 Merge the pull request specified by `pullrequestid` into its target
354 repository.
359 repository.
355
360
356 :param apiuser: This is filled automatically from the |authtoken|.
361 :param apiuser: This is filled automatically from the |authtoken|.
357 :type apiuser: AuthUser
362 :type apiuser: AuthUser
358 :param repoid: Optional, repository name or repository ID of the
363 :param repoid: Optional, repository name or repository ID of the
359 target repository to which the |pr| is to be merged.
364 target repository to which the |pr| is to be merged.
360 :type repoid: str or int
365 :type repoid: str or int
361 :param pullrequestid: ID of the pull request which shall be merged.
366 :param pullrequestid: ID of the pull request which shall be merged.
362 :type pullrequestid: int
367 :type pullrequestid: int
363 :param userid: Merge the pull request as this user.
368 :param userid: Merge the pull request as this user.
364 :type userid: Optional(str or int)
369 :type userid: Optional(str or int)
365
370
366 Example output:
371 Example output:
367
372
368 .. code-block:: bash
373 .. code-block:: bash
369
374
370 "id": <id_given_in_input>,
375 "id": <id_given_in_input>,
371 "result": {
376 "result": {
372 "executed": "<bool>",
377 "executed": "<bool>",
373 "failure_reason": "<int>",
378 "failure_reason": "<int>",
374 "merge_status_message": "<str>",
379 "merge_status_message": "<str>",
375 "merge_commit_id": "<merge_commit_id>",
380 "merge_commit_id": "<merge_commit_id>",
376 "possible": "<bool>",
381 "possible": "<bool>",
377 "merge_ref": {
382 "merge_ref": {
378 "commit_id": "<commit_id>",
383 "commit_id": "<commit_id>",
379 "type": "<type>",
384 "type": "<type>",
380 "name": "<name>"
385 "name": "<name>"
381 }
386 }
382 },
387 },
383 "error": null
388 "error": null
384
389
385
390
386 update_pull_request
391 update_pull_request
387 -------------------
392 -------------------
388
393
389 .. py:function:: update_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>)
394 .. py:function:: update_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>)
390
395
391 Updates a pull request.
396 Updates a pull request.
392
397
393 :param apiuser: This is filled automatically from the |authtoken|.
398 :param apiuser: This is filled automatically from the |authtoken|.
394 :type apiuser: AuthUser
399 :type apiuser: AuthUser
395 :param repoid: Optional repository name or repository ID.
400 :param repoid: Optional repository name or repository ID.
396 :type repoid: str or int
401 :type repoid: str or int
397 :param pullrequestid: The pull request ID.
402 :param pullrequestid: The pull request ID.
398 :type pullrequestid: int
403 :type pullrequestid: int
399 :param title: Set the pull request title.
404 :param title: Set the pull request title.
400 :type title: str
405 :type title: str
401 :param description: Update pull request description.
406 :param description: Update pull request description.
402 :type description: Optional(str)
407 :type description: Optional(str)
403 :type description_renderer: Optional(str)
408 :type description_renderer: Optional(str)
404 :param description_renderer: Update pull request renderer for the description.
409 :param description_renderer: Update pull request renderer for the description.
405 It should be 'rst', 'markdown' or 'plain'
410 It should be 'rst', 'markdown' or 'plain'
406 :param reviewers: Update pull request reviewers list with new value.
411 :param reviewers: Update pull request reviewers list with new value.
407 :type reviewers: Optional(list)
412 :type reviewers: Optional(list)
408 Accepts username strings or objects of the format:
413 Accepts username strings or objects of the format:
409
414
410 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
415 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
411
416
412 :param update_commits: Trigger update of commits for this pull request
417 :param update_commits: Trigger update of commits for this pull request
413 :type: update_commits: Optional(bool)
418 :type: update_commits: Optional(bool)
414
419
415 Example output:
420 Example output:
416
421
417 .. code-block:: bash
422 .. code-block:: bash
418
423
419 id : <id_given_in_input>
424 id : <id_given_in_input>
420 result : {
425 result : {
421 "msg": "Updated pull request `63`",
426 "msg": "Updated pull request `63`",
422 "pull_request": <pull_request_object>,
427 "pull_request": <pull_request_object>,
423 "updated_reviewers": {
428 "updated_reviewers": {
424 "added": [
429 "added": [
425 "username"
430 "username"
426 ],
431 ],
427 "removed": []
432 "removed": []
428 },
433 },
429 "updated_commits": {
434 "updated_commits": {
430 "added": [
435 "added": [
431 "<sha1_hash>"
436 "<sha1_hash>"
432 ],
437 ],
433 "common": [
438 "common": [
434 "<sha1_hash>",
439 "<sha1_hash>",
435 "<sha1_hash>",
440 "<sha1_hash>",
436 ],
441 ],
437 "removed": []
442 "removed": []
438 }
443 }
439 }
444 }
440 error : null
445 error : null
441
446
442
447
@@ -1,1138 +1,1140 b''
1 .. _repo-methods-ref:
1 .. _repo-methods-ref:
2
2
3 repo methods
3 repo methods
4 ============
4 ============
5
5
6 add_field_to_repo
6 add_field_to_repo
7 -----------------
7 -----------------
8
8
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
10
10
11 Adds an extra field to a repository.
11 Adds an extra field to a repository.
12
12
13 This command can only be run using an |authtoken| with at least
13 This command can only be run using an |authtoken| with at least
14 write permissions to the |repo|.
14 write permissions to the |repo|.
15
15
16 :param apiuser: This is filled automatically from the |authtoken|.
16 :param apiuser: This is filled automatically from the |authtoken|.
17 :type apiuser: AuthUser
17 :type apiuser: AuthUser
18 :param repoid: Set the repository name or repository id.
18 :param repoid: Set the repository name or repository id.
19 :type repoid: str or int
19 :type repoid: str or int
20 :param key: Create a unique field key for this repository.
20 :param key: Create a unique field key for this repository.
21 :type key: str
21 :type key: str
22 :param label:
22 :param label:
23 :type label: Optional(str)
23 :type label: Optional(str)
24 :param description:
24 :param description:
25 :type description: Optional(str)
25 :type description: Optional(str)
26
26
27
27
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
35 :param apiuser: This is filled automatically from the |authtoken|.
35 :param apiuser: This is filled automatically from the |authtoken|.
36 :type apiuser: AuthUser
36 :type apiuser: AuthUser
37 :param repoid: Set the repository name or repository ID.
37 :param repoid: Set the repository name or repository ID.
38 :type repoid: str or int
38 :type repoid: str or int
39 :param commit_id: Specify the commit_id for which to set a comment.
39 :param commit_id: Specify the commit_id for which to set a comment.
40 :type commit_id: str
40 :type commit_id: str
41 :param message: The comment text.
41 :param message: The comment text.
42 :type message: str
42 :type message: str
43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
44 'approved', 'rejected', 'under_review'
44 'approved', 'rejected', 'under_review'
45 :type status: str
45 :type status: str
46 :param comment_type: Comment type, one of: 'note', 'todo'
46 :param comment_type: Comment type, one of: 'note', 'todo'
47 :type comment_type: Optional(str), default: 'note'
47 :type comment_type: Optional(str), default: 'note'
48 :param resolves_comment_id: id of comment which this one will resolve
48 :param resolves_comment_id: id of comment which this one will resolve
49 :type resolves_comment_id: Optional(int)
49 :type resolves_comment_id: Optional(int)
50 :param extra_recipients: list of user ids or usernames to add
50 :param extra_recipients: list of user ids or usernames to add
51 notifications for this comment. Acts like a CC for notification
51 notifications for this comment. Acts like a CC for notification
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
58 .. code-block:: bash
60 .. code-block:: bash
59
61
60 {
62 {
61 "id" : <id_given_in_input>,
63 "id" : <id_given_in_input>,
62 "result" : {
64 "result" : {
63 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
65 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
64 "status_change": null or <status>,
66 "status_change": null or <status>,
65 "success": true
67 "success": true
66 },
68 },
67 "error" : null
69 "error" : null
68 }
70 }
69
71
70
72
71 create_repo
73 create_repo
72 -----------
74 -----------
73
75
74 .. py:function:: create_repo(apiuser, repo_name, repo_type, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, push_uri=<Optional:None>, landing_rev=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, copy_permissions=<Optional:False>)
76 .. py:function:: create_repo(apiuser, repo_name, repo_type, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, push_uri=<Optional:None>, landing_rev=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, copy_permissions=<Optional:False>)
75
77
76 Creates a repository.
78 Creates a repository.
77
79
78 * If the repository name contains "/", repository will be created inside
80 * If the repository name contains "/", repository will be created inside
79 a repository group or nested repository groups
81 a repository group or nested repository groups
80
82
81 For example "foo/bar/repo1" will create |repo| called "repo1" inside
83 For example "foo/bar/repo1" will create |repo| called "repo1" inside
82 group "foo/bar". You have to have permissions to access and write to
84 group "foo/bar". You have to have permissions to access and write to
83 the last repository group ("bar" in this example)
85 the last repository group ("bar" in this example)
84
86
85 This command can only be run using an |authtoken| with at least
87 This command can only be run using an |authtoken| with at least
86 permissions to create repositories, or write permissions to
88 permissions to create repositories, or write permissions to
87 parent repository groups.
89 parent repository groups.
88
90
89 :param apiuser: This is filled automatically from the |authtoken|.
91 :param apiuser: This is filled automatically from the |authtoken|.
90 :type apiuser: AuthUser
92 :type apiuser: AuthUser
91 :param repo_name: Set the repository name.
93 :param repo_name: Set the repository name.
92 :type repo_name: str
94 :type repo_name: str
93 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
95 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
94 :type repo_type: str
96 :type repo_type: str
95 :param owner: user_id or username
97 :param owner: user_id or username
96 :type owner: Optional(str)
98 :type owner: Optional(str)
97 :param description: Set the repository description.
99 :param description: Set the repository description.
98 :type description: Optional(str)
100 :type description: Optional(str)
99 :param private: set repository as private
101 :param private: set repository as private
100 :type private: bool
102 :type private: bool
101 :param clone_uri: set clone_uri
103 :param clone_uri: set clone_uri
102 :type clone_uri: str
104 :type clone_uri: str
103 :param push_uri: set push_uri
105 :param push_uri: set push_uri
104 :type push_uri: str
106 :type push_uri: str
105 :param landing_rev: <rev_type>:<rev>, e.g branch:default, book:dev, rev:abcd
107 :param landing_rev: <rev_type>:<rev>, e.g branch:default, book:dev, rev:abcd
106 :type landing_rev: str
108 :type landing_rev: str
107 :param enable_locking:
109 :param enable_locking:
108 :type enable_locking: bool
110 :type enable_locking: bool
109 :param enable_downloads:
111 :param enable_downloads:
110 :type enable_downloads: bool
112 :type enable_downloads: bool
111 :param enable_statistics:
113 :param enable_statistics:
112 :type enable_statistics: bool
114 :type enable_statistics: bool
113 :param copy_permissions: Copy permission from group in which the
115 :param copy_permissions: Copy permission from group in which the
114 repository is being created.
116 repository is being created.
115 :type copy_permissions: bool
117 :type copy_permissions: bool
116
118
117
119
118 Example output:
120 Example output:
119
121
120 .. code-block:: bash
122 .. code-block:: bash
121
123
122 id : <id_given_in_input>
124 id : <id_given_in_input>
123 result: {
125 result: {
124 "msg": "Created new repository `<reponame>`",
126 "msg": "Created new repository `<reponame>`",
125 "success": true,
127 "success": true,
126 "task": "<celery task id or None if done sync>"
128 "task": "<celery task id or None if done sync>"
127 }
129 }
128 error: null
130 error: null
129
131
130
132
131 Example error output:
133 Example error output:
132
134
133 .. code-block:: bash
135 .. code-block:: bash
134
136
135 id : <id_given_in_input>
137 id : <id_given_in_input>
136 result : null
138 result : null
137 error : {
139 error : {
138 'failed to create repository `<repo_name>`'
140 'failed to create repository `<repo_name>`'
139 }
141 }
140
142
141
143
142 delete_repo
144 delete_repo
143 -----------
145 -----------
144
146
145 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
147 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
146
148
147 Deletes a repository.
149 Deletes a repository.
148
150
149 * When the `forks` parameter is set it's possible to detach or delete
151 * When the `forks` parameter is set it's possible to detach or delete
150 forks of deleted repository.
152 forks of deleted repository.
151
153
152 This command can only be run using an |authtoken| with admin
154 This command can only be run using an |authtoken| with admin
153 permissions on the |repo|.
155 permissions on the |repo|.
154
156
155 :param apiuser: This is filled automatically from the |authtoken|.
157 :param apiuser: This is filled automatically from the |authtoken|.
156 :type apiuser: AuthUser
158 :type apiuser: AuthUser
157 :param repoid: Set the repository name or repository ID.
159 :param repoid: Set the repository name or repository ID.
158 :type repoid: str or int
160 :type repoid: str or int
159 :param forks: Set to `detach` or `delete` forks from the |repo|.
161 :param forks: Set to `detach` or `delete` forks from the |repo|.
160 :type forks: Optional(str)
162 :type forks: Optional(str)
161
163
162 Example error output:
164 Example error output:
163
165
164 .. code-block:: bash
166 .. code-block:: bash
165
167
166 id : <id_given_in_input>
168 id : <id_given_in_input>
167 result: {
169 result: {
168 "msg": "Deleted repository `<reponame>`",
170 "msg": "Deleted repository `<reponame>`",
169 "success": true
171 "success": true
170 }
172 }
171 error: null
173 error: null
172
174
173
175
174 fork_repo
176 fork_repo
175 ---------
177 ---------
176
178
177 .. py:function:: fork_repo(apiuser, repoid, fork_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:None>, copy_permissions=<Optional:False>)
179 .. py:function:: fork_repo(apiuser, repoid, fork_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:None>, copy_permissions=<Optional:False>)
178
180
179 Creates a fork of the specified |repo|.
181 Creates a fork of the specified |repo|.
180
182
181 * If the fork_name contains "/", fork will be created inside
183 * If the fork_name contains "/", fork will be created inside
182 a repository group or nested repository groups
184 a repository group or nested repository groups
183
185
184 For example "foo/bar/fork-repo" will create fork called "fork-repo"
186 For example "foo/bar/fork-repo" will create fork called "fork-repo"
185 inside group "foo/bar". You have to have permissions to access and
187 inside group "foo/bar". You have to have permissions to access and
186 write to the last repository group ("bar" in this example)
188 write to the last repository group ("bar" in this example)
187
189
188 This command can only be run using an |authtoken| with minimum
190 This command can only be run using an |authtoken| with minimum
189 read permissions of the forked repo, create fork permissions for an user.
191 read permissions of the forked repo, create fork permissions for an user.
190
192
191 :param apiuser: This is filled automatically from the |authtoken|.
193 :param apiuser: This is filled automatically from the |authtoken|.
192 :type apiuser: AuthUser
194 :type apiuser: AuthUser
193 :param repoid: Set repository name or repository ID.
195 :param repoid: Set repository name or repository ID.
194 :type repoid: str or int
196 :type repoid: str or int
195 :param fork_name: Set the fork name, including it's repository group membership.
197 :param fork_name: Set the fork name, including it's repository group membership.
196 :type fork_name: str
198 :type fork_name: str
197 :param owner: Set the fork owner.
199 :param owner: Set the fork owner.
198 :type owner: str
200 :type owner: str
199 :param description: Set the fork description.
201 :param description: Set the fork description.
200 :type description: str
202 :type description: str
201 :param copy_permissions: Copy permissions from parent |repo|. The
203 :param copy_permissions: Copy permissions from parent |repo|. The
202 default is False.
204 default is False.
203 :type copy_permissions: bool
205 :type copy_permissions: bool
204 :param private: Make the fork private. The default is False.
206 :param private: Make the fork private. The default is False.
205 :type private: bool
207 :type private: bool
206 :param landing_rev: Set the landing revision. E.g branch:default, book:dev, rev:abcd
208 :param landing_rev: Set the landing revision. E.g branch:default, book:dev, rev:abcd
207
209
208 Example output:
210 Example output:
209
211
210 .. code-block:: bash
212 .. code-block:: bash
211
213
212 id : <id_for_response>
214 id : <id_for_response>
213 api_key : "<api_key>"
215 api_key : "<api_key>"
214 args: {
216 args: {
215 "repoid" : "<reponame or repo_id>",
217 "repoid" : "<reponame or repo_id>",
216 "fork_name": "<forkname>",
218 "fork_name": "<forkname>",
217 "owner": "<username or user_id = Optional(=apiuser)>",
219 "owner": "<username or user_id = Optional(=apiuser)>",
218 "description": "<description>",
220 "description": "<description>",
219 "copy_permissions": "<bool>",
221 "copy_permissions": "<bool>",
220 "private": "<bool>",
222 "private": "<bool>",
221 "landing_rev": "<landing_rev>"
223 "landing_rev": "<landing_rev>"
222 }
224 }
223
225
224 Example error output:
226 Example error output:
225
227
226 .. code-block:: bash
228 .. code-block:: bash
227
229
228 id : <id_given_in_input>
230 id : <id_given_in_input>
229 result: {
231 result: {
230 "msg": "Created fork of `<reponame>` as `<forkname>`",
232 "msg": "Created fork of `<reponame>` as `<forkname>`",
231 "success": true,
233 "success": true,
232 "task": "<celery task id or None if done sync>"
234 "task": "<celery task id or None if done sync>"
233 }
235 }
234 error: null
236 error: null
235
237
236
238
237 get_repo
239 get_repo
238 --------
240 --------
239
241
240 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
242 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
241
243
242 Gets an existing repository by its name or repository_id.
244 Gets an existing repository by its name or repository_id.
243
245
244 The members section so the output returns users groups or users
246 The members section so the output returns users groups or users
245 associated with that repository.
247 associated with that repository.
246
248
247 This command can only be run using an |authtoken| with admin rights,
249 This command can only be run using an |authtoken| with admin rights,
248 or users with at least read rights to the |repo|.
250 or users with at least read rights to the |repo|.
249
251
250 :param apiuser: This is filled automatically from the |authtoken|.
252 :param apiuser: This is filled automatically from the |authtoken|.
251 :type apiuser: AuthUser
253 :type apiuser: AuthUser
252 :param repoid: The repository name or repository id.
254 :param repoid: The repository name or repository id.
253 :type repoid: str or int
255 :type repoid: str or int
254 :param cache: use the cached value for last changeset
256 :param cache: use the cached value for last changeset
255 :type: cache: Optional(bool)
257 :type: cache: Optional(bool)
256
258
257 Example output:
259 Example output:
258
260
259 .. code-block:: bash
261 .. code-block:: bash
260
262
261 {
263 {
262 "error": null,
264 "error": null,
263 "id": <repo_id>,
265 "id": <repo_id>,
264 "result": {
266 "result": {
265 "clone_uri": null,
267 "clone_uri": null,
266 "created_on": "timestamp",
268 "created_on": "timestamp",
267 "description": "repo description",
269 "description": "repo description",
268 "enable_downloads": false,
270 "enable_downloads": false,
269 "enable_locking": false,
271 "enable_locking": false,
270 "enable_statistics": false,
272 "enable_statistics": false,
271 "followers": [
273 "followers": [
272 {
274 {
273 "active": true,
275 "active": true,
274 "admin": false,
276 "admin": false,
275 "api_key": "****************************************",
277 "api_key": "****************************************",
276 "api_keys": [
278 "api_keys": [
277 "****************************************"
279 "****************************************"
278 ],
280 ],
279 "email": "user@example.com",
281 "email": "user@example.com",
280 "emails": [
282 "emails": [
281 "user@example.com"
283 "user@example.com"
282 ],
284 ],
283 "extern_name": "rhodecode",
285 "extern_name": "rhodecode",
284 "extern_type": "rhodecode",
286 "extern_type": "rhodecode",
285 "firstname": "username",
287 "firstname": "username",
286 "ip_addresses": [],
288 "ip_addresses": [],
287 "language": null,
289 "language": null,
288 "last_login": "2015-09-16T17:16:35.854",
290 "last_login": "2015-09-16T17:16:35.854",
289 "lastname": "surname",
291 "lastname": "surname",
290 "user_id": <user_id>,
292 "user_id": <user_id>,
291 "username": "name"
293 "username": "name"
292 }
294 }
293 ],
295 ],
294 "fork_of": "parent-repo",
296 "fork_of": "parent-repo",
295 "landing_rev": [
297 "landing_rev": [
296 "rev",
298 "rev",
297 "tip"
299 "tip"
298 ],
300 ],
299 "last_changeset": {
301 "last_changeset": {
300 "author": "User <user@example.com>",
302 "author": "User <user@example.com>",
301 "branch": "default",
303 "branch": "default",
302 "date": "timestamp",
304 "date": "timestamp",
303 "message": "last commit message",
305 "message": "last commit message",
304 "parents": [
306 "parents": [
305 {
307 {
306 "raw_id": "commit-id"
308 "raw_id": "commit-id"
307 }
309 }
308 ],
310 ],
309 "raw_id": "commit-id",
311 "raw_id": "commit-id",
310 "revision": <revision number>,
312 "revision": <revision number>,
311 "short_id": "short id"
313 "short_id": "short id"
312 },
314 },
313 "lock_reason": null,
315 "lock_reason": null,
314 "locked_by": null,
316 "locked_by": null,
315 "locked_date": null,
317 "locked_date": null,
316 "owner": "owner-name",
318 "owner": "owner-name",
317 "permissions": [
319 "permissions": [
318 {
320 {
319 "name": "super-admin-name",
321 "name": "super-admin-name",
320 "origin": "super-admin",
322 "origin": "super-admin",
321 "permission": "repository.admin",
323 "permission": "repository.admin",
322 "type": "user"
324 "type": "user"
323 },
325 },
324 {
326 {
325 "name": "owner-name",
327 "name": "owner-name",
326 "origin": "owner",
328 "origin": "owner",
327 "permission": "repository.admin",
329 "permission": "repository.admin",
328 "type": "user"
330 "type": "user"
329 },
331 },
330 {
332 {
331 "name": "user-group-name",
333 "name": "user-group-name",
332 "origin": "permission",
334 "origin": "permission",
333 "permission": "repository.write",
335 "permission": "repository.write",
334 "type": "user_group"
336 "type": "user_group"
335 }
337 }
336 ],
338 ],
337 "private": true,
339 "private": true,
338 "repo_id": 676,
340 "repo_id": 676,
339 "repo_name": "user-group/repo-name",
341 "repo_name": "user-group/repo-name",
340 "repo_type": "hg"
342 "repo_type": "hg"
341 }
343 }
342 }
344 }
343
345
344
346
345 get_repo_changeset
347 get_repo_changeset
346 ------------------
348 ------------------
347
349
348 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
350 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
349
351
350 Returns information about a changeset.
352 Returns information about a changeset.
351
353
352 Additionally parameters define the amount of details returned by
354 Additionally parameters define the amount of details returned by
353 this function.
355 this function.
354
356
355 This command can only be run using an |authtoken| with admin rights,
357 This command can only be run using an |authtoken| with admin rights,
356 or users with at least read rights to the |repo|.
358 or users with at least read rights to the |repo|.
357
359
358 :param apiuser: This is filled automatically from the |authtoken|.
360 :param apiuser: This is filled automatically from the |authtoken|.
359 :type apiuser: AuthUser
361 :type apiuser: AuthUser
360 :param repoid: The repository name or repository id
362 :param repoid: The repository name or repository id
361 :type repoid: str or int
363 :type repoid: str or int
362 :param revision: revision for which listing should be done
364 :param revision: revision for which listing should be done
363 :type revision: str
365 :type revision: str
364 :param details: details can be 'basic|extended|full' full gives diff
366 :param details: details can be 'basic|extended|full' full gives diff
365 info details like the diff itself, and number of changed files etc.
367 info details like the diff itself, and number of changed files etc.
366 :type details: Optional(str)
368 :type details: Optional(str)
367
369
368
370
369 get_repo_changesets
371 get_repo_changesets
370 -------------------
372 -------------------
371
373
372 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
374 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
373
375
374 Returns a set of commits limited by the number starting
376 Returns a set of commits limited by the number starting
375 from the `start_rev` option.
377 from the `start_rev` option.
376
378
377 Additional parameters define the amount of details returned by this
379 Additional parameters define the amount of details returned by this
378 function.
380 function.
379
381
380 This command can only be run using an |authtoken| with admin rights,
382 This command can only be run using an |authtoken| with admin rights,
381 or users with at least read rights to |repos|.
383 or users with at least read rights to |repos|.
382
384
383 :param apiuser: This is filled automatically from the |authtoken|.
385 :param apiuser: This is filled automatically from the |authtoken|.
384 :type apiuser: AuthUser
386 :type apiuser: AuthUser
385 :param repoid: The repository name or repository ID.
387 :param repoid: The repository name or repository ID.
386 :type repoid: str or int
388 :type repoid: str or int
387 :param start_rev: The starting revision from where to get changesets.
389 :param start_rev: The starting revision from where to get changesets.
388 :type start_rev: str
390 :type start_rev: str
389 :param limit: Limit the number of commits to this amount
391 :param limit: Limit the number of commits to this amount
390 :type limit: str or int
392 :type limit: str or int
391 :param details: Set the level of detail returned. Valid option are:
393 :param details: Set the level of detail returned. Valid option are:
392 ``basic``, ``extended`` and ``full``.
394 ``basic``, ``extended`` and ``full``.
393 :type details: Optional(str)
395 :type details: Optional(str)
394
396
395 .. note::
397 .. note::
396
398
397 Setting the parameter `details` to the value ``full`` is extensive
399 Setting the parameter `details` to the value ``full`` is extensive
398 and returns details like the diff itself, and the number
400 and returns details like the diff itself, and the number
399 of changed files.
401 of changed files.
400
402
401
403
402 get_repo_comments
404 get_repo_comments
403 -----------------
405 -----------------
404
406
405 .. py:function:: get_repo_comments(apiuser, repoid, commit_id=<Optional:None>, comment_type=<Optional:None>, userid=<Optional:None>)
407 .. py:function:: get_repo_comments(apiuser, repoid, commit_id=<Optional:None>, comment_type=<Optional:None>, userid=<Optional:None>)
406
408
407 Get all comments for a repository
409 Get all comments for a repository
408
410
409 :param apiuser: This is filled automatically from the |authtoken|.
411 :param apiuser: This is filled automatically from the |authtoken|.
410 :type apiuser: AuthUser
412 :type apiuser: AuthUser
411 :param repoid: Set the repository name or repository ID.
413 :param repoid: Set the repository name or repository ID.
412 :type repoid: str or int
414 :type repoid: str or int
413 :param commit_id: Optionally filter the comments by the commit_id
415 :param commit_id: Optionally filter the comments by the commit_id
414 :type commit_id: Optional(str), default: None
416 :type commit_id: Optional(str), default: None
415 :param comment_type: Optionally filter the comments by the comment_type
417 :param comment_type: Optionally filter the comments by the comment_type
416 one of: 'note', 'todo'
418 one of: 'note', 'todo'
417 :type comment_type: Optional(str), default: None
419 :type comment_type: Optional(str), default: None
418 :param userid: Optionally filter the comments by the author of comment
420 :param userid: Optionally filter the comments by the author of comment
419 :type userid: Optional(str or int), Default: None
421 :type userid: Optional(str or int), Default: None
420
422
421 Example error output:
423 Example error output:
422
424
423 .. code-block:: bash
425 .. code-block:: bash
424
426
425 {
427 {
426 "id" : <id_given_in_input>,
428 "id" : <id_given_in_input>,
427 "result" : [
429 "result" : [
428 {
430 {
429 "comment_author": <USER_DETAILS>,
431 "comment_author": <USER_DETAILS>,
430 "comment_created_on": "2017-02-01T14:38:16.309",
432 "comment_created_on": "2017-02-01T14:38:16.309",
431 "comment_f_path": "file.txt",
433 "comment_f_path": "file.txt",
432 "comment_id": 282,
434 "comment_id": 282,
433 "comment_lineno": "n1",
435 "comment_lineno": "n1",
434 "comment_resolved_by": null,
436 "comment_resolved_by": null,
435 "comment_status": [],
437 "comment_status": [],
436 "comment_text": "This file needs a header",
438 "comment_text": "This file needs a header",
437 "comment_type": "todo"
439 "comment_type": "todo"
438 }
440 }
439 ],
441 ],
440 "error" : null
442 "error" : null
441 }
443 }
442
444
443
445
444 get_repo_file
446 get_repo_file
445 -------------
447 -------------
446
448
447 .. py:function:: get_repo_file(apiuser, repoid, commit_id, file_path, max_file_bytes=<Optional:None>, details=<Optional:'basic'>, cache=<Optional:True>)
449 .. py:function:: get_repo_file(apiuser, repoid, commit_id, file_path, max_file_bytes=<Optional:None>, details=<Optional:'basic'>, cache=<Optional:True>)
448
450
449 Returns a single file from repository at given revision.
451 Returns a single file from repository at given revision.
450
452
451 This command can only be run using an |authtoken| with admin rights,
453 This command can only be run using an |authtoken| with admin rights,
452 or users with at least read rights to |repos|.
454 or users with at least read rights to |repos|.
453
455
454 :param apiuser: This is filled automatically from the |authtoken|.
456 :param apiuser: This is filled automatically from the |authtoken|.
455 :type apiuser: AuthUser
457 :type apiuser: AuthUser
456 :param repoid: The repository name or repository ID.
458 :param repoid: The repository name or repository ID.
457 :type repoid: str or int
459 :type repoid: str or int
458 :param commit_id: The revision for which listing should be done.
460 :param commit_id: The revision for which listing should be done.
459 :type commit_id: str
461 :type commit_id: str
460 :param file_path: The path from which to start displaying.
462 :param file_path: The path from which to start displaying.
461 :type file_path: str
463 :type file_path: str
462 :param details: Returns different set of information about nodes.
464 :param details: Returns different set of information about nodes.
463 The valid options are ``minimal`` ``basic`` and ``full``.
465 The valid options are ``minimal`` ``basic`` and ``full``.
464 :type details: Optional(str)
466 :type details: Optional(str)
465 :param max_file_bytes: Only return file content under this file size bytes
467 :param max_file_bytes: Only return file content under this file size bytes
466 :type max_file_bytes: Optional(int)
468 :type max_file_bytes: Optional(int)
467 :param cache: Use internal caches for fetching files. If disabled fetching
469 :param cache: Use internal caches for fetching files. If disabled fetching
468 files is slower but more memory efficient
470 files is slower but more memory efficient
469 :type cache: Optional(bool)
471 :type cache: Optional(bool)
470
472
471 Example output:
473 Example output:
472
474
473 .. code-block:: bash
475 .. code-block:: bash
474
476
475 id : <id_given_in_input>
477 id : <id_given_in_input>
476 result: {
478 result: {
477 "binary": false,
479 "binary": false,
478 "extension": "py",
480 "extension": "py",
479 "lines": 35,
481 "lines": 35,
480 "content": "....",
482 "content": "....",
481 "md5": "76318336366b0f17ee249e11b0c99c41",
483 "md5": "76318336366b0f17ee249e11b0c99c41",
482 "mimetype": "text/x-python",
484 "mimetype": "text/x-python",
483 "name": "python.py",
485 "name": "python.py",
484 "size": 817,
486 "size": 817,
485 "type": "file",
487 "type": "file",
486 }
488 }
487 error: null
489 error: null
488
490
489
491
490 get_repo_fts_tree
492 get_repo_fts_tree
491 -----------------
493 -----------------
492
494
493 .. py:function:: get_repo_fts_tree(apiuser, repoid, commit_id, root_path)
495 .. py:function:: get_repo_fts_tree(apiuser, repoid, commit_id, root_path)
494
496
495 Returns a list of tree nodes for path at given revision. This api is built
497 Returns a list of tree nodes for path at given revision. This api is built
496 strictly for usage in full text search building, and shouldn't be consumed
498 strictly for usage in full text search building, and shouldn't be consumed
497
499
498 This command can only be run using an |authtoken| with admin rights,
500 This command can only be run using an |authtoken| with admin rights,
499 or users with at least read rights to |repos|.
501 or users with at least read rights to |repos|.
500
502
501
503
502 get_repo_nodes
504 get_repo_nodes
503 --------------
505 --------------
504
506
505 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
507 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
506
508
507 Returns a list of nodes and children in a flat list for a given
509 Returns a list of nodes and children in a flat list for a given
508 path at given revision.
510 path at given revision.
509
511
510 It's possible to specify ret_type to show only `files` or `dirs`.
512 It's possible to specify ret_type to show only `files` or `dirs`.
511
513
512 This command can only be run using an |authtoken| with admin rights,
514 This command can only be run using an |authtoken| with admin rights,
513 or users with at least read rights to |repos|.
515 or users with at least read rights to |repos|.
514
516
515 :param apiuser: This is filled automatically from the |authtoken|.
517 :param apiuser: This is filled automatically from the |authtoken|.
516 :type apiuser: AuthUser
518 :type apiuser: AuthUser
517 :param repoid: The repository name or repository ID.
519 :param repoid: The repository name or repository ID.
518 :type repoid: str or int
520 :type repoid: str or int
519 :param revision: The revision for which listing should be done.
521 :param revision: The revision for which listing should be done.
520 :type revision: str
522 :type revision: str
521 :param root_path: The path from which to start displaying.
523 :param root_path: The path from which to start displaying.
522 :type root_path: str
524 :type root_path: str
523 :param ret_type: Set the return type. Valid options are
525 :param ret_type: Set the return type. Valid options are
524 ``all`` (default), ``files`` and ``dirs``.
526 ``all`` (default), ``files`` and ``dirs``.
525 :type ret_type: Optional(str)
527 :type ret_type: Optional(str)
526 :param details: Returns extended information about nodes, such as
528 :param details: Returns extended information about nodes, such as
527 md5, binary, and or content.
529 md5, binary, and or content.
528 The valid options are ``basic`` and ``full``.
530 The valid options are ``basic`` and ``full``.
529 :type details: Optional(str)
531 :type details: Optional(str)
530 :param max_file_bytes: Only return file content under this file size bytes
532 :param max_file_bytes: Only return file content under this file size bytes
531 :type details: Optional(int)
533 :type details: Optional(int)
532
534
533 Example output:
535 Example output:
534
536
535 .. code-block:: bash
537 .. code-block:: bash
536
538
537 id : <id_given_in_input>
539 id : <id_given_in_input>
538 result: [
540 result: [
539 {
541 {
540 "binary": false,
542 "binary": false,
541 "content": "File line",
543 "content": "File line",
542 "extension": "md",
544 "extension": "md",
543 "lines": 2,
545 "lines": 2,
544 "md5": "059fa5d29b19c0657e384749480f6422",
546 "md5": "059fa5d29b19c0657e384749480f6422",
545 "mimetype": "text/x-minidsrc",
547 "mimetype": "text/x-minidsrc",
546 "name": "file.md",
548 "name": "file.md",
547 "size": 580,
549 "size": 580,
548 "type": "file"
550 "type": "file"
549 },
551 },
550 ...
552 ...
551 ]
553 ]
552 error: null
554 error: null
553
555
554
556
555 get_repo_refs
557 get_repo_refs
556 -------------
558 -------------
557
559
558 .. py:function:: get_repo_refs(apiuser, repoid)
560 .. py:function:: get_repo_refs(apiuser, repoid)
559
561
560 Returns a dictionary of current references. It returns
562 Returns a dictionary of current references. It returns
561 bookmarks, branches, closed_branches, and tags for given repository
563 bookmarks, branches, closed_branches, and tags for given repository
562
564
563 It's possible to specify ret_type to show only `files` or `dirs`.
565 It's possible to specify ret_type to show only `files` or `dirs`.
564
566
565 This command can only be run using an |authtoken| with admin rights,
567 This command can only be run using an |authtoken| with admin rights,
566 or users with at least read rights to |repos|.
568 or users with at least read rights to |repos|.
567
569
568 :param apiuser: This is filled automatically from the |authtoken|.
570 :param apiuser: This is filled automatically from the |authtoken|.
569 :type apiuser: AuthUser
571 :type apiuser: AuthUser
570 :param repoid: The repository name or repository ID.
572 :param repoid: The repository name or repository ID.
571 :type repoid: str or int
573 :type repoid: str or int
572
574
573 Example output:
575 Example output:
574
576
575 .. code-block:: bash
577 .. code-block:: bash
576
578
577 id : <id_given_in_input>
579 id : <id_given_in_input>
578 "result": {
580 "result": {
579 "bookmarks": {
581 "bookmarks": {
580 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
582 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
581 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
583 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
582 },
584 },
583 "branches": {
585 "branches": {
584 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
586 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
585 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
587 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
586 },
588 },
587 "branches_closed": {},
589 "branches_closed": {},
588 "tags": {
590 "tags": {
589 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
591 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
590 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
592 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
591 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
593 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
592 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
594 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
593 }
595 }
594 }
596 }
595 error: null
597 error: null
596
598
597
599
598 get_repo_settings
600 get_repo_settings
599 -----------------
601 -----------------
600
602
601 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
603 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
602
604
603 Returns all settings for a repository. If key is given it only returns the
605 Returns all settings for a repository. If key is given it only returns the
604 setting identified by the key or null.
606 setting identified by the key or null.
605
607
606 :param apiuser: This is filled automatically from the |authtoken|.
608 :param apiuser: This is filled automatically from the |authtoken|.
607 :type apiuser: AuthUser
609 :type apiuser: AuthUser
608 :param repoid: The repository name or repository id.
610 :param repoid: The repository name or repository id.
609 :type repoid: str or int
611 :type repoid: str or int
610 :param key: Key of the setting to return.
612 :param key: Key of the setting to return.
611 :type: key: Optional(str)
613 :type: key: Optional(str)
612
614
613 Example output:
615 Example output:
614
616
615 .. code-block:: bash
617 .. code-block:: bash
616
618
617 {
619 {
618 "error": null,
620 "error": null,
619 "id": 237,
621 "id": 237,
620 "result": {
622 "result": {
621 "extensions_largefiles": true,
623 "extensions_largefiles": true,
622 "extensions_evolve": true,
624 "extensions_evolve": true,
623 "hooks_changegroup_push_logger": true,
625 "hooks_changegroup_push_logger": true,
624 "hooks_changegroup_repo_size": false,
626 "hooks_changegroup_repo_size": false,
625 "hooks_outgoing_pull_logger": true,
627 "hooks_outgoing_pull_logger": true,
626 "phases_publish": "True",
628 "phases_publish": "True",
627 "rhodecode_hg_use_rebase_for_merging": true,
629 "rhodecode_hg_use_rebase_for_merging": true,
628 "rhodecode_pr_merge_enabled": true,
630 "rhodecode_pr_merge_enabled": true,
629 "rhodecode_use_outdated_comments": true
631 "rhodecode_use_outdated_comments": true
630 }
632 }
631 }
633 }
632
634
633
635
634 get_repos
636 get_repos
635 ---------
637 ---------
636
638
637 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
639 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
638
640
639 Lists all existing repositories.
641 Lists all existing repositories.
640
642
641 This command can only be run using an |authtoken| with admin rights,
643 This command can only be run using an |authtoken| with admin rights,
642 or users with at least read rights to |repos|.
644 or users with at least read rights to |repos|.
643
645
644 :param apiuser: This is filled automatically from the |authtoken|.
646 :param apiuser: This is filled automatically from the |authtoken|.
645 :type apiuser: AuthUser
647 :type apiuser: AuthUser
646 :param root: specify root repository group to fetch repositories.
648 :param root: specify root repository group to fetch repositories.
647 filters the returned repositories to be members of given root group.
649 filters the returned repositories to be members of given root group.
648 :type root: Optional(None)
650 :type root: Optional(None)
649 :param traverse: traverse given root into subrepositories. With this flag
651 :param traverse: traverse given root into subrepositories. With this flag
650 set to False, it will only return top-level repositories from `root`.
652 set to False, it will only return top-level repositories from `root`.
651 if root is empty it will return just top-level repositories.
653 if root is empty it will return just top-level repositories.
652 :type traverse: Optional(True)
654 :type traverse: Optional(True)
653
655
654
656
655 Example output:
657 Example output:
656
658
657 .. code-block:: bash
659 .. code-block:: bash
658
660
659 id : <id_given_in_input>
661 id : <id_given_in_input>
660 result: [
662 result: [
661 {
663 {
662 "repo_id" : "<repo_id>",
664 "repo_id" : "<repo_id>",
663 "repo_name" : "<reponame>"
665 "repo_name" : "<reponame>"
664 "repo_type" : "<repo_type>",
666 "repo_type" : "<repo_type>",
665 "clone_uri" : "<clone_uri>",
667 "clone_uri" : "<clone_uri>",
666 "private": : "<bool>",
668 "private": : "<bool>",
667 "created_on" : "<datetimecreated>",
669 "created_on" : "<datetimecreated>",
668 "description" : "<description>",
670 "description" : "<description>",
669 "landing_rev": "<landing_rev>",
671 "landing_rev": "<landing_rev>",
670 "owner": "<repo_owner>",
672 "owner": "<repo_owner>",
671 "fork_of": "<name_of_fork_parent>",
673 "fork_of": "<name_of_fork_parent>",
672 "enable_downloads": "<bool>",
674 "enable_downloads": "<bool>",
673 "enable_locking": "<bool>",
675 "enable_locking": "<bool>",
674 "enable_statistics": "<bool>",
676 "enable_statistics": "<bool>",
675 },
677 },
676 ...
678 ...
677 ]
679 ]
678 error: null
680 error: null
679
681
680
682
681 grant_user_group_permission
683 grant_user_group_permission
682 ---------------------------
684 ---------------------------
683
685
684 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
686 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
685
687
686 Grant permission for a user group on the specified repository,
688 Grant permission for a user group on the specified repository,
687 or update existing permissions.
689 or update existing permissions.
688
690
689 This command can only be run using an |authtoken| with admin
691 This command can only be run using an |authtoken| with admin
690 permissions on the |repo|.
692 permissions on the |repo|.
691
693
692 :param apiuser: This is filled automatically from the |authtoken|.
694 :param apiuser: This is filled automatically from the |authtoken|.
693 :type apiuser: AuthUser
695 :type apiuser: AuthUser
694 :param repoid: Set the repository name or repository ID.
696 :param repoid: Set the repository name or repository ID.
695 :type repoid: str or int
697 :type repoid: str or int
696 :param usergroupid: Specify the ID of the user group.
698 :param usergroupid: Specify the ID of the user group.
697 :type usergroupid: str or int
699 :type usergroupid: str or int
698 :param perm: Set the user group permissions using the following
700 :param perm: Set the user group permissions using the following
699 format: (repository.(none|read|write|admin))
701 format: (repository.(none|read|write|admin))
700 :type perm: str
702 :type perm: str
701
703
702 Example output:
704 Example output:
703
705
704 .. code-block:: bash
706 .. code-block:: bash
705
707
706 id : <id_given_in_input>
708 id : <id_given_in_input>
707 result : {
709 result : {
708 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
710 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
709 "success": true
711 "success": true
710
712
711 }
713 }
712 error : null
714 error : null
713
715
714 Example error output:
716 Example error output:
715
717
716 .. code-block:: bash
718 .. code-block:: bash
717
719
718 id : <id_given_in_input>
720 id : <id_given_in_input>
719 result : null
721 result : null
720 error : {
722 error : {
721 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
723 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
722 }
724 }
723
725
724
726
725 grant_user_permission
727 grant_user_permission
726 ---------------------
728 ---------------------
727
729
728 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
730 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
729
731
730 Grant permissions for the specified user on the given repository,
732 Grant permissions for the specified user on the given repository,
731 or update existing permissions if found.
733 or update existing permissions if found.
732
734
733 This command can only be run using an |authtoken| with admin
735 This command can only be run using an |authtoken| with admin
734 permissions on the |repo|.
736 permissions on the |repo|.
735
737
736 :param apiuser: This is filled automatically from the |authtoken|.
738 :param apiuser: This is filled automatically from the |authtoken|.
737 :type apiuser: AuthUser
739 :type apiuser: AuthUser
738 :param repoid: Set the repository name or repository ID.
740 :param repoid: Set the repository name or repository ID.
739 :type repoid: str or int
741 :type repoid: str or int
740 :param userid: Set the user name.
742 :param userid: Set the user name.
741 :type userid: str
743 :type userid: str
742 :param perm: Set the user permissions, using the following format
744 :param perm: Set the user permissions, using the following format
743 ``(repository.(none|read|write|admin))``
745 ``(repository.(none|read|write|admin))``
744 :type perm: str
746 :type perm: str
745
747
746 Example output:
748 Example output:
747
749
748 .. code-block:: bash
750 .. code-block:: bash
749
751
750 id : <id_given_in_input>
752 id : <id_given_in_input>
751 result: {
753 result: {
752 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
754 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
753 "success": true
755 "success": true
754 }
756 }
755 error: null
757 error: null
756
758
757
759
758 invalidate_cache
760 invalidate_cache
759 ----------------
761 ----------------
760
762
761 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
763 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
762
764
763 Invalidates the cache for the specified repository.
765 Invalidates the cache for the specified repository.
764
766
765 This command can only be run using an |authtoken| with admin rights to
767 This command can only be run using an |authtoken| with admin rights to
766 the specified repository.
768 the specified repository.
767
769
768 This command takes the following options:
770 This command takes the following options:
769
771
770 :param apiuser: This is filled automatically from |authtoken|.
772 :param apiuser: This is filled automatically from |authtoken|.
771 :type apiuser: AuthUser
773 :type apiuser: AuthUser
772 :param repoid: Sets the repository name or repository ID.
774 :param repoid: Sets the repository name or repository ID.
773 :type repoid: str or int
775 :type repoid: str or int
774 :param delete_keys: This deletes the invalidated keys instead of
776 :param delete_keys: This deletes the invalidated keys instead of
775 just flagging them.
777 just flagging them.
776 :type delete_keys: Optional(``True`` | ``False``)
778 :type delete_keys: Optional(``True`` | ``False``)
777
779
778 Example output:
780 Example output:
779
781
780 .. code-block:: bash
782 .. code-block:: bash
781
783
782 id : <id_given_in_input>
784 id : <id_given_in_input>
783 result : {
785 result : {
784 'msg': Cache for repository `<repository name>` was invalidated,
786 'msg': Cache for repository `<repository name>` was invalidated,
785 'repository': <repository name>
787 'repository': <repository name>
786 }
788 }
787 error : null
789 error : null
788
790
789 Example error output:
791 Example error output:
790
792
791 .. code-block:: bash
793 .. code-block:: bash
792
794
793 id : <id_given_in_input>
795 id : <id_given_in_input>
794 result : null
796 result : null
795 error : {
797 error : {
796 'Error occurred during cache invalidation action'
798 'Error occurred during cache invalidation action'
797 }
799 }
798
800
799
801
800 lock
802 lock
801 ----
803 ----
802
804
803 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
805 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
804
806
805 Sets the lock state of the specified |repo| by the given user.
807 Sets the lock state of the specified |repo| by the given user.
806 From more information, see :ref:`repo-locking`.
808 From more information, see :ref:`repo-locking`.
807
809
808 * If the ``userid`` option is not set, the repository is locked to the
810 * If the ``userid`` option is not set, the repository is locked to the
809 user who called the method.
811 user who called the method.
810 * If the ``locked`` parameter is not set, the current lock state of the
812 * If the ``locked`` parameter is not set, the current lock state of the
811 repository is displayed.
813 repository is displayed.
812
814
813 This command can only be run using an |authtoken| with admin rights to
815 This command can only be run using an |authtoken| with admin rights to
814 the specified repository.
816 the specified repository.
815
817
816 This command takes the following options:
818 This command takes the following options:
817
819
818 :param apiuser: This is filled automatically from the |authtoken|.
820 :param apiuser: This is filled automatically from the |authtoken|.
819 :type apiuser: AuthUser
821 :type apiuser: AuthUser
820 :param repoid: Sets the repository name or repository ID.
822 :param repoid: Sets the repository name or repository ID.
821 :type repoid: str or int
823 :type repoid: str or int
822 :param locked: Sets the lock state.
824 :param locked: Sets the lock state.
823 :type locked: Optional(``True`` | ``False``)
825 :type locked: Optional(``True`` | ``False``)
824 :param userid: Set the repository lock to this user.
826 :param userid: Set the repository lock to this user.
825 :type userid: Optional(str or int)
827 :type userid: Optional(str or int)
826
828
827 Example error output:
829 Example error output:
828
830
829 .. code-block:: bash
831 .. code-block:: bash
830
832
831 id : <id_given_in_input>
833 id : <id_given_in_input>
832 result : {
834 result : {
833 'repo': '<reponame>',
835 'repo': '<reponame>',
834 'locked': <bool: lock state>,
836 'locked': <bool: lock state>,
835 'locked_since': <int: lock timestamp>,
837 'locked_since': <int: lock timestamp>,
836 'locked_by': <username of person who made the lock>,
838 'locked_by': <username of person who made the lock>,
837 'lock_reason': <str: reason for locking>,
839 'lock_reason': <str: reason for locking>,
838 'lock_state_changed': <bool: True if lock state has been changed in this request>,
840 'lock_state_changed': <bool: True if lock state has been changed in this request>,
839 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
841 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
840 or
842 or
841 'msg': 'Repo `<repository name>` not locked.'
843 'msg': 'Repo `<repository name>` not locked.'
842 or
844 or
843 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
845 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
844 }
846 }
845 error : null
847 error : null
846
848
847 Example error output:
849 Example error output:
848
850
849 .. code-block:: bash
851 .. code-block:: bash
850
852
851 id : <id_given_in_input>
853 id : <id_given_in_input>
852 result : null
854 result : null
853 error : {
855 error : {
854 'Error occurred locking repository `<reponame>`'
856 'Error occurred locking repository `<reponame>`'
855 }
857 }
856
858
857
859
858 maintenance
860 maintenance
859 -----------
861 -----------
860
862
861 .. py:function:: maintenance(apiuser, repoid)
863 .. py:function:: maintenance(apiuser, repoid)
862
864
863 Triggers a maintenance on the given repository.
865 Triggers a maintenance on the given repository.
864
866
865 This command can only be run using an |authtoken| with admin
867 This command can only be run using an |authtoken| with admin
866 rights to the specified repository. For more information,
868 rights to the specified repository. For more information,
867 see :ref:`config-token-ref`.
869 see :ref:`config-token-ref`.
868
870
869 This command takes the following options:
871 This command takes the following options:
870
872
871 :param apiuser: This is filled automatically from the |authtoken|.
873 :param apiuser: This is filled automatically from the |authtoken|.
872 :type apiuser: AuthUser
874 :type apiuser: AuthUser
873 :param repoid: The repository name or repository ID.
875 :param repoid: The repository name or repository ID.
874 :type repoid: str or int
876 :type repoid: str or int
875
877
876 Example output:
878 Example output:
877
879
878 .. code-block:: bash
880 .. code-block:: bash
879
881
880 id : <id_given_in_input>
882 id : <id_given_in_input>
881 result : {
883 result : {
882 "msg": "executed maintenance command",
884 "msg": "executed maintenance command",
883 "executed_actions": [
885 "executed_actions": [
884 <action_message>, <action_message2>...
886 <action_message>, <action_message2>...
885 ],
887 ],
886 "repository": "<repository name>"
888 "repository": "<repository name>"
887 }
889 }
888 error : null
890 error : null
889
891
890 Example error output:
892 Example error output:
891
893
892 .. code-block:: bash
894 .. code-block:: bash
893
895
894 id : <id_given_in_input>
896 id : <id_given_in_input>
895 result : null
897 result : null
896 error : {
898 error : {
897 "Unable to execute maintenance on `<reponame>`"
899 "Unable to execute maintenance on `<reponame>`"
898 }
900 }
899
901
900
902
901 pull
903 pull
902 ----
904 ----
903
905
904 .. py:function:: pull(apiuser, repoid, remote_uri=<Optional:None>)
906 .. py:function:: pull(apiuser, repoid, remote_uri=<Optional:None>)
905
907
906 Triggers a pull on the given repository from a remote location. You
908 Triggers a pull on the given repository from a remote location. You
907 can use this to keep remote repositories up-to-date.
909 can use this to keep remote repositories up-to-date.
908
910
909 This command can only be run using an |authtoken| with admin
911 This command can only be run using an |authtoken| with admin
910 rights to the specified repository. For more information,
912 rights to the specified repository. For more information,
911 see :ref:`config-token-ref`.
913 see :ref:`config-token-ref`.
912
914
913 This command takes the following options:
915 This command takes the following options:
914
916
915 :param apiuser: This is filled automatically from the |authtoken|.
917 :param apiuser: This is filled automatically from the |authtoken|.
916 :type apiuser: AuthUser
918 :type apiuser: AuthUser
917 :param repoid: The repository name or repository ID.
919 :param repoid: The repository name or repository ID.
918 :type repoid: str or int
920 :type repoid: str or int
919 :param remote_uri: Optional remote URI to pass in for pull
921 :param remote_uri: Optional remote URI to pass in for pull
920 :type remote_uri: str
922 :type remote_uri: str
921
923
922 Example output:
924 Example output:
923
925
924 .. code-block:: bash
926 .. code-block:: bash
925
927
926 id : <id_given_in_input>
928 id : <id_given_in_input>
927 result : {
929 result : {
928 "msg": "Pulled from url `<remote_url>` on repo `<repository name>`"
930 "msg": "Pulled from url `<remote_url>` on repo `<repository name>`"
929 "repository": "<repository name>"
931 "repository": "<repository name>"
930 }
932 }
931 error : null
933 error : null
932
934
933 Example error output:
935 Example error output:
934
936
935 .. code-block:: bash
937 .. code-block:: bash
936
938
937 id : <id_given_in_input>
939 id : <id_given_in_input>
938 result : null
940 result : null
939 error : {
941 error : {
940 "Unable to push changes from `<remote_url>`"
942 "Unable to push changes from `<remote_url>`"
941 }
943 }
942
944
943
945
944 remove_field_from_repo
946 remove_field_from_repo
945 ----------------------
947 ----------------------
946
948
947 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
949 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
948
950
949 Removes an extra field from a repository.
951 Removes an extra field from a repository.
950
952
951 This command can only be run using an |authtoken| with at least
953 This command can only be run using an |authtoken| with at least
952 write permissions to the |repo|.
954 write permissions to the |repo|.
953
955
954 :param apiuser: This is filled automatically from the |authtoken|.
956 :param apiuser: This is filled automatically from the |authtoken|.
955 :type apiuser: AuthUser
957 :type apiuser: AuthUser
956 :param repoid: Set the repository name or repository ID.
958 :param repoid: Set the repository name or repository ID.
957 :type repoid: str or int
959 :type repoid: str or int
958 :param key: Set the unique field key for this repository.
960 :param key: Set the unique field key for this repository.
959 :type key: str
961 :type key: str
960
962
961
963
962 revoke_user_group_permission
964 revoke_user_group_permission
963 ----------------------------
965 ----------------------------
964
966
965 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
967 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
966
968
967 Revoke the permissions of a user group on a given repository.
969 Revoke the permissions of a user group on a given repository.
968
970
969 This command can only be run using an |authtoken| with admin
971 This command can only be run using an |authtoken| with admin
970 permissions on the |repo|.
972 permissions on the |repo|.
971
973
972 :param apiuser: This is filled automatically from the |authtoken|.
974 :param apiuser: This is filled automatically from the |authtoken|.
973 :type apiuser: AuthUser
975 :type apiuser: AuthUser
974 :param repoid: Set the repository name or repository ID.
976 :param repoid: Set the repository name or repository ID.
975 :type repoid: str or int
977 :type repoid: str or int
976 :param usergroupid: Specify the user group ID.
978 :param usergroupid: Specify the user group ID.
977 :type usergroupid: str or int
979 :type usergroupid: str or int
978
980
979 Example output:
981 Example output:
980
982
981 .. code-block:: bash
983 .. code-block:: bash
982
984
983 id : <id_given_in_input>
985 id : <id_given_in_input>
984 result: {
986 result: {
985 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
987 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
986 "success": true
988 "success": true
987 }
989 }
988 error: null
990 error: null
989
991
990
992
991 revoke_user_permission
993 revoke_user_permission
992 ----------------------
994 ----------------------
993
995
994 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
996 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
995
997
996 Revoke permission for a user on the specified repository.
998 Revoke permission for a user on the specified repository.
997
999
998 This command can only be run using an |authtoken| with admin
1000 This command can only be run using an |authtoken| with admin
999 permissions on the |repo|.
1001 permissions on the |repo|.
1000
1002
1001 :param apiuser: This is filled automatically from the |authtoken|.
1003 :param apiuser: This is filled automatically from the |authtoken|.
1002 :type apiuser: AuthUser
1004 :type apiuser: AuthUser
1003 :param repoid: Set the repository name or repository ID.
1005 :param repoid: Set the repository name or repository ID.
1004 :type repoid: str or int
1006 :type repoid: str or int
1005 :param userid: Set the user name of revoked user.
1007 :param userid: Set the user name of revoked user.
1006 :type userid: str or int
1008 :type userid: str or int
1007
1009
1008 Example error output:
1010 Example error output:
1009
1011
1010 .. code-block:: bash
1012 .. code-block:: bash
1011
1013
1012 id : <id_given_in_input>
1014 id : <id_given_in_input>
1013 result: {
1015 result: {
1014 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
1016 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
1015 "success": true
1017 "success": true
1016 }
1018 }
1017 error: null
1019 error: null
1018
1020
1019
1021
1020 set_repo_settings
1022 set_repo_settings
1021 -----------------
1023 -----------------
1022
1024
1023 .. py:function:: set_repo_settings(apiuser, repoid, settings)
1025 .. py:function:: set_repo_settings(apiuser, repoid, settings)
1024
1026
1025 Update repository settings. Returns true on success.
1027 Update repository settings. Returns true on success.
1026
1028
1027 :param apiuser: This is filled automatically from the |authtoken|.
1029 :param apiuser: This is filled automatically from the |authtoken|.
1028 :type apiuser: AuthUser
1030 :type apiuser: AuthUser
1029 :param repoid: The repository name or repository id.
1031 :param repoid: The repository name or repository id.
1030 :type repoid: str or int
1032 :type repoid: str or int
1031 :param settings: The new settings for the repository.
1033 :param settings: The new settings for the repository.
1032 :type: settings: dict
1034 :type: settings: dict
1033
1035
1034 Example output:
1036 Example output:
1035
1037
1036 .. code-block:: bash
1038 .. code-block:: bash
1037
1039
1038 {
1040 {
1039 "error": null,
1041 "error": null,
1040 "id": 237,
1042 "id": 237,
1041 "result": true
1043 "result": true
1042 }
1044 }
1043
1045
1044
1046
1045 strip
1047 strip
1046 -----
1048 -----
1047
1049
1048 .. py:function:: strip(apiuser, repoid, revision, branch)
1050 .. py:function:: strip(apiuser, repoid, revision, branch)
1049
1051
1050 Strips the given revision from the specified repository.
1052 Strips the given revision from the specified repository.
1051
1053
1052 * This will remove the revision and all of its decendants.
1054 * This will remove the revision and all of its decendants.
1053
1055
1054 This command can only be run using an |authtoken| with admin rights to
1056 This command can only be run using an |authtoken| with admin rights to
1055 the specified repository.
1057 the specified repository.
1056
1058
1057 This command takes the following options:
1059 This command takes the following options:
1058
1060
1059 :param apiuser: This is filled automatically from the |authtoken|.
1061 :param apiuser: This is filled automatically from the |authtoken|.
1060 :type apiuser: AuthUser
1062 :type apiuser: AuthUser
1061 :param repoid: The repository name or repository ID.
1063 :param repoid: The repository name or repository ID.
1062 :type repoid: str or int
1064 :type repoid: str or int
1063 :param revision: The revision you wish to strip.
1065 :param revision: The revision you wish to strip.
1064 :type revision: str
1066 :type revision: str
1065 :param branch: The branch from which to strip the revision.
1067 :param branch: The branch from which to strip the revision.
1066 :type branch: str
1068 :type branch: str
1067
1069
1068 Example output:
1070 Example output:
1069
1071
1070 .. code-block:: bash
1072 .. code-block:: bash
1071
1073
1072 id : <id_given_in_input>
1074 id : <id_given_in_input>
1073 result : {
1075 result : {
1074 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
1076 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
1075 "repository": "<repository name>"
1077 "repository": "<repository name>"
1076 }
1078 }
1077 error : null
1079 error : null
1078
1080
1079 Example error output:
1081 Example error output:
1080
1082
1081 .. code-block:: bash
1083 .. code-block:: bash
1082
1084
1083 id : <id_given_in_input>
1085 id : <id_given_in_input>
1084 result : null
1086 result : null
1085 error : {
1087 error : {
1086 "Unable to strip commit <commit_hash> from repo `<repository name>`"
1088 "Unable to strip commit <commit_hash> from repo `<repository name>`"
1087 }
1089 }
1088
1090
1089
1091
1090 update_repo
1092 update_repo
1091 -----------
1093 -----------
1092
1094
1093 .. py:function:: update_repo(apiuser, repoid, repo_name=<Optional:None>, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, push_uri=<Optional:None>, landing_rev=<Optional:None>, fork_of=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, fields=<Optional:''>)
1095 .. py:function:: update_repo(apiuser, repoid, repo_name=<Optional:None>, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, push_uri=<Optional:None>, landing_rev=<Optional:None>, fork_of=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, fields=<Optional:''>)
1094
1096
1095 Updates a repository with the given information.
1097 Updates a repository with the given information.
1096
1098
1097 This command can only be run using an |authtoken| with at least
1099 This command can only be run using an |authtoken| with at least
1098 admin permissions to the |repo|.
1100 admin permissions to the |repo|.
1099
1101
1100 * If the repository name contains "/", repository will be updated
1102 * If the repository name contains "/", repository will be updated
1101 accordingly with a repository group or nested repository groups
1103 accordingly with a repository group or nested repository groups
1102
1104
1103 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1105 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1104 called "repo-test" and place it inside group "foo/bar".
1106 called "repo-test" and place it inside group "foo/bar".
1105 You have to have permissions to access and write to the last repository
1107 You have to have permissions to access and write to the last repository
1106 group ("bar" in this example)
1108 group ("bar" in this example)
1107
1109
1108 :param apiuser: This is filled automatically from the |authtoken|.
1110 :param apiuser: This is filled automatically from the |authtoken|.
1109 :type apiuser: AuthUser
1111 :type apiuser: AuthUser
1110 :param repoid: repository name or repository ID.
1112 :param repoid: repository name or repository ID.
1111 :type repoid: str or int
1113 :type repoid: str or int
1112 :param repo_name: Update the |repo| name, including the
1114 :param repo_name: Update the |repo| name, including the
1113 repository group it's in.
1115 repository group it's in.
1114 :type repo_name: str
1116 :type repo_name: str
1115 :param owner: Set the |repo| owner.
1117 :param owner: Set the |repo| owner.
1116 :type owner: str
1118 :type owner: str
1117 :param fork_of: Set the |repo| as fork of another |repo|.
1119 :param fork_of: Set the |repo| as fork of another |repo|.
1118 :type fork_of: str
1120 :type fork_of: str
1119 :param description: Update the |repo| description.
1121 :param description: Update the |repo| description.
1120 :type description: str
1122 :type description: str
1121 :param private: Set the |repo| as private. (True | False)
1123 :param private: Set the |repo| as private. (True | False)
1122 :type private: bool
1124 :type private: bool
1123 :param clone_uri: Update the |repo| clone URI.
1125 :param clone_uri: Update the |repo| clone URI.
1124 :type clone_uri: str
1126 :type clone_uri: str
1125 :param landing_rev: Set the |repo| landing revision. e.g branch:default, book:dev, rev:abcd
1127 :param landing_rev: Set the |repo| landing revision. e.g branch:default, book:dev, rev:abcd
1126 :type landing_rev: str
1128 :type landing_rev: str
1127 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1129 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1128 :type enable_statistics: bool
1130 :type enable_statistics: bool
1129 :param enable_locking: Enable |repo| locking.
1131 :param enable_locking: Enable |repo| locking.
1130 :type enable_locking: bool
1132 :type enable_locking: bool
1131 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1133 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1132 :type enable_downloads: bool
1134 :type enable_downloads: bool
1133 :param fields: Add extra fields to the |repo|. Use the following
1135 :param fields: Add extra fields to the |repo|. Use the following
1134 example format: ``field_key=field_val,field_key2=fieldval2``.
1136 example format: ``field_key=field_val,field_key2=fieldval2``.
1135 Escape ', ' with \,
1137 Escape ', ' with \,
1136 :type fields: str
1138 :type fields: str
1137
1139
1138
1140
@@ -1,41 +1,56 b''
1 .. _search-methods-ref:
1 .. _search-methods-ref:
2
2
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
9 .. py:function:: search(apiuser, search_query, search_type, page_limit=<Optional:10>, page=<Optional:1>, search_sort=<Optional:'desc:date'>, repo_name=<Optional:None>, repo_group_name=<Optional:None>)
24 .. py:function:: search(apiuser, search_query, search_type, page_limit=<Optional:10>, page=<Optional:1>, search_sort=<Optional:'desc:date'>, repo_name=<Optional:None>, repo_group_name=<Optional:None>)
10
25
11 Fetch Full Text Search results using API.
26 Fetch Full Text Search results using API.
12
27
13 :param apiuser: This is filled automatically from the |authtoken|.
28 :param apiuser: This is filled automatically from the |authtoken|.
14 :type apiuser: AuthUser
29 :type apiuser: AuthUser
15 :param search_query: Search query.
30 :param search_query: Search query.
16 :type search_query: str
31 :type search_query: str
17 :param search_type: Search type. The following are valid options:
32 :param search_type: Search type. The following are valid options:
18 * commit
33 * commit
19 * content
34 * content
20 * path
35 * path
21 :type search_type: str
36 :type search_type: str
22 :param page_limit: Page item limit, from 1 to 500. Default 10 items.
37 :param page_limit: Page item limit, from 1 to 500. Default 10 items.
23 :type page_limit: Optional(int)
38 :type page_limit: Optional(int)
24 :param page: Page number. Default first page.
39 :param page: Page number. Default first page.
25 :type page: Optional(int)
40 :type page: Optional(int)
26 :param search_sort: Search sort order.Must start with asc: or desc: Default desc:date.
41 :param search_sort: Search sort order.Must start with asc: or desc: Default desc:date.
27 The following are valid options:
42 The following are valid options:
28 * asc|desc:message.raw
43 * asc|desc:message.raw
29 * asc|desc:date
44 * asc|desc:date
30 * asc|desc:author.email.raw
45 * asc|desc:author.email.raw
31 * asc|desc:message.raw
46 * asc|desc:message.raw
32 * newfirst (old legacy equal to desc:date)
47 * newfirst (old legacy equal to desc:date)
33 * oldfirst (old legacy equal to asc:date)
48 * oldfirst (old legacy equal to asc:date)
34
49
35 :type search_sort: Optional(str)
50 :type search_sort: Optional(str)
36 :param repo_name: Filter by one repo. Default is all.
51 :param repo_name: Filter by one repo. Default is all.
37 :type repo_name: Optional(str)
52 :type repo_name: Optional(str)
38 :param repo_group_name: Filter by one repo group. Default is all.
53 :param repo_group_name: Filter by one repo group. Default is all.
39 :type repo_group_name: Optional(str)
54 :type repo_group_name: Optional(str)
40
55
41
56
@@ -1,160 +1,160 b''
1 .. _config-ldap-groups-ref:
1 .. _config-ldap-groups-ref:
2
2
3 LDAP/AD With User Groups Sync
3 LDAP/AD With User Groups Sync
4 -----------------------------
4 -----------------------------
5
5
6 **This plugin is available only in EE Edition.**
6 **This plugin is available only in EE Edition.**
7
7
8 |RCE| supports LDAP (Lightweight Directory Access Protocol) or
8 |RCE| supports LDAP (Lightweight Directory Access Protocol) or
9 AD (active Directory) authentication.
9 AD (active Directory) authentication.
10 All LDAP versions are currently supported.
10 All LDAP versions are currently supported.
11
11
12 RhodeCode reads all data defined from plugin and creates corresponding
12 RhodeCode reads all data defined from plugin and creates corresponding
13 accounts on local database after receiving data from LDAP. This is done on
13 accounts on local database after receiving data from LDAP. This is done on
14 every user log-in including operations like pushing/pulling/checkout.
14 every user log-in including operations like pushing/pulling/checkout.
15 In addition group membership is read from LDAP and following operations are done:
15 In addition group membership is read from LDAP and following operations are done:
16
16
17 - automatic addition of user to |RCE| user group
17 - automatic addition of user to |RCE| user group
18 - automatic removal of user from any other |RCE| user groups not specified in LDAP.
18 - automatic removal of user from any other |RCE| user groups not specified in LDAP.
19 The removal is done *only* on groups that are marked to be synced from ldap.
19 The removal is done *only* on groups that are marked to be synced from ldap.
20 This setting can be changed in advanced settings on user groups
20 This setting can be changed in advanced settings on user groups
21 - automatic creation of user groups if they aren't yet existing in |RCE|
21 - automatic creation of user groups if they aren't yet existing in |RCE|
22 - marking user as super-admins if he is a member of any admin group defined in plugin settings
22 - marking user as super-admins if he is a member of any admin group defined in plugin settings
23
23
24
24
25 .. important::
25 .. important::
26
26
27 The email used with your |RCE| super-admin account needs to match the email
27 The email used with your |RCE| super-admin account needs to match the email
28 address attached to your admin profile in LDAP. This is because
28 address attached to your admin profile in LDAP. This is because
29 within |RCE| the user email needs to be unique, and multiple users
29 within |RCE| the user email needs to be unique, and multiple users
30 cannot share an email account.
30 cannot share an email account.
31
31
32 Likewise, if as an admin you also have a user account, the email address
32 Likewise, if as an admin you also have a user account, the email address
33 attached to the user account needs to be different.
33 attached to the user account needs to be different.
34
34
35
35
36 LDAP Configuration Steps
36 LDAP Configuration Steps
37 ^^^^^^^^^^^^^^^^^^^^^^^^
37 ^^^^^^^^^^^^^^^^^^^^^^^^
38
38
39 To configure |LDAP|, use the following steps:
39 To configure |LDAP|, use the following steps:
40
40
41 1. From the |RCE| interface, select
41 1. From the |RCE| interface, select
42 :menuselection:`Admin --> Authentication`
42 :menuselection:`Admin --> Authentication`
43 2. Activate the `LDAP + User Groups` plugin and select :guilabel:`Save`
43 2. Activate the `LDAP + User Groups` plugin and select :guilabel:`Save`
44 3. Go to newly available menu option called `LDAP + User Groups` on the left side.
44 3. Go to newly available menu option called `LDAP + User Groups` on the left side.
45 4. Check the `enabled` check box in the plugin configuration section,
45 4. Check the `enabled` check box in the plugin configuration section,
46 and fill in the required LDAP information and :guilabel:`Save`, for more details,
46 and fill in the required LDAP information and :guilabel:`Save`, for more details,
47 see :ref:`config-ldap-groups-examples`
47 see :ref:`config-ldap-groups-examples`
48
48
49 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
49 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
50
50
51 .. _config-ldap-groups-examples:
51 .. _config-ldap-groups-examples:
52
52
53 Example LDAP configuration
53 Example LDAP configuration
54 ^^^^^^^^^^^^^^^^^^^^^^^^^^
54 ^^^^^^^^^^^^^^^^^^^^^^^^^^
55
55
56 Below is example setup that can be used with Active Directory and LDAP server with groups sync::
56 Below is example setup that can be used with Active Directory and LDAP server with groups sync::
57
57
58 *option*: `enabled` => `True`
58 *option*: `enabled` => `True`
59 # Enable or disable this authentication plugin.
59 # Enable or disable this authentication plugin.
60
60
61 *option*: `cache_ttl` => `360`
61 *option*: `cache_ttl` => `360`
62 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
62 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
63 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
63 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
64
64
65 *option*: `host` => `192.168.245.143,192.168.1.240`
65 *option*: `host` => `192.168.245.143,192.168.1.240`
66 # Host[s] of the LDAP Server
66 # Host[s] of the LDAP Server
67 # (e.g., 192.168.2.154, or ldap-server.domain.com.
67 # (e.g., 192.168.2.154, or ldap-server.domain.com.
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 689 for LDAPS(SSL)
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
75
75
76 *option*: `dn_user` => `Administrator@rhodecode.com`
76 *option*: `dn_user` => `Administrator@rhodecode.com`
77 # Optional user DN/account to connect to LDAP if authentication is required.
77 # Optional user DN/account to connect to LDAP if authentication is required.
78 # e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com
78 # e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com
79
79
80 *option*: `dn_pass` => `SomeSecret`
80 *option*: `dn_pass` => `SomeSecret`
81 # Password to authenticate for given user DN.
81 # Password to authenticate for given user DN.
82
82
83 *option*: `tls_kind` => `PLAIN`
83 *option*: `tls_kind` => `PLAIN`
84 # TLS Type
84 # TLS Type
85
85
86 *option*: `tls_reqcert` => `NEVER`
86 *option*: `tls_reqcert` => `NEVER`
87 # Require Cert over TLS?. Self-signed and custom certificates can be used when
87 # Require Cert over TLS?. Self-signed and custom certificates can be used when
88 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
88 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
89
89
90 *option*: `tls_cert_file` => ``
90 *option*: `tls_cert_file` => ``
91 # This specifies the PEM-format file path containing certificates for use in TLS connection.
91 # This specifies the PEM-format file path containing certificates for use in TLS connection.
92 # If not specified `TLS Cert dir` will be used
92 # If not specified `TLS Cert dir` will be used
93
93
94 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
94 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
95 # This specifies the path of a directory that contains individual CA certificates in separate files.
95 # This specifies the path of a directory that contains individual CA certificates in separate files.
96
96
97 *option*: `base_dn` => `dc=rhodecode,dc=com`
97 *option*: `base_dn` => `dc=rhodecode,dc=com`
98 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
98 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
99 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
99 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
100
100
101 *option*: `user_search_base` => `ou=RC-Users`
101 *option*: `user_search_base` => `ou=RC-Users`
102 # User search base will extend the Base DN
102 # User search base will extend the Base DN
103 # (e.g., ou=Users will result in ou=Users,dc=mydomain,dc=com root DN)
103 # (e.g., ou=Users will result in ou=Users,dc=mydomain,dc=com root DN)
104
104
105 *option*: `user_search_filter` => ``
105 *option*: `user_search_filter` => ``
106 # Filter to narrow results
106 # Filter to narrow results
107 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
107 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
108 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
108 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
109
109
110 *option*: `search_scope` => `SUBTREE`
110 *option*: `search_scope` => `SUBTREE`
111 # How deep to search LDAP. If unsure set to SUBTREE
111 # How deep to search LDAP. If unsure set to SUBTREE
112
112
113 *option*: `attr_login` => `sAMAccountName`
113 *option*: `attr_login` => `sAMAccountName`
114 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
114 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
115
115
116 *option*: `attr_email` => `mail`
116 *option*: `attr_email` => `mail`
117 # LDAP Attribute to map to email address (e.g., mail).
117 # LDAP Attribute to map to email address (e.g., mail).
118 # Emails are a crucial part of RhodeCode.
118 # Emails are a crucial part of RhodeCode.
119 # If possible add a valid email attribute to ldap users.
119 # If possible add a valid email attribute to ldap users.
120
120
121 *option*: `attr_firstname` => `givenName`
121 *option*: `attr_firstname` => `givenName`
122 # LDAP Attribute to map to first name (e.g., givenName)
122 # LDAP Attribute to map to first name (e.g., givenName)
123
123
124 *option*: `attr_lastname` => `sn`
124 *option*: `attr_lastname` => `sn`
125 # LDAP Attribute to map to last name (e.g., sn)
125 # LDAP Attribute to map to last name (e.g., sn)
126
126
127 *option*: `group_extraction_type` => `rfc2307bis`
127 *option*: `group_extraction_type` => `rfc2307bis`
128 # With rfc2307, group members are listed by name in the memberUid attribute
128 # With rfc2307, group members are listed by name in the memberUid attribute
129 # With rfc2307bis (Microsoft AD compatible) group members are listed by DN and stored in the member attribute
129 # With rfc2307bis (Microsoft AD compatible) group members are listed by DN and stored in the member attribute
130
130
131 *option*: `group_search_base` => `ou=RC-Groups`
131 *option*: `group_search_base` => `ou=RC-Groups`
132 # Group search base will extend the Base DN (e.g. ou=Groups will result in ou=Groups,dc=mydomain,dc=com)
132 # Group search base will extend the Base DN (e.g. ou=Groups will result in ou=Groups,dc=mydomain,dc=com)
133
133
134 *option*: `group_name_attr` => `sAMAccountName`
134 *option*: `group_name_attr` => `sAMAccountName`
135 # LDAP Attribute to map to group name (e.g., cn, or sAMAccountName)
135 # LDAP Attribute to map to group name (e.g., cn, or sAMAccountName)
136
136
137 *option*: `user_member_of` => `memberOf`
137 *option*: `user_member_of` => `memberOf`
138 # Users Attribute used to fetch the group membership.
138 # Users Attribute used to fetch the group membership.
139 # Use if users have stored group membership inside their attributes
139 # Use if users have stored group membership inside their attributes
140 # (e.g., memberOf, or userMemberOf)
140 # (e.g., memberOf, or userMemberOf)
141
141
142 *option*: `group_search_filter` => ``
142 *option*: `group_search_filter` => ``
143 # Filter to narrow results (e.g., (&(objectCategory=Group)(objectClass=group)), etc)
143 # Filter to narrow results (e.g., (&(objectCategory=Group)(objectClass=group)), etc)
144
144
145 *option*: `group_member_of` => `memberOf`
145 *option*: `group_member_of` => `memberOf`
146 # LDAP Attribute used to resolve the parent group (e.g., memberOf)
146 # LDAP Attribute used to resolve the parent group (e.g., memberOf)
147
147
148 *option*: `admin_groups` => `Admins,Management`
148 *option*: `admin_groups` => `Admins,Management`
149 # A comma separated list of group names that identify users as RhodeCode Administrators (e.g., admins)
149 # A comma separated list of group names that identify users as RhodeCode Administrators (e.g., admins)
150
150
151 *option*: `admin_groups_sync` => `full`
151 *option*: `admin_groups_sync` => `full`
152 # Way to sync Admin groups.
152 # Way to sync Admin groups.
153 # Full means admin flag is set to on or off according to membership in administrator group defined above.
153 # Full means admin flag is set to on or off according to membership in administrator group defined above.
154 # On-only means the flag is only set to on, and not turned off once user is no longer a member
154 # On-only means the flag is only set to on, and not turned off once user is no longer a member
155
155
156
156
157 .. toctree::
157 .. toctree::
158
158
159 ldap-active-directory
159 ldap-active-directory
160 ldap-authentication No newline at end of file
160 ldap-authentication
@@ -1,117 +1,117 b''
1 .. _config-ldap-ref:
1 .. _config-ldap-ref:
2
2
3 LDAP/AD
3 LDAP/AD
4 -------
4 -------
5
5
6 |RCE| supports LDAP (Lightweight Directory Access Protocol) or
6 |RCE| supports LDAP (Lightweight Directory Access Protocol) or
7 AD (active Directory) authentication.
7 AD (active Directory) authentication.
8 All LDAP versions are currently supported.
8 All LDAP versions are currently supported.
9
9
10 RhodeCode reads all data defined from plugin and creates corresponding
10 RhodeCode reads all data defined from plugin and creates corresponding
11 accounts on local database after receiving data from LDAP. This is done on
11 accounts on local database after receiving data from LDAP. This is done on
12 every user log-in including operations like pushing/pulling/checkout.
12 every user log-in including operations like pushing/pulling/checkout.
13
13
14
14
15 .. important::
15 .. important::
16
16
17 The email used with your |RCE| super-admin account needs to match the email
17 The email used with your |RCE| super-admin account needs to match the email
18 address attached to your admin profile in LDAP. This is because
18 address attached to your admin profile in LDAP. This is because
19 within |RCE| the user email needs to be unique, and multiple users
19 within |RCE| the user email needs to be unique, and multiple users
20 cannot share an email account.
20 cannot share an email account.
21
21
22 Likewise, if as an admin you also have a user account, the email address
22 Likewise, if as an admin you also have a user account, the email address
23 attached to the user account needs to be different.
23 attached to the user account needs to be different.
24
24
25
25
26 LDAP Configuration Steps
26 LDAP Configuration Steps
27 ^^^^^^^^^^^^^^^^^^^^^^^^
27 ^^^^^^^^^^^^^^^^^^^^^^^^
28
28
29 To configure |LDAP|, use the following steps:
29 To configure |LDAP|, use the following steps:
30
30
31 1. From the |RCE| interface, select
31 1. From the |RCE| interface, select
32 :menuselection:`Admin --> Authentication`
32 :menuselection:`Admin --> Authentication`
33 2. Activate the `LDAP` plugin and select :guilabel:`Save`
33 2. Activate the `LDAP` plugin and select :guilabel:`Save`
34 3. Go to newly available menu option called `LDAP` on the left side.
34 3. Go to newly available menu option called `LDAP` on the left side.
35 4. Check the `enabled` check box in the plugin configuration section,
35 4. Check the `enabled` check box in the plugin configuration section,
36 and fill in the required LDAP information and :guilabel:`Save`, for more details,
36 and fill in the required LDAP information and :guilabel:`Save`, for more details,
37 see :ref:`config-ldap-examples`
37 see :ref:`config-ldap-examples`
38
38
39 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
39 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
40
40
41 .. _config-ldap-examples:
41 .. _config-ldap-examples:
42
42
43 Example LDAP configuration
43 Example LDAP configuration
44 ^^^^^^^^^^^^^^^^^^^^^^^^^^
44 ^^^^^^^^^^^^^^^^^^^^^^^^^^
45
45
46 Below is example setup that can be used with Active Directory/LDAP server::
46 Below is example setup that can be used with Active Directory/LDAP server::
47
47
48 *option*: `enabled` => `True`
48 *option*: `enabled` => `True`
49 # Enable or disable this authentication plugin.
49 # Enable or disable this authentication plugin.
50
50
51 *option*: `cache_ttl` => `360`
51 *option*: `cache_ttl` => `360`
52 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
52 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
53 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
53 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
54
54
55 *option*: `host` => `192.168.245.143,192.168.1.240`
55 *option*: `host` => `192.168.245.143,192.168.1.240`
56 # Host[s] of the LDAP Server
56 # Host[s] of the LDAP Server
57 # (e.g., 192.168.2.154, or ldap-server.domain.com.
57 # (e.g., 192.168.2.154, or ldap-server.domain.com.
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 689 for LDAPS(SSL)
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
65
65
66 *option*: `dn_user` => `Administrator@rhodecode.com`
66 *option*: `dn_user` => `Administrator@rhodecode.com`
67 # Optional user DN/account to connect to LDAP if authentication is required.
67 # Optional user DN/account to connect to LDAP if authentication is required.
68 # e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com
68 # e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com
69
69
70 *option*: `dn_pass` => `SomeSecret`
70 *option*: `dn_pass` => `SomeSecret`
71 # Password to authenticate for given user DN.
71 # Password to authenticate for given user DN.
72
72
73 *option*: `tls_kind` => `PLAIN`
73 *option*: `tls_kind` => `PLAIN`
74 # TLS Type
74 # TLS Type
75
75
76 *option*: `tls_reqcert` => `NEVER`
76 *option*: `tls_reqcert` => `NEVER`
77 # Require Cert over TLS?. Self-signed and custom certificates can be used when
77 # Require Cert over TLS?. Self-signed and custom certificates can be used when
78 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
78 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
79
79
80 *option*: `tls_cert_file` => ``
80 *option*: `tls_cert_file` => ``
81 # This specifies the PEM-format file path containing certificates for use in TLS connection.
81 # This specifies the PEM-format file path containing certificates for use in TLS connection.
82 # If not specified `TLS Cert dir` will be used
82 # If not specified `TLS Cert dir` will be used
83
83
84 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
84 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
85 # This specifies the path of a directory that contains individual CA certificates in separate files.
85 # This specifies the path of a directory that contains individual CA certificates in separate files.
86
86
87 *option*: `base_dn` => `cn=Rufus Magillacuddy,ou=users,dc=rhodecode,dc=com`
87 *option*: `base_dn` => `cn=Rufus Magillacuddy,ou=users,dc=rhodecode,dc=com`
88 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
88 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
89 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
89 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
90
90
91 *option*: `filter` => `(objectClass=person)`
91 *option*: `filter` => `(objectClass=person)`
92 # Filter to narrow results
92 # Filter to narrow results
93 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
93 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
94 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
94 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
95
95
96 *option*: `search_scope` => `SUBTREE`
96 *option*: `search_scope` => `SUBTREE`
97 # How deep to search LDAP. If unsure set to SUBTREE
97 # How deep to search LDAP. If unsure set to SUBTREE
98
98
99 *option*: `attr_login` => `sAMAccountName`
99 *option*: `attr_login` => `sAMAccountName`
100 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
100 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
101
101
102 *option*: `attr_email` => `mail`
102 *option*: `attr_email` => `mail`
103 # LDAP Attribute to map to email address (e.g., mail).
103 # LDAP Attribute to map to email address (e.g., mail).
104 # Emails are a crucial part of RhodeCode.
104 # Emails are a crucial part of RhodeCode.
105 # If possible add a valid email attribute to ldap users.
105 # If possible add a valid email attribute to ldap users.
106
106
107 *option*: `attr_firstname` => `givenName`
107 *option*: `attr_firstname` => `givenName`
108 # LDAP Attribute to map to first name (e.g., givenName)
108 # LDAP Attribute to map to first name (e.g., givenName)
109
109
110 *option*: `attr_lastname` => `sn`
110 *option*: `attr_lastname` => `sn`
111 # LDAP Attribute to map to last name (e.g., sn)
111 # LDAP Attribute to map to last name (e.g., sn)
112
112
113
113
114 .. toctree::
114 .. toctree::
115
115
116 ldap-active-directory
116 ldap-active-directory
117 ldap-authentication
117 ldap-authentication
@@ -1,75 +1,75 b''
1 .. _ldap-act-dir-ref:
1 .. _ldap-act-dir-ref:
2
2
3 Active Directory
3 Active Directory
4 ----------------
4 ----------------
5
5
6 |RCE| can use Microsoft Active Directory for user authentication. This is
6 |RCE| can use Microsoft Active Directory for user authentication. This is
7 done through an LDAP or LDAPS connection to Active Directory. Use the
7 done through an LDAP or LDAPS connection to Active Directory. Use the
8 following example LDAP configuration setting to set your Active Directory
8 following example LDAP configuration setting to set your Active Directory
9 authentication::
9 authentication::
10
10
11
11
12 *option*: `enabled` => `True`
12 *option*: `enabled` => `True`
13 # Enable or disable this authentication plugin.
13 # Enable or disable this authentication plugin.
14
14
15 *option*: `cache_ttl` => `360`
15 *option*: `cache_ttl` => `360`
16 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
16 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
17 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
17 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
18
18
19 *option*: `host` => `192.168.245.143,192.168.1.240`
19 *option*: `host` => `192.168.245.143,192.168.1.240`
20 # Host[s] of the LDAP Server
20 # Host[s] of the LDAP Server
21 # (e.g., 192.168.2.154, or ldap-server.domain.com.
21 # (e.g., 192.168.2.154, or ldap-server.domain.com.
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 689 for LDAPS(SSL)
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
29
29
30 *option*: `dn_user` => `Administrator@rhodecode.com`
30 *option*: `dn_user` => `Administrator@rhodecode.com`
31 # Optional user DN/account to connect to LDAP if authentication is required.
31 # Optional user DN/account to connect to LDAP if authentication is required.
32 # e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com
32 # e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com
33
33
34 *option*: `dn_pass` => `SomeSecret`
34 *option*: `dn_pass` => `SomeSecret`
35 # Password to authenticate for given user DN.
35 # Password to authenticate for given user DN.
36
36
37 *option*: `tls_kind` => `PLAIN`
37 *option*: `tls_kind` => `PLAIN`
38 # TLS Type
38 # TLS Type
39
39
40 *option*: `tls_reqcert` => `NEVER`
40 *option*: `tls_reqcert` => `NEVER`
41 # Require Cert over TLS?. Self-signed and custom certificates can be used when
41 # Require Cert over TLS?. Self-signed and custom certificates can be used when
42 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
42 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
43
43
44 *option*: `tls_cert_file` => ``
44 *option*: `tls_cert_file` => ``
45 # This specifies the PEM-format file path containing certificates for use in TLS connection.
45 # This specifies the PEM-format file path containing certificates for use in TLS connection.
46 # If not specified `TLS Cert dir` will be used
46 # If not specified `TLS Cert dir` will be used
47
47
48 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
48 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
49 # This specifies the path of a directory that contains individual CA certificates in separate files.
49 # This specifies the path of a directory that contains individual CA certificates in separate files.
50
50
51 *option*: `base_dn` => `OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local`
51 *option*: `base_dn` => `OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local`
52 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
52 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
53 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
53 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
54
54
55 *option*: `filter` => `(objectClass=person)`
55 *option*: `filter` => `(objectClass=person)`
56 # Filter to narrow results
56 # Filter to narrow results
57 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
57 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
58 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
58 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
59
59
60 *option*: `search_scope` => `SUBTREE`
60 *option*: `search_scope` => `SUBTREE`
61 # How deep to search LDAP. If unsure set to SUBTREE
61 # How deep to search LDAP. If unsure set to SUBTREE
62
62
63 *option*: `attr_login` => `sAMAccountName`
63 *option*: `attr_login` => `sAMAccountName`
64 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
64 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
65
65
66 *option*: `attr_email` => `userEmail`
66 *option*: `attr_email` => `userEmail`
67 # LDAP Attribute to map to email address (e.g., mail).
67 # LDAP Attribute to map to email address (e.g., mail).
68 # Emails are a crucial part of RhodeCode.
68 # Emails are a crucial part of RhodeCode.
69 # If possible add a valid email attribute to ldap users.
69 # If possible add a valid email attribute to ldap users.
70
70
71 *option*: `attr_firstname` => `user_firstname`
71 *option*: `attr_firstname` => `user_firstname`
72 # LDAP Attribute to map to first name (e.g., givenName)
72 # LDAP Attribute to map to first name (e.g., givenName)
73
73
74 *option*: `attr_lastname` => `user_surname`
74 *option*: `attr_lastname` => `user_surname`
75 # LDAP Attribute to map to last name (e.g., sn)
75 # LDAP Attribute to map to last name (e.g., sn)
@@ -1,243 +1,243 b''
1 .. _dev-setup:
1 .. _dev-setup:
2
2
3 ===================
3 ===================
4 Development setup
4 Development setup
5 ===================
5 ===================
6
6
7
7
8 RhodeCode Enterprise runs inside a Nix managed environment. This ensures build
8 RhodeCode Enterprise runs inside a Nix managed environment. This ensures build
9 environment dependencies are correctly declared and installed during setup.
9 environment dependencies are correctly declared and installed during setup.
10 It also enables atomic upgrades, rollbacks, and multiple instances of RhodeCode
10 It also enables atomic upgrades, rollbacks, and multiple instances of RhodeCode
11 Enterprise running with isolation.
11 Enterprise running with isolation.
12
12
13 To set up RhodeCode Enterprise inside the Nix environment, use the following steps:
13 To set up RhodeCode Enterprise inside the Nix environment, use the following steps:
14
14
15
15
16
16
17 Setup Nix Package Manager
17 Setup Nix Package Manager
18 -------------------------
18 -------------------------
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/releases/nix/nix-2.0.4/install | sh
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
26 following commands:
26 following commands:
27
27
28 * `nix-env`
28 * `nix-env`
29
29
30 * `nix-shell`
30 * `nix-shell`
31
31
32
32
33 .. tip::
33 .. tip::
34
34
35 Update your channels frequently by running ``nix-channel --update``.
35 Update your channels frequently by running ``nix-channel --update``.
36
36
37 .. note::
37 .. note::
38
38
39 To uninstall nix run the following:
39 To uninstall nix run the following:
40
40
41 remove the . "$HOME/.nix-profile/etc/profile.d/nix.sh" line in your ~/.profile or ~/.bash_profile
41 remove the . "$HOME/.nix-profile/etc/profile.d/nix.sh" line in your ~/.profile or ~/.bash_profile
42 rm -rf $HOME/{.nix-channels,.nix-defexpr,.nix-profile,.config/nixpkgs}
42 rm -rf $HOME/{.nix-channels,.nix-defexpr,.nix-profile,.config/nixpkgs}
43 sudo rm -rf /nix
43 sudo rm -rf /nix
44
44
45 Switch nix to the latest STABLE channel
45 Switch nix to the latest STABLE channel
46 ---------------------------------------
46 ---------------------------------------
47
47
48 run::
48 run::
49
49
50 nix-channel --add https://nixos.org/channels/nixos-18.03 nixpkgs
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.0.4
55 nix-env -i nix-2.3.4
56
56
57
57
58 Install required binaries
58 Install required binaries
59 -------------------------
59 -------------------------
60
60
61 We need some handy tools first.
61 We need some handy tools first.
62
62
63 run::
63 run::
64
64
65 nix-env -i nix-prefetch-hg
65 nix-env -i nix-prefetch-hg
66 nix-env -i nix-prefetch-git
66 nix-env -i nix-prefetch-git
67
67
68
68
69 Speed up JS build by installing PhantomJS
69 Speed up JS build by installing PhantomJS
70 -----------------------------------------
70 -----------------------------------------
71
71
72 PhantomJS will be downloaded each time nix-shell is invoked. To speed this by
72 PhantomJS will be downloaded each time nix-shell is invoked. To speed this by
73 setting already downloaded version do this::
73 setting already downloaded version do this::
74
74
75 nix-env -i phantomjs-2.1.1
75 nix-env -i phantomjs-2.1.1
76
76
77 # and set nix bin path
77 # and set nix bin path
78 export PATH=$PATH:~/.nix-profile/bin
78 export PATH=$PATH:~/.nix-profile/bin
79
79
80
80
81 Clone the required repositories
81 Clone the required repositories
82 -------------------------------
82 -------------------------------
83
83
84 After Nix is set up, clone the RhodeCode Enterprise Community Edition and
84 After Nix is set up, clone the RhodeCode Enterprise Community Edition and
85 RhodeCode VCSServer repositories into the same directory.
85 RhodeCode VCSServer repositories into the same directory.
86 RhodeCode currently is using Mercurial Version Control System, please make sure
86 RhodeCode currently is using Mercurial Version Control System, please make sure
87 you have it installed before continuing.
87 you have it installed before continuing.
88
88
89 To obtain the required sources, use the following commands::
89 To obtain the required sources, use the following commands::
90
90
91 mkdir rhodecode-develop && cd rhodecode-develop
91 mkdir rhodecode-develop && cd rhodecode-develop
92 hg clone -u default https://code.rhodecode.com/rhodecode-enterprise-ce
92 hg clone -u default https://code.rhodecode.com/rhodecode-enterprise-ce
93 hg clone -u default https://code.rhodecode.com/rhodecode-vcsserver
93 hg clone -u default https://code.rhodecode.com/rhodecode-vcsserver
94
94
95 .. note::
95 .. note::
96
96
97 If you cannot clone the repository, please contact us via support@rhodecode.com
97 If you cannot clone the repository, please contact us via support@rhodecode.com
98
98
99
99
100 Install some required libraries
100 Install some required libraries
101 -------------------------------
101 -------------------------------
102
102
103 There are some required drivers and dev libraries that we need to install to
103 There are some required drivers and dev libraries that we need to install to
104 test RhodeCode under different types of databases. For example in Ubuntu we
104 test RhodeCode under different types of databases. For example in Ubuntu we
105 need to install the following.
105 need to install the following.
106
106
107 required libraries::
107 required libraries::
108
108
109 # svn related
109 # svn related
110 sudo apt-get install libapr1-dev libaprutil1-dev
110 sudo apt-get install libapr1-dev libaprutil1-dev
111 sudo apt-get install libsvn-dev
111 sudo apt-get install libsvn-dev
112 # libcurl required too
112 # libcurl required too
113 sudo apt-get install libcurl4-openssl-dev
113 sudo apt-get install libcurl4-openssl-dev
114 # mysql/pg server for development, optional
114 # mysql/pg server for development, optional
115 sudo apt-get install mysql-server libmysqlclient-dev
115 sudo apt-get install mysql-server libmysqlclient-dev
116 sudo apt-get install postgresql postgresql-contrib libpq-dev
116 sudo apt-get install postgresql postgresql-contrib libpq-dev
117
117
118
118
119
119
120 Enter the Development Shell
120 Enter the Development Shell
121 ---------------------------
121 ---------------------------
122
122
123 The final step is to start the development shells. To do this, run the
123 The final step is to start the development shells. To do this, run the
124 following command from inside the cloned repository::
124 following command from inside the cloned repository::
125
125
126 # first, the vcsserver
126 # first, the vcsserver
127 cd ~/rhodecode-vcsserver
127 cd ~/rhodecode-vcsserver
128 nix-shell
128 nix-shell
129
129
130 # then enterprise sources
130 # then enterprise sources
131 cd ~/rhodecode-enterprise-ce
131 cd ~/rhodecode-enterprise-ce
132 nix-shell
132 nix-shell
133
133
134 .. note::
134 .. note::
135
135
136 On the first run, this will take a while to download and optionally compile
136 On the first run, this will take a while to download and optionally compile
137 a few things. The following runs will be faster. The development shell works
137 a few things. The following runs will be faster. The development shell works
138 fine on both MacOS and Linux platforms.
138 fine on both MacOS and Linux platforms.
139
139
140
140
141 Create config.nix for development
141 Create config.nix for development
142 ---------------------------------
142 ---------------------------------
143
143
144 In order to run proper tests and setup linking across projects, a config.nix
144 In order to run proper tests and setup linking across projects, a config.nix
145 file needs to be setup::
145 file needs to be setup::
146
146
147 # create config
147 # create config
148 mkdir -p ~/.nixpkgs
148 mkdir -p ~/.nixpkgs
149 touch ~/.nixpkgs/config.nix
149 touch ~/.nixpkgs/config.nix
150
150
151 # put the below content into the ~/.nixpkgs/config.nix file
151 # put the below content into the ~/.nixpkgs/config.nix file
152 # adjusts, the path to where you cloned your repositories.
152 # adjusts, the path to where you cloned your repositories.
153
153
154 {
154 {
155 rc = {
155 rc = {
156 sources = {
156 sources = {
157 rhodecode-vcsserver = "/home/dev/rhodecode-vcsserver";
157 rhodecode-vcsserver = "/home/dev/rhodecode-vcsserver";
158 rhodecode-enterprise-ce = "/home/dev/rhodecode-enterprise-ce";
158 rhodecode-enterprise-ce = "/home/dev/rhodecode-enterprise-ce";
159 rhodecode-enterprise-ee = "/home/dev/rhodecode-enterprise-ee";
159 rhodecode-enterprise-ee = "/home/dev/rhodecode-enterprise-ee";
160 };
160 };
161 };
161 };
162 }
162 }
163
163
164
164
165
165
166 Creating a Development Configuration
166 Creating a Development Configuration
167 ------------------------------------
167 ------------------------------------
168
168
169 To create a development environment for RhodeCode Enterprise,
169 To create a development environment for RhodeCode Enterprise,
170 use the following steps:
170 use the following steps:
171
171
172 1. Create a copy of vcsserver config:
172 1. Create a copy of vcsserver config:
173 `cp ~/rhodecode-vcsserver/configs/development.ini ~/rhodecode-vcsserver/configs/dev.ini`
173 `cp ~/rhodecode-vcsserver/configs/development.ini ~/rhodecode-vcsserver/configs/dev.ini`
174 2. Create a copy of rhodocode config:
174 2. Create a copy of rhodocode config:
175 `cp ~/rhodecode-enterprise-ce/configs/development.ini ~/rhodecode-enterprise-ce/configs/dev.ini`
175 `cp ~/rhodecode-enterprise-ce/configs/development.ini ~/rhodecode-enterprise-ce/configs/dev.ini`
176 3. Adjust the configuration settings to your needs if needed.
176 3. Adjust the configuration settings to your needs if needed.
177
177
178 .. note::
178 .. note::
179
179
180 It is recommended to use the name `dev.ini` since it's included in .hgignore file.
180 It is recommended to use the name `dev.ini` since it's included in .hgignore file.
181
181
182
182
183 Setup the Development Database
183 Setup the Development Database
184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
185
185
186 To create a development database, use the following example. This is a one
186 To create a development database, use the following example. This is a one
187 time operation executed from the nix-shell of rhodecode-enterprise-ce sources ::
187 time operation executed from the nix-shell of rhodecode-enterprise-ce sources ::
188
188
189 rc-setup-app dev.ini \
189 rc-setup-app dev.ini \
190 --user=admin --password=secret \
190 --user=admin --password=secret \
191 --email=admin@example.com \
191 --email=admin@example.com \
192 --repos=~/my_dev_repos
192 --repos=~/my_dev_repos
193
193
194
194
195 Compile CSS and JavaScript
195 Compile CSS and JavaScript
196 ^^^^^^^^^^^^^^^^^^^^^^^^^^
196 ^^^^^^^^^^^^^^^^^^^^^^^^^^
197
197
198 To use the application's frontend and prepare it for production deployment,
198 To use the application's frontend and prepare it for production deployment,
199 you will need to compile the CSS and JavaScript with Grunt.
199 you will need to compile the CSS and JavaScript with Grunt.
200 This is easily done from within the nix-shell using the following command::
200 This is easily done from within the nix-shell using the following command::
201
201
202 make web-build
202 make web-build
203
203
204 When developing new features you will need to recompile following any
204 When developing new features you will need to recompile following any
205 changes made to the CSS or JavaScript files when developing the code::
205 changes made to the CSS or JavaScript files when developing the code::
206
206
207 grunt watch
207 grunt watch
208
208
209 This prepares the development (with comments/whitespace) versions of files.
209 This prepares the development (with comments/whitespace) versions of files.
210
210
211 Start the Development Servers
211 Start the Development Servers
212 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
212 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
213
213
214 From the rhodecode-vcsserver directory, start the development server in another
214 From the rhodecode-vcsserver directory, start the development server in another
215 nix-shell, using the following command::
215 nix-shell, using the following command::
216
216
217 pserve configs/dev.ini
217 pserve configs/dev.ini
218
218
219 In the adjacent nix-shell which you created for your development server, you may
219 In the adjacent nix-shell which you created for your development server, you may
220 now start CE with the following command::
220 now start CE with the following command::
221
221
222
222
223 pserve --reload configs/dev.ini
223 pserve --reload configs/dev.ini
224
224
225 .. note::
225 .. note::
226
226
227 `--reload` flag will automatically reload the server when source file changes.
227 `--reload` flag will automatically reload the server when source file changes.
228
228
229
229
230 Run the Environment Tests
230 Run the Environment Tests
231 ^^^^^^^^^^^^^^^^^^^^^^^^^
231 ^^^^^^^^^^^^^^^^^^^^^^^^^
232
232
233 Please make sure that the tests are passing to verify that your environment is
233 Please make sure that the tests are passing to verify that your environment is
234 set up correctly. RhodeCode uses py.test to run tests.
234 set up correctly. RhodeCode uses py.test to run tests.
235 While your instance is running, start a new nix-shell and simply run
235 While your instance is running, start a new nix-shell and simply run
236 ``make test`` to run the basic test suite.
236 ``make test`` to run the basic test suite.
237
237
238
238
239 Need Help?
239 Need Help?
240 ^^^^^^^^^^
240 ^^^^^^^^^^
241
241
242 Join us on Slack via https://rhodecode.com/join or post questions in our
242 Join us on Slack via https://rhodecode.com/join or post questions in our
243 Community Portal at https://community.rhodecode.com
243 Community Portal at https://community.rhodecode.com
@@ -1,98 +1,95 b''
1 .. _known-issues:
1 .. _known-issues:
2
2
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
23 There can be an issue with uploading files from web interface on Windows,
9 There can be an issue with uploading files from web interface on Windows,
24 and afterwards users cannot properly clone or synchronize with the repository.
10 and afterwards users cannot properly clone or synchronize with the repository.
25
11
26 Early testing shows that often uploading files via HTML forms on Windows
12 Early testing shows that often uploading files via HTML forms on Windows
27 includes the full path of the file being uploaded and not the name of the file.
13 includes the full path of the file being uploaded and not the name of the file.
28
14
29 Old Format of Git Repositories
15 Old Format of Git Repositories
30 ------------------------------
16 ------------------------------
31
17
32 There is an issue when trying to import old |git| format |repos| into recent
18 There is an issue when trying to import old |git| format |repos| into recent
33 versions of |RCE|. This issue can occur when importing from external |git|
19 versions of |RCE|. This issue can occur when importing from external |git|
34 repositories or from older versions of |RCE| (<=2.2.7).
20 repositories or from older versions of |RCE| (<=2.2.7).
35
21
36 To convert the old version into a current version, clone the old
22 To convert the old version into a current version, clone the old
37 |repo| into a local machine using a recent |git| client, then push it to a new
23 |repo| into a local machine using a recent |git| client, then push it to a new
38 |repo| inside |RCE|.
24 |repo| inside |RCE|.
39
25
40
26
41 VCS Server Memory Consumption
27 VCS Server Memory Consumption
42 -----------------------------
28 -----------------------------
43
29
44 The VCS Server cache grows without limits if not configured correctly. This
30 The VCS Server cache grows without limits if not configured correctly. This
45 applies to |RCE| versions prior to the 3.3.2 releases, as 3.3.2
31 applies to |RCE| versions prior to the 3.3.2 releases, as 3.3.2
46 shipped with the optimal configuration as default. See the
32 shipped with the optimal configuration as default. See the
47 :ref:`vcs-server-maintain` section for details.
33 :ref:`vcs-server-maintain` section for details.
48
34
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.
61
51
62 To use the pre 2.27 locale-archive fix follow these steps:
52 To use the pre 2.27 locale-archive fix follow these steps:
63
53
64 1. Download the pre 2.27 locale-archive package
54 1. Download the pre 2.27 locale-archive package
65
55
66 .. code-block:: bash
56 .. code-block:: bash
67
57
68 wget https://dls.rhodecode.com/assets/locale-archive
58 wget https://dls.rhodecode.com/assets/locale-archive
69
59
70
60
71 2. Point ``$LOCAL_ARCHIVE`` to the locale package.
61 2. Point ``$LOCAL_ARCHIVE`` to the locale package.
72
62
73 .. code-block:: bash
63 .. code-block:: bash
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 can either added in `~/.rccontrol/supervisor/supervisord.ini`
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
82 example to pass the correct locale information on boot.
79 example to pass the correct locale information on boot.
83
80
84 .. code-block:: ini
81 .. code-block:: ini
85
82
86 [Unit]
83 [Unit]
87 Description=Rhodecode
84 Description=Rhodecode
88 After=network.target
85 After=network.target
89
86
90 [Service]
87 [Service]
91 Type=forking
88 Type=forking
92 User=scm
89 User=scm
93 Environment="LOCALE_ARCHIVE=/YOUR-PATH/locale-archive"
90 Environment="LOCALE_ARCHIVE=/YOUR-PATH/locale-archive"
94 ExecStart=/YOUR-PATH/.rccontrol-profile/bin/rccontrol-self-init
91 ExecStart=/YOUR-PATH/.rccontrol-profile/bin/rccontrol-self-init
95
92
96 [Install]
93 [Install]
97 WantedBy=multi-user.target
94 WantedBy=multi-user.target
98
95
@@ -1,140 +1,141 b''
1 .. _rhodecode-release-notes-ref:
1 .. _rhodecode-release-notes-ref:
2
2
3 Release Notes
3 Release Notes
4 =============
4 =============
5
5
6 |RCE| 4.x Versions
6 |RCE| 4.x Versions
7 ------------------
7 ------------------
8
8
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
15 release-notes-4.18.0.rst
16 release-notes-4.18.0.rst
16 release-notes-4.17.4.rst
17 release-notes-4.17.4.rst
17 release-notes-4.17.3.rst
18 release-notes-4.17.3.rst
18 release-notes-4.17.2.rst
19 release-notes-4.17.2.rst
19 release-notes-4.17.1.rst
20 release-notes-4.17.1.rst
20 release-notes-4.17.0.rst
21 release-notes-4.17.0.rst
21 release-notes-4.16.2.rst
22 release-notes-4.16.2.rst
22 release-notes-4.16.1.rst
23 release-notes-4.16.1.rst
23 release-notes-4.16.0.rst
24 release-notes-4.16.0.rst
24 release-notes-4.15.2.rst
25 release-notes-4.15.2.rst
25 release-notes-4.15.1.rst
26 release-notes-4.15.1.rst
26 release-notes-4.15.0.rst
27 release-notes-4.15.0.rst
27 release-notes-4.14.1.rst
28 release-notes-4.14.1.rst
28 release-notes-4.14.0.rst
29 release-notes-4.14.0.rst
29 release-notes-4.13.3.rst
30 release-notes-4.13.3.rst
30 release-notes-4.13.2.rst
31 release-notes-4.13.2.rst
31 release-notes-4.13.1.rst
32 release-notes-4.13.1.rst
32 release-notes-4.13.0.rst
33 release-notes-4.13.0.rst
33 release-notes-4.12.4.rst
34 release-notes-4.12.4.rst
34 release-notes-4.12.3.rst
35 release-notes-4.12.3.rst
35 release-notes-4.12.2.rst
36 release-notes-4.12.2.rst
36 release-notes-4.12.1.rst
37 release-notes-4.12.1.rst
37 release-notes-4.12.0.rst
38 release-notes-4.12.0.rst
38 release-notes-4.11.6.rst
39 release-notes-4.11.6.rst
39 release-notes-4.11.5.rst
40 release-notes-4.11.5.rst
40 release-notes-4.11.4.rst
41 release-notes-4.11.4.rst
41 release-notes-4.11.3.rst
42 release-notes-4.11.3.rst
42 release-notes-4.11.2.rst
43 release-notes-4.11.2.rst
43 release-notes-4.11.1.rst
44 release-notes-4.11.1.rst
44 release-notes-4.11.0.rst
45 release-notes-4.11.0.rst
45 release-notes-4.10.6.rst
46 release-notes-4.10.6.rst
46 release-notes-4.10.5.rst
47 release-notes-4.10.5.rst
47 release-notes-4.10.4.rst
48 release-notes-4.10.4.rst
48 release-notes-4.10.3.rst
49 release-notes-4.10.3.rst
49 release-notes-4.10.2.rst
50 release-notes-4.10.2.rst
50 release-notes-4.10.1.rst
51 release-notes-4.10.1.rst
51 release-notes-4.10.0.rst
52 release-notes-4.10.0.rst
52 release-notes-4.9.1.rst
53 release-notes-4.9.1.rst
53 release-notes-4.9.0.rst
54 release-notes-4.9.0.rst
54 release-notes-4.8.0.rst
55 release-notes-4.8.0.rst
55 release-notes-4.7.2.rst
56 release-notes-4.7.2.rst
56 release-notes-4.7.1.rst
57 release-notes-4.7.1.rst
57 release-notes-4.7.0.rst
58 release-notes-4.7.0.rst
58 release-notes-4.6.1.rst
59 release-notes-4.6.1.rst
59 release-notes-4.6.0.rst
60 release-notes-4.6.0.rst
60 release-notes-4.5.2.rst
61 release-notes-4.5.2.rst
61 release-notes-4.5.1.rst
62 release-notes-4.5.1.rst
62 release-notes-4.5.0.rst
63 release-notes-4.5.0.rst
63 release-notes-4.4.2.rst
64 release-notes-4.4.2.rst
64 release-notes-4.4.1.rst
65 release-notes-4.4.1.rst
65 release-notes-4.4.0.rst
66 release-notes-4.4.0.rst
66 release-notes-4.3.1.rst
67 release-notes-4.3.1.rst
67 release-notes-4.3.0.rst
68 release-notes-4.3.0.rst
68 release-notes-4.2.1.rst
69 release-notes-4.2.1.rst
69 release-notes-4.2.0.rst
70 release-notes-4.2.0.rst
70 release-notes-4.1.2.rst
71 release-notes-4.1.2.rst
71 release-notes-4.1.1.rst
72 release-notes-4.1.1.rst
72 release-notes-4.1.0.rst
73 release-notes-4.1.0.rst
73 release-notes-4.0.1.rst
74 release-notes-4.0.1.rst
74 release-notes-4.0.0.rst
75 release-notes-4.0.0.rst
75
76
76 |RCE| 3.x Versions
77 |RCE| 3.x Versions
77 ------------------
78 ------------------
78
79
79 .. toctree::
80 .. toctree::
80 :maxdepth: 1
81 :maxdepth: 1
81
82
82 release-notes-3.8.4.rst
83 release-notes-3.8.4.rst
83 release-notes-3.8.3.rst
84 release-notes-3.8.3.rst
84 release-notes-3.8.2.rst
85 release-notes-3.8.2.rst
85 release-notes-3.8.1.rst
86 release-notes-3.8.1.rst
86 release-notes-3.8.0.rst
87 release-notes-3.8.0.rst
87 release-notes-3.7.1.rst
88 release-notes-3.7.1.rst
88 release-notes-3.7.0.rst
89 release-notes-3.7.0.rst
89 release-notes-3.6.1.rst
90 release-notes-3.6.1.rst
90 release-notes-3.6.0.rst
91 release-notes-3.6.0.rst
91 release-notes-3.5.2.rst
92 release-notes-3.5.2.rst
92 release-notes-3.5.1.rst
93 release-notes-3.5.1.rst
93 release-notes-3.5.0.rst
94 release-notes-3.5.0.rst
94 release-notes-3.4.1.rst
95 release-notes-3.4.1.rst
95 release-notes-3.4.0.rst
96 release-notes-3.4.0.rst
96 release-notes-3.3.4.rst
97 release-notes-3.3.4.rst
97 release-notes-3.3.3.rst
98 release-notes-3.3.3.rst
98 release-notes-3.3.2.rst
99 release-notes-3.3.2.rst
99 release-notes-3.3.1.rst
100 release-notes-3.3.1.rst
100 release-notes-3.3.0.rst
101 release-notes-3.3.0.rst
101 release-notes-3.2.3.rst
102 release-notes-3.2.3.rst
102 release-notes-3.2.2.rst
103 release-notes-3.2.2.rst
103 release-notes-3.2.1.rst
104 release-notes-3.2.1.rst
104 release-notes-3.2.0.rst
105 release-notes-3.2.0.rst
105 release-notes-3.1.1.rst
106 release-notes-3.1.1.rst
106 release-notes-3.1.0.rst
107 release-notes-3.1.0.rst
107 release-notes-3.0.2.rst
108 release-notes-3.0.2.rst
108 release-notes-3.0.1.rst
109 release-notes-3.0.1.rst
109 release-notes-3.0.0.rst
110 release-notes-3.0.0.rst
110
111
111 |RCE| 2.x Versions
112 |RCE| 2.x Versions
112 ------------------
113 ------------------
113
114
114 .. toctree::
115 .. toctree::
115 :maxdepth: 1
116 :maxdepth: 1
116
117
117 release-notes-2.2.8.rst
118 release-notes-2.2.8.rst
118 release-notes-2.2.7.rst
119 release-notes-2.2.7.rst
119 release-notes-2.2.6.rst
120 release-notes-2.2.6.rst
120 release-notes-2.2.5.rst
121 release-notes-2.2.5.rst
121 release-notes-2.2.4.rst
122 release-notes-2.2.4.rst
122 release-notes-2.2.3.rst
123 release-notes-2.2.3.rst
123 release-notes-2.2.2.rst
124 release-notes-2.2.2.rst
124 release-notes-2.2.1.rst
125 release-notes-2.2.1.rst
125 release-notes-2.2.0.rst
126 release-notes-2.2.0.rst
126 release-notes-2.1.0.rst
127 release-notes-2.1.0.rst
127 release-notes-2.0.2.rst
128 release-notes-2.0.2.rst
128 release-notes-2.0.1.rst
129 release-notes-2.0.1.rst
129 release-notes-2.0.0.rst
130 release-notes-2.0.0.rst
130
131
131 |RCE| 1.x Versions
132 |RCE| 1.x Versions
132 ------------------
133 ------------------
133
134
134 .. toctree::
135 .. toctree::
135 :maxdepth: 1
136 :maxdepth: 1
136
137
137 release-notes-1.7.2.rst
138 release-notes-1.7.2.rst
138 release-notes-1.7.1.rst
139 release-notes-1.7.1.rst
139 release-notes-1.7.0.rst
140 release-notes-1.7.0.rst
140 release-notes-1.6.0.rst
141 release-notes-1.6.0.rst
@@ -1,8 +1,8 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.14.0
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
8 pytz==2018.4
8 pytz==2018.4
@@ -1,183 +1,184 b''
1 {
1 {
2 "dirs": {
2 "dirs": {
3 "css": {
3 "css": {
4 "src": "rhodecode/public/css",
4 "src": "rhodecode/public/css",
5 "dest": "rhodecode/public/css"
5 "dest": "rhodecode/public/css"
6 },
6 },
7 "js": {
7 "js": {
8 "src": "rhodecode/public/js/src",
8 "src": "rhodecode/public/js/src",
9 "src_rc": "rhodecode/public/js/rhodecode",
9 "src_rc": "rhodecode/public/js/rhodecode",
10 "dest": "rhodecode/public/js",
10 "dest": "rhodecode/public/js",
11 "node_modules": "node_modules"
11 "node_modules": "node_modules"
12 }
12 }
13 },
13 },
14 "copy": {
14 "copy": {
15 "main": {
15 "main": {
16 "files": [
16 "files": [
17 {
17 {
18 "expand": true,
18 "expand": true,
19 "cwd": "node_modules/@webcomponents",
19 "cwd": "node_modules/@webcomponents",
20 "src": "webcomponentsjs/*.*",
20 "src": "webcomponentsjs/*.*",
21 "dest": "<%= dirs.js.dest %>/vendors"
21 "dest": "<%= dirs.js.dest %>/vendors"
22 },
22 },
23 {
23 {
24 "src": "<%= dirs.css.src %>/style-polymer.css",
24 "src": "<%= dirs.css.src %>/style-polymer.css",
25 "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css"
25 "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css"
26 }
26 }
27 ]
27 ]
28 }
28 }
29 },
29 },
30 "concat": {
30 "concat": {
31 "dist": {
31 "dist": {
32 "src": [
32 "src": [
33 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
33 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
34 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
34 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
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",
42 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
43 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
43 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
44 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
44 "<%= dirs.js.src %>/logging.js",
45 "<%= dirs.js.src %>/logging.js",
45 "<%= dirs.js.src %>/bootstrap.js",
46 "<%= dirs.js.src %>/bootstrap.js",
46 "<%= dirs.js.src %>/i18n_utils.js",
47 "<%= dirs.js.src %>/i18n_utils.js",
47 "<%= dirs.js.src %>/deform.js",
48 "<%= dirs.js.src %>/deform.js",
48 "<%= dirs.js.src %>/ejs.js",
49 "<%= dirs.js.src %>/ejs.js",
49 "<%= dirs.js.src %>/ejs_templates/utils.js",
50 "<%= dirs.js.src %>/ejs_templates/utils.js",
50 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
51 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
51 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
52 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
52 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
53 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
53 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
54 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
54 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
55 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
55 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
56 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
56 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
57 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
57 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
58 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
58 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
59 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
59 "<%= dirs.js.src %>/select2/select2.js",
60 "<%= dirs.js.src %>/select2/select2.js",
60 "<%= dirs.js.src %>/codemirror/codemirror.js",
61 "<%= dirs.js.src %>/codemirror/codemirror.js",
61 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
62 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
62 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
63 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
63 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
64 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
64 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
65 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
65 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
66 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
66 "<%= dirs.js.dest %>/mode/meta.js",
67 "<%= dirs.js.dest %>/mode/meta.js",
67 "<%= dirs.js.dest %>/mode/meta_ext.js",
68 "<%= dirs.js.dest %>/mode/meta_ext.js",
68 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
69 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
69 "<%= dirs.js.src %>/rhodecode/utils/array.js",
70 "<%= dirs.js.src %>/rhodecode/utils/array.js",
70 "<%= dirs.js.src %>/rhodecode/utils/string.js",
71 "<%= dirs.js.src %>/rhodecode/utils/string.js",
71 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
72 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
72 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
73 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
73 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
74 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
74 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
75 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
75 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
76 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
76 "<%= dirs.js.src %>/rhodecode/utils/os.js",
77 "<%= dirs.js.src %>/rhodecode/utils/os.js",
77 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
78 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
78 "<%= dirs.js.src %>/rhodecode/init.js",
79 "<%= dirs.js.src %>/rhodecode/init.js",
79 "<%= dirs.js.src %>/rhodecode/changelog.js",
80 "<%= dirs.js.src %>/rhodecode/changelog.js",
80 "<%= dirs.js.src %>/rhodecode/codemirror.js",
81 "<%= dirs.js.src %>/rhodecode/codemirror.js",
81 "<%= dirs.js.src %>/rhodecode/comments.js",
82 "<%= dirs.js.src %>/rhodecode/comments.js",
82 "<%= dirs.js.src %>/rhodecode/constants.js",
83 "<%= dirs.js.src %>/rhodecode/constants.js",
83 "<%= dirs.js.src %>/rhodecode/files.js",
84 "<%= dirs.js.src %>/rhodecode/files.js",
84 "<%= dirs.js.src %>/rhodecode/followers.js",
85 "<%= dirs.js.src %>/rhodecode/followers.js",
85 "<%= dirs.js.src %>/rhodecode/menus.js",
86 "<%= dirs.js.src %>/rhodecode/menus.js",
86 "<%= dirs.js.src %>/rhodecode/notifications.js",
87 "<%= dirs.js.src %>/rhodecode/notifications.js",
87 "<%= dirs.js.src %>/rhodecode/permissions.js",
88 "<%= dirs.js.src %>/rhodecode/permissions.js",
88 "<%= dirs.js.src %>/rhodecode/pjax.js",
89 "<%= dirs.js.src %>/rhodecode/pjax.js",
89 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
90 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
90 "<%= dirs.js.src %>/rhodecode/settings.js",
91 "<%= dirs.js.src %>/rhodecode/settings.js",
91 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
92 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
92 "<%= dirs.js.src %>/rhodecode/tooltips.js",
93 "<%= dirs.js.src %>/rhodecode/tooltips.js",
93 "<%= dirs.js.src %>/rhodecode/users.js",
94 "<%= dirs.js.src %>/rhodecode/users.js",
94 "<%= dirs.js.src %>/rhodecode/appenlight.js",
95 "<%= dirs.js.src %>/rhodecode/appenlight.js",
95 "<%= dirs.js.src %>/rhodecode.js",
96 "<%= dirs.js.src %>/rhodecode.js",
96 "<%= dirs.js.dest %>/rhodecode-components.js"
97 "<%= dirs.js.dest %>/rhodecode-components.js"
97 ],
98 ],
98 "dest": "<%= dirs.js.dest %>/scripts.js",
99 "dest": "<%= dirs.js.dest %>/scripts.js",
99 "nonull": true
100 "nonull": true
100 }
101 }
101 },
102 },
102 "uglify": {
103 "uglify": {
103 "dist": {
104 "dist": {
104 "src": "<%= dirs.js.dest %>/scripts.js",
105 "src": "<%= dirs.js.dest %>/scripts.js",
105 "dest": "<%= dirs.js.dest %>/scripts.min.js"
106 "dest": "<%= dirs.js.dest %>/scripts.min.js"
106 }
107 }
107 },
108 },
108 "less": {
109 "less": {
109 "development": {
110 "development": {
110 "options": {
111 "options": {
111 "compress": false,
112 "compress": false,
112 "yuicompress": false,
113 "yuicompress": false,
113 "optimization": 0
114 "optimization": 0
114 },
115 },
115 "files": {
116 "files": {
116 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
117 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
117 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
118 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
118 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
119 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
119 }
120 }
120 },
121 },
121 "production": {
122 "production": {
122 "options": {
123 "options": {
123 "compress": true,
124 "compress": true,
124 "yuicompress": true,
125 "yuicompress": true,
125 "optimization": 2
126 "optimization": 2
126 },
127 },
127 "files": {
128 "files": {
128 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
129 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
129 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
130 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
130 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
131 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
131 }
132 }
132 },
133 },
133 "components": {
134 "components": {
134 "files": [
135 "files": [
135 {
136 {
136 "cwd": "<%= dirs.js.src %>/components/",
137 "cwd": "<%= dirs.js.src %>/components/",
137 "dest": "<%= dirs.js.src %>/components/",
138 "dest": "<%= dirs.js.src %>/components/",
138 "src": [
139 "src": [
139 "**/*.less"
140 "**/*.less"
140 ],
141 ],
141 "expand": true,
142 "expand": true,
142 "ext": ".css"
143 "ext": ".css"
143 }
144 }
144 ]
145 ]
145 }
146 }
146 },
147 },
147 "watch": {
148 "watch": {
148 "less": {
149 "less": {
149 "files": [
150 "files": [
150 "<%= dirs.css.src %>/**/*.less",
151 "<%= dirs.css.src %>/**/*.less",
151 "<%= dirs.js.src %>/components/**/*.less"
152 "<%= dirs.js.src %>/components/**/*.less"
152 ],
153 ],
153 "tasks": [
154 "tasks": [
154 "less:development",
155 "less:development",
155 "less:components",
156 "less:components",
156 "concat:polymercss",
157 "concat:polymercss",
157 "webpack",
158 "webpack",
158 "concat:dist"
159 "concat:dist"
159 ]
160 ]
160 },
161 },
161 "js": {
162 "js": {
162 "files": [
163 "files": [
163 "!<%= dirs.js.src %>/components/root-styles.gen.html",
164 "!<%= dirs.js.src %>/components/root-styles.gen.html",
164 "<%= dirs.js.src %>/**/*.js",
165 "<%= dirs.js.src %>/**/*.js",
165 "<%= dirs.js.src %>/components/**/*.html"
166 "<%= dirs.js.src %>/components/**/*.html"
166 ],
167 ],
167 "tasks": [
168 "tasks": [
168 "less:components",
169 "less:components",
169 "concat:polymercss",
170 "concat:polymercss",
170 "webpack",
171 "webpack",
171 "concat:dist"
172 "concat:dist"
172 ]
173 ]
173 }
174 }
174 },
175 },
175 "jshint": {
176 "jshint": {
176 "rhodecode": {
177 "rhodecode": {
177 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
178 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
178 "options": {
179 "options": {
179 "jshintrc": ".jshintrc"
180 "jshintrc": ".jshintrc"
180 }
181 }
181 }
182 }
182 }
183 }
183 }
184 }
@@ -1,61 +1,62 b''
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "2.0.0",
3 "version": "2.0.0",
4 "private": true,
4 "private": true,
5 "description" : "RhodeCode JS packaged",
5 "description" : "RhodeCode JS packaged",
6 "license": "SEE LICENSE IN LICENSE.txt",
6 "license": "SEE LICENSE IN LICENSE.txt",
7 "repository" : {
7 "repository" : {
8 "type" : "hg",
8 "type" : "hg",
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
10 },
10 },
11 "devDependencies": {
11 "devDependencies": {
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
13 "clipboard": "^2.0.1",
13 "clipboard": "^2.0.1",
14 "exports-loader": "^0.6.4",
14 "exports-loader": "^0.6.4",
15 "favico.js": "^0.3.10",
15 "favico.js": "^0.3.10",
16 "dropzone": "^5.5.0",
16 "dropzone": "^5.5.0",
17 "grunt": "^0.4.5",
17 "grunt": "^0.4.5",
18 "grunt-cli": "^1.3.1",
18 "grunt-cli": "^1.3.1",
19 "grunt-contrib-concat": "^0.5.1",
19 "grunt-contrib-concat": "^0.5.1",
20 "grunt-contrib-copy": "^1.0.0",
20 "grunt-contrib-copy": "^1.0.0",
21 "grunt-contrib-jshint": "^0.12.0",
21 "grunt-contrib-jshint": "^0.12.0",
22 "grunt-contrib-less": "^1.1.0",
22 "grunt-contrib-less": "^1.1.0",
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",
29 "moment": "^2.18.1",
30 "moment": "^2.18.1",
30 "mousetrap": "^1.6.1",
31 "mousetrap": "^1.6.1",
31 "qrious": "^4.0.2",
32 "qrious": "^4.0.2",
32 "sticky-sidebar": "3.3.1",
33 "sticky-sidebar": "3.3.1",
33 "waypoints": "4.0.1",
34 "waypoints": "4.0.1",
34 "webpack": "4.23.1",
35 "webpack": "4.23.1",
35 "webpack-cli": "3.1.2",
36 "webpack-cli": "3.1.2",
36 "babel-core": "^6.26.3",
37 "babel-core": "^6.26.3",
37 "babel-loader": "^7.1.2",
38 "babel-loader": "^7.1.2",
38 "babel-plugin-transform-object-rest-spread": "^6.26.0",
39 "babel-plugin-transform-object-rest-spread": "^6.26.0",
39 "babel-preset-env": "^1.6.0",
40 "babel-preset-env": "^1.6.0",
40 "copy-webpack-plugin": "^4.4.2",
41 "copy-webpack-plugin": "^4.4.2",
41 "css-loader": "^0.28.11",
42 "css-loader": "^0.28.11",
42 "html-loader": "^0.4.4",
43 "html-loader": "^0.4.4",
43 "html-webpack-plugin": "^3.2.0",
44 "html-webpack-plugin": "^3.2.0",
44 "imports-loader": "^0.7.1",
45 "imports-loader": "^0.7.1",
45 "polymer-webpack-loader": "^2.0.1",
46 "polymer-webpack-loader": "^2.0.1",
46 "style-loader": "^0.21.0",
47 "style-loader": "^0.21.0",
47 "webpack-uglify-js-plugin": "^1.1.9",
48 "webpack-uglify-js-plugin": "^1.1.9",
48 "raw-loader": "1.0.0-beta.0",
49 "raw-loader": "1.0.0-beta.0",
49 "ts-loader": "^1.3.3",
50 "ts-loader": "^1.3.3",
50 "@webcomponents/webcomponentsjs": "^2.0.0",
51 "@webcomponents/webcomponentsjs": "^2.0.0",
51 "@polymer/polymer": "^3.0.0",
52 "@polymer/polymer": "^3.0.0",
52 "@polymer/paper-button": "^3.0.0",
53 "@polymer/paper-button": "^3.0.0",
53 "@polymer/paper-spinner": "^3.0.0",
54 "@polymer/paper-spinner": "^3.0.0",
54 "@polymer/paper-tooltip": "^3.0.0",
55 "@polymer/paper-tooltip": "^3.0.0",
55 "@polymer/paper-toast": "^3.0.0",
56 "@polymer/paper-toast": "^3.0.0",
56 "@polymer/paper-toggle-button": "^3.0.0",
57 "@polymer/paper-toggle-button": "^3.0.0",
57 "@polymer/iron-ajax": "^3.0.0",
58 "@polymer/iron-ajax": "^3.0.0",
58 "@polymer/iron-autogrow-textarea": "^3.0.0",
59 "@polymer/iron-autogrow-textarea": "^3.0.0",
59 "@polymer/iron-a11y-keys": "^3.0.0"
60 "@polymer/iron-a11y-keys": "^3.0.0"
60 }
61 }
61 }
62 }
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
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