##// 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,6 +1,6 b''
1 1 [bumpversion]
2 current_version = 4.18.3
2 current_version = 4.19.0
3 3 message = release: Bump version {current_version} to {new_version}
4 4
5 5 [bumpversion:file:rhodecode/VERSION]
6 6
@@ -1,33 +1,28 b''
1 1 [DEFAULT]
2 2 done = false
3 3
4 4 [task:bump_version]
5 5 done = true
6 6
7 7 [task:rc_tools_pinned]
8 done = true
9 8
10 9 [task:fixes_on_stable]
11 done = true
12 10
13 11 [task:pip2nix_generated]
14 done = true
15 12
16 13 [task:changelog_updated]
17 done = true
18 14
19 15 [task:generate_api_docs]
20 done = true
16
17 [task:updated_translation]
21 18
22 19 [release]
23 state = prepared
24 version = 4.18.3
25
26 [task:updated_translation]
20 state = in_progress
21 version = 4.19.0
27 22
28 23 [task:generate_js_routes]
29 24
30 25 [task:updated_trial_license]
31 26
32 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 4 NODE_PATH=./node_modules
5 5 WEBPACK=./node_binaries/webpack
6 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 10 clean:
10 11 make test-clean
11 12 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' -o -iname '*.orig' \) -exec rm '{}' ';'
12 13
13 14 test:
14 15 make test-clean
15 16 make test-only
16 17
17 18 test-clean:
18 19 rm -rf coverage.xml htmlcov junit.xml pylint.log result
19 20 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
20 21 find . -type f \( -iname '.coverage.*' \) -exec rm '{}' ';'
21 22
22 23 test-only:
23 24 PYTHONHASHSEED=random \
24 25 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
25 26 --cov-report=term-missing --cov-report=html \
26 27 rhodecode
27 28
28 29 test-only-mysql:
29 30 PYTHONHASHSEED=random \
30 31 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
31 32 --cov-report=term-missing --cov-report=html \
32 33 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test?charset=utf8"}}' \
33 34 rhodecode
34 35
35 36 test-only-postgres:
36 37 PYTHONHASHSEED=random \
37 38 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
38 39 --cov-report=term-missing --cov-report=html \
39 40 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
40 41 rhodecode
41 42
42 43
43 44 docs:
44 45 (cd docs; nix-build default.nix -o result; make clean html)
45 46
46 47 docs-clean:
47 48 (cd docs; make clean)
48 49
49 50 docs-cleanup:
50 51 (cd docs; make cleanup)
51 52
52 53 web-build:
53 54 NODE_PATH=$(NODE_PATH) $(GRUNT)
54 55
55 56 generate-pkgs:
56 57 nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses"
57 58
59 pip-packages:
60 python ${OUTDATED_PACKAGES}
61
58 62 generate-js-pkgs:
59 63 rm -rf node_modules && \
60 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 65 sed -i -e 's/http:\/\//https:\/\//g' pkgs/node-packages.nix
62 66
63 67 generate-license-meta:
64 68 nix-build pkgs/license-generate.nix -o result-license && \
65 69 cat result-license/licenses.json | python -m json.tool > rhodecode/config/licenses.json No newline at end of file
@@ -1,833 +1,845 b''
1 1 ## -*- coding: utf-8 -*-
2 2
3 3 ; #########################################
4 4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
5 5 ; #########################################
6 6
7 7 [DEFAULT]
8 8 ; Debug flag sets all loggers to debug, and enables request tracking
9 9 debug = true
10 10
11 11 ; ########################################################################
12 12 ; EMAIL CONFIGURATION
13 13 ; These settings will be used by the RhodeCode mailing system
14 14 ; ########################################################################
15 15
16 16 ; prefix all emails subjects with given prefix, helps filtering out emails
17 17 #email_prefix = [RhodeCode]
18 18
19 19 ; email FROM address all mails will be sent
20 20 #app_email_from = rhodecode-noreply@localhost
21 21
22 22 #smtp_server = mail.server.com
23 23 #smtp_username =
24 24 #smtp_password =
25 25 #smtp_port =
26 26 #smtp_use_tls = false
27 27 #smtp_use_ssl = true
28 28
29 29 [server:main]
30 30 ; COMMON HOST/IP CONFIG
31 31 host = 127.0.0.1
32 32 port = 5000
33 33
34 34 ; ##################################################
35 35 ; WAITRESS WSGI SERVER - Recommended for Development
36 36 ; ##################################################
37 37
38 38 ; use server type
39 39 use = egg:waitress#main
40 40
41 41 ; number of worker threads
42 42 threads = 5
43 43
44 44 ; MAX BODY SIZE 100GB
45 45 max_request_body_size = 107374182400
46 46
47 47 ; Use poll instead of select, fixes file descriptors limits problems.
48 48 ; May not work on old windows systems.
49 49 asyncore_use_poll = true
50 50
51 51
52 52 ; ###########################
53 53 ; GUNICORN APPLICATION SERVER
54 54 ; ###########################
55 55
56 56 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
57 57
58 58 ; Module to use, this setting shouldn't be changed
59 59 #use = egg:gunicorn#main
60 60
61 61 ; Sets the number of process workers. More workers means more concurrent connections
62 62 ; RhodeCode can handle at the same time. Each additional worker also it increases
63 63 ; memory usage as each has it's own set of caches.
64 64 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
65 65 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
66 66 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
67 67 ; when using more than 1 worker.
68 68 #workers = 2
69 69
70 70 ; Gunicorn access log level
71 71 #loglevel = info
72 72
73 73 ; Process name visible in process list
74 74 #proc_name = rhodecode
75 75
76 76 ; Type of worker class, one of `sync`, `gevent`
77 77 ; Recommended type is `gevent`
78 78 #worker_class = gevent
79 79
80 80 ; The maximum number of simultaneous clients. Valid only for gevent
81 81 #worker_connections = 10
82 82
83 83 ; Max number of requests that worker will handle before being gracefully restarted.
84 84 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
85 85 #max_requests = 1000
86 86 #max_requests_jitter = 30
87 87
88 88 ; Amount of time a worker can spend with handling a request before it
89 89 ; gets killed and restarted. By default set to 21600 (6hrs)
90 90 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
91 91 #timeout = 21600
92 92
93 93 ; The maximum size of HTTP request line in bytes.
94 94 ; 0 for unlimited
95 95 #limit_request_line = 0
96 96
97 97 ; Limit the number of HTTP headers fields in a request.
98 98 ; By default this value is 100 and can't be larger than 32768.
99 99 #limit_request_fields = 32768
100 100
101 101 ; Limit the allowed size of an HTTP request header field.
102 102 ; Value is a positive number or 0.
103 103 ; Setting it to 0 will allow unlimited header field sizes.
104 104 #limit_request_field_size = 0
105 105
106 106 ; Timeout for graceful workers restart.
107 107 ; After receiving a restart signal, workers have this much time to finish
108 108 ; serving requests. Workers still alive after the timeout (starting from the
109 109 ; receipt of the restart signal) are force killed.
110 110 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
111 111 #graceful_timeout = 3600
112 112
113 113 # The number of seconds to wait for requests on a Keep-Alive connection.
114 114 # Generally set in the 1-5 seconds range.
115 115 #keepalive = 2
116 116
117 117 ; Maximum memory usage that each worker can use before it will receive a
118 118 ; graceful restart signal 0 = memory monitoring is disabled
119 119 ; Examples: 268435456 (256MB), 536870912 (512MB)
120 120 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
121 121 #memory_max_usage = 0
122 122
123 123 ; How often in seconds to check for memory usage for each gunicorn worker
124 124 #memory_usage_check_interval = 60
125 125
126 126 ; Threshold value for which we don't recycle worker if GarbageCollection
127 127 ; frees up enough resources. Before each restart we try to run GC on worker
128 128 ; in case we get enough free memory after that, restart will not happen.
129 129 #memory_usage_recovery_threshold = 0.8
130 130
131 131
132 132 ; Prefix middleware for RhodeCode.
133 133 ; recommended when using proxy setup.
134 134 ; allows to set RhodeCode under a prefix in server.
135 135 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
136 136 ; And set your prefix like: `prefix = /custom_prefix`
137 137 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
138 138 ; to make your cookies only work on prefix url
139 139 [filter:proxy-prefix]
140 140 use = egg:PasteDeploy#prefix
141 141 prefix = /
142 142
143 143 [app:main]
144 144 ; The %(here)s variable will be replaced with the absolute path of parent directory
145 145 ; of this file
146 146 ; In addition ENVIRONMENT variables usage is possible, e.g
147 147 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
148 148
149 149 use = egg:rhodecode-enterprise-ce
150 150
151 151 ; enable proxy prefix middleware, defined above
152 152 #filter-with = proxy-prefix
153 153
154 154 ; #############
155 155 ; DEBUG OPTIONS
156 156 ; #############
157 157
158 158 pyramid.reload_templates = true
159 159
160 160 # During development the we want to have the debug toolbar enabled
161 161 pyramid.includes =
162 162 pyramid_debugtoolbar
163 163
164 164 debugtoolbar.hosts = 0.0.0.0/0
165 165 debugtoolbar.exclude_prefixes =
166 166 /css
167 167 /fonts
168 168 /images
169 169 /js
170 170
171 171 ## RHODECODE PLUGINS ##
172 172 rhodecode.includes =
173 173 rhodecode.api
174 174
175 175
176 176 # api prefix url
177 177 rhodecode.api.url = /_admin/api
178 178
179 179 ; enable debug style page
180 180 debug_style = true
181 181
182 182 ; #################
183 183 ; END DEBUG OPTIONS
184 184 ; #################
185 185
186 186 ; encryption key used to encrypt social plugin tokens,
187 187 ; remote_urls with credentials etc, if not set it defaults to
188 188 ; `beaker.session.secret`
189 189 #rhodecode.encrypted_values.secret =
190 190
191 191 ; decryption strict mode (enabled by default). It controls if decryption raises
192 192 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
193 193 #rhodecode.encrypted_values.strict = false
194 194
195 195 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
196 196 ; fernet is safer, and we strongly recommend switching to it.
197 197 ; Due to backward compatibility aes is used as default.
198 198 #rhodecode.encrypted_values.algorithm = fernet
199 199
200 200 ; Return gzipped responses from RhodeCode (static files/application)
201 201 gzip_responses = false
202 202
203 203 ; Auto-generate javascript routes file on startup
204 204 generate_js_files = false
205 205
206 206 ; System global default language.
207 207 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
208 208 lang = en
209 209
210 210 ; Perform a full repository scan and import on each server start.
211 211 ; Settings this to true could lead to very long startup time.
212 212 startup.import_repos = false
213 213
214 214 ; Uncomment and set this path to use archive download cache.
215 215 ; Once enabled, generated archives will be cached at this location
216 216 ; and served from the cache during subsequent requests for the same archive of
217 217 ; the repository.
218 218 #archive_cache_dir = /tmp/tarballcache
219 219
220 220 ; URL at which the application is running. This is used for Bootstrapping
221 221 ; requests in context when no web request is available. Used in ishell, or
222 222 ; SSH calls. Set this for events to receive proper url for SSH calls.
223 223 app.base_url = http://rhodecode.local
224 224
225 225 ; Unique application ID. Should be a random unique string for security.
226 226 app_instance_uuid = rc-production
227 227
228 228 ; Cut off limit for large diffs (size in bytes). If overall diff size on
229 229 ; commit, or pull request exceeds this limit this diff will be displayed
230 230 ; partially. E.g 512000 == 512Kb
231 231 cut_off_limit_diff = 512000
232 232
233 233 ; Cut off limit for large files inside diffs (size in bytes). Each individual
234 234 ; file inside diff which exceeds this limit will be displayed partially.
235 235 ; E.g 128000 == 128Kb
236 236 cut_off_limit_file = 128000
237 237
238 238 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
239 239 vcs_full_cache = true
240 240
241 241 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
242 242 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
243 243 force_https = false
244 244
245 245 ; use Strict-Transport-Security headers
246 246 use_htsts = false
247 247
248 248 ; Set to true if your repos are exposed using the dumb protocol
249 249 git_update_server_info = false
250 250
251 251 ; RSS/ATOM feed options
252 252 rss_cut_off_limit = 256000
253 253 rss_items_per_page = 10
254 254 rss_include_diff = false
255 255
256 256 ; gist URL alias, used to create nicer urls for gist. This should be an
257 257 ; url that does rewrites to _admin/gists/{gistid}.
258 258 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
259 259 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
260 260 gist_alias_url =
261 261
262 262 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
263 263 ; used for access.
264 264 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
265 265 ; came from the the logged in user who own this authentication token.
266 266 ; Additionally @TOKEN syntax can be used to bound the view to specific
267 267 ; authentication token. Such view would be only accessible when used together
268 268 ; with this authentication token
269 269 ; list of all views can be found under `/_admin/permissions/auth_token_access`
270 270 ; The list should be "," separated and on a single line.
271 271 ; Most common views to enable:
272 272
273 273 # RepoCommitsView:repo_commit_download
274 274 # RepoCommitsView:repo_commit_patch
275 275 # RepoCommitsView:repo_commit_raw
276 276 # RepoCommitsView:repo_commit_raw@TOKEN
277 277 # RepoFilesView:repo_files_diff
278 278 # RepoFilesView:repo_archivefile
279 279 # RepoFilesView:repo_file_raw
280 280 # GistView:*
281 281 api_access_controllers_whitelist =
282 282
283 283 ; Default encoding used to convert from and to unicode
284 284 ; can be also a comma separated list of encoding in case of mixed encodings
285 285 default_encoding = UTF-8
286 286
287 287 ; instance-id prefix
288 288 ; a prefix key for this instance used for cache invalidation when running
289 289 ; multiple instances of RhodeCode, make sure it's globally unique for
290 290 ; all running RhodeCode instances. Leave empty if you don't use it
291 291 instance_id =
292 292
293 293 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
294 294 ; of an authentication plugin also if it is disabled by it's settings.
295 295 ; This could be useful if you are unable to log in to the system due to broken
296 296 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
297 297 ; module to log in again and fix the settings.
298 298 ; Available builtin plugin IDs (hash is part of the ID):
299 299 ; egg:rhodecode-enterprise-ce#rhodecode
300 300 ; egg:rhodecode-enterprise-ce#pam
301 301 ; egg:rhodecode-enterprise-ce#ldap
302 302 ; egg:rhodecode-enterprise-ce#jasig_cas
303 303 ; egg:rhodecode-enterprise-ce#headers
304 304 ; egg:rhodecode-enterprise-ce#crowd
305 305
306 306 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
307 307
308 308 ; Flag to control loading of legacy plugins in py:/path format
309 309 auth_plugin.import_legacy_plugins = true
310 310
311 311 ; alternative return HTTP header for failed authentication. Default HTTP
312 312 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
313 313 ; handling that causing a series of failed authentication calls.
314 314 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
315 315 ; This will be served instead of default 401 on bad authentication
316 316 auth_ret_code =
317 317
318 318 ; use special detection method when serving auth_ret_code, instead of serving
319 319 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
320 320 ; and then serve auth_ret_code to clients
321 321 auth_ret_code_detection = false
322 322
323 323 ; locking return code. When repository is locked return this HTTP code. 2XX
324 324 ; codes don't break the transactions while 4XX codes do
325 325 lock_ret_code = 423
326 326
327 327 ; allows to change the repository location in settings page
328 328 allow_repo_location_change = true
329 329
330 330 ; allows to setup custom hooks in settings page
331 331 allow_custom_hooks_settings = true
332 332
333 333 ; Generated license token required for EE edition license.
334 334 ; New generated token value can be found in Admin > settings > license page.
335 335 license_token =
336 336
337 337 ; This flag hides sensitive information on the license page such as token, and license data
338 338 license.hide_license_info = false
339 339
340 340 ; supervisor connection uri, for managing supervisor and logs.
341 341 supervisor.uri =
342 342
343 343 ; supervisord group name/id we only want this RC instance to handle
344 344 supervisor.group_id = dev
345 345
346 346 ; Display extended labs settings
347 347 labs_settings_active = true
348 348
349 349 ; Custom exception store path, defaults to TMPDIR
350 350 ; This is used to store exception from RhodeCode in shared directory
351 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 364 ; File store configuration. This is used to store and serve uploaded files
354 365 file_store.enabled = true
355 366
356 367 ; Storage backend, available options are: local
357 368 file_store.backend = local
358 369
359 370 ; path to store the uploaded binaries
360 371 file_store.storage_path = %(here)s/data/file_store
361 372
362 373
363 374 ; #############
364 375 ; CELERY CONFIG
365 376 ; #############
366 377
367 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 380 use_celery = false
370 381
371 382 ; connection url to the message broker (default redis)
372 383 celery.broker_url = redis://localhost:6379/8
373 384
374 385 ; rabbitmq example
375 386 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
376 387
377 388 ; maximum tasks to execute before worker restart
378 389 celery.max_tasks_per_child = 100
379 390
380 391 ; tasks will never be sent to the queue, but executed locally instead.
381 392 celery.task_always_eager = false
382 393
383 394 ; #############
384 395 ; DOGPILE CACHE
385 396 ; #############
386 397
387 398 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
388 399 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
389 400 cache_dir = %(here)s/data
390 401
391 402 ; *********************************************
392 403 ; `sql_cache_short` cache for heavy SQL queries
393 404 ; Only supported backend is `memory_lru`
394 405 ; *********************************************
395 406 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
396 407 rc_cache.sql_cache_short.expiration_time = 30
397 408
398 409
399 410 ; *****************************************************
400 411 ; `cache_repo_longterm` cache for repo object instances
401 412 ; Only supported backend is `memory_lru`
402 413 ; *****************************************************
403 414 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
404 415 ; by default we use 30 Days, cache is still invalidated on push
405 416 rc_cache.cache_repo_longterm.expiration_time = 2592000
406 417 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
407 418 rc_cache.cache_repo_longterm.max_size = 10000
408 419
409 420
410 421 ; *************************************************
411 422 ; `cache_perms` cache for permission tree, auth TTL
412 423 ; *************************************************
413 424 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
414 425 rc_cache.cache_perms.expiration_time = 300
415 426 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
416 427 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
417 428
418 429 ; alternative `cache_perms` redis backend with distributed lock
419 430 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
420 431 #rc_cache.cache_perms.expiration_time = 300
421 432
422 433 ; redis_expiration_time needs to be greater then expiration_time
423 434 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
424 435
425 436 #rc_cache.cache_perms.arguments.host = localhost
426 437 #rc_cache.cache_perms.arguments.port = 6379
427 438 #rc_cache.cache_perms.arguments.db = 0
428 439 #rc_cache.cache_perms.arguments.socket_timeout = 30
429 440 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
430 441 #rc_cache.cache_perms.arguments.distributed_lock = true
431 442
432 443
433 444 ; ***************************************************
434 445 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
435 446 ; ***************************************************
436 447 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
437 448 rc_cache.cache_repo.expiration_time = 2592000
438 449 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
439 450 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
440 451
441 452 ; alternative `cache_repo` redis backend with distributed lock
442 453 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
443 454 #rc_cache.cache_repo.expiration_time = 2592000
444 455
445 456 ; redis_expiration_time needs to be greater then expiration_time
446 457 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
447 458
448 459 #rc_cache.cache_repo.arguments.host = localhost
449 460 #rc_cache.cache_repo.arguments.port = 6379
450 461 #rc_cache.cache_repo.arguments.db = 1
451 462 #rc_cache.cache_repo.arguments.socket_timeout = 30
452 463 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
453 464 #rc_cache.cache_repo.arguments.distributed_lock = true
454 465
455 466
456 467 ; ##############
457 468 ; BEAKER SESSION
458 469 ; ##############
459 470
460 471 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
461 472 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
462 473 ; Fastest ones are Redis and ext:database
463 474 beaker.session.type = file
464 475 beaker.session.data_dir = %(here)s/data/sessions
465 476
466 477 ; Redis based sessions
467 478 #beaker.session.type = ext:redis
468 479 #beaker.session.url = redis://127.0.0.1:6379/2
469 480
470 481 ; DB based session, fast, and allows easy management over logged in users
471 482 #beaker.session.type = ext:database
472 483 #beaker.session.table_name = db_session
473 484 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
474 485 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
475 486 #beaker.session.sa.pool_recycle = 3600
476 487 #beaker.session.sa.echo = false
477 488
478 489 beaker.session.key = rhodecode
479 490 beaker.session.secret = develop-rc-uytcxaz
480 491 beaker.session.lock_dir = %(here)s/data/sessions/lock
481 492
482 493 ; Secure encrypted cookie. Requires AES and AES python libraries
483 494 ; you must disable beaker.session.secret to use this
484 495 #beaker.session.encrypt_key = key_for_encryption
485 496 #beaker.session.validate_key = validation_key
486 497
487 498 ; Sets session as invalid (also logging out user) if it haven not been
488 499 ; accessed for given amount of time in seconds
489 500 beaker.session.timeout = 2592000
490 501 beaker.session.httponly = true
491 502
492 503 ; Path to use for the cookie. Set to prefix if you use prefix middleware
493 504 #beaker.session.cookie_path = /custom_prefix
494 505
495 506 ; Set https secure cookie
496 507 beaker.session.secure = false
497 508
498 509 ; default cookie expiration time in seconds, set to `true` to set expire
499 510 ; at browser close
500 511 #beaker.session.cookie_expires = 3600
501 512
502 513 ; #############################
503 514 ; SEARCH INDEXING CONFIGURATION
504 515 ; #############################
505 516
506 517 ; Full text search indexer is available in rhodecode-tools under
507 518 ; `rhodecode-tools index` command
508 519
509 520 ; WHOOSH Backend, doesn't require additional services to run
510 521 ; it works good with few dozen repos
511 522 search.module = rhodecode.lib.index.whoosh
512 523 search.location = %(here)s/data/index
513 524
514 525 ; ####################
515 526 ; CHANNELSTREAM CONFIG
516 527 ; ####################
517 528
518 529 ; channelstream enables persistent connections and live notification
519 530 ; in the system. It's also used by the chat system
520 531
521 532 channelstream.enabled = false
522 533
523 534 ; server address for channelstream server on the backend
524 535 channelstream.server = 127.0.0.1:9800
525 536
526 537 ; location of the channelstream server from outside world
527 538 ; use ws:// for http or wss:// for https. This address needs to be handled
528 539 ; by external HTTP server such as Nginx or Apache
529 540 ; see Nginx/Apache configuration examples in our docs
530 541 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
531 542 channelstream.secret = secret
532 543 channelstream.history.location = %(here)s/channelstream_history
533 544
534 545 ; Internal application path that Javascript uses to connect into.
535 546 ; If you use proxy-prefix the prefix should be added before /_channelstream
536 547 channelstream.proxy_path = /_channelstream
537 548
538 549
539 550 ; ##############################
540 551 ; MAIN RHODECODE DATABASE CONFIG
541 552 ; ##############################
542 553
543 554 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
544 555 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
545 556 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
546 557 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
547 558 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
548 559
549 560 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
550 561
551 562 ; see sqlalchemy docs for other advanced settings
552 563 ; print the sql statements to output
553 564 sqlalchemy.db1.echo = false
554 565
555 566 ; recycle the connections after this amount of seconds
556 567 sqlalchemy.db1.pool_recycle = 3600
557 568 sqlalchemy.db1.convert_unicode = true
558 569
559 570 ; the number of connections to keep open inside the connection pool.
560 571 ; 0 indicates no limit
561 572 #sqlalchemy.db1.pool_size = 5
562 573
563 574 ; The number of connections to allow in connection pool "overflow", that is
564 575 ; connections that can be opened above and beyond the pool_size setting,
565 576 ; which defaults to five.
566 577 #sqlalchemy.db1.max_overflow = 10
567 578
568 579 ; Connection check ping, used to detect broken database connections
569 580 ; could be enabled to better handle cases if MySQL has gone away errors
570 581 #sqlalchemy.db1.ping_connection = true
571 582
572 583 ; ##########
573 584 ; VCS CONFIG
574 585 ; ##########
575 586 vcs.server.enable = true
576 587 vcs.server = localhost:9900
577 588
578 589 ; Web server connectivity protocol, responsible for web based VCS operations
579 590 ; Available protocols are:
580 591 ; `http` - use http-rpc backend (default)
581 592 vcs.server.protocol = http
582 593
583 594 ; Push/Pull operations protocol, available options are:
584 595 ; `http` - use http-rpc backend (default)
585 596 vcs.scm_app_implementation = http
586 597
587 598 ; Push/Pull operations hooks protocol, available options are:
588 599 ; `http` - use http-rpc backend (default)
589 600 vcs.hooks.protocol = http
590 601
591 602 ; Host on which this instance is listening for hooks. If vcsserver is in other location
592 603 ; this should be adjusted.
593 604 vcs.hooks.host = 127.0.0.1
594 605
595 606 ; Start VCSServer with this instance as a subprocess, useful for development
596 607 vcs.start_server = false
597 608
598 609 ; List of enabled VCS backends, available options are:
599 610 ; `hg` - mercurial
600 611 ; `git` - git
601 612 ; `svn` - subversion
602 613 vcs.backends = hg, git, svn
603 614
604 615 ; Wait this number of seconds before killing connection to the vcsserver
605 616 vcs.connection_timeout = 3600
606 617
607 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
609 #vcs.svn.compatible_version = pre-1.8-compatible
619 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
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 625 ; Subversion proxy support (mod_dav_svn)
614 626 ; Maps RhodeCode repo groups into SVN paths for Apache
615 627 ; ####################################################
616 628
617 629 ; Enable or disable the config file generation.
618 630 svn.proxy.generate_config = false
619 631
620 632 ; Generate config file with `SVNListParentPath` set to `On`.
621 633 svn.proxy.list_parent_path = true
622 634
623 635 ; Set location and file name of generated config file.
624 636 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
625 637
626 638 ; alternative mod_dav config template. This needs to be a valid mako template
627 639 ; Example template can be found in the source code:
628 640 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
629 641 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
630 642
631 643 ; Used as a prefix to the `Location` block in the generated config file.
632 644 ; In most cases it should be set to `/`.
633 645 svn.proxy.location_root = /
634 646
635 647 ; Command to reload the mod dav svn configuration on change.
636 648 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
637 649 ; Make sure user who runs RhodeCode process is allowed to reload Apache
638 650 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
639 651
640 652 ; If the timeout expires before the reload command finishes, the command will
641 653 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
642 654 #svn.proxy.reload_timeout = 10
643 655
644 656 ; ####################
645 657 ; SSH Support Settings
646 658 ; ####################
647 659
648 660 ; Defines if a custom authorized_keys file should be created and written on
649 661 ; any change user ssh keys. Setting this to false also disables possibility
650 662 ; of adding SSH keys by users from web interface. Super admins can still
651 663 ; manage SSH Keys.
652 664 ssh.generate_authorized_keyfile = false
653 665
654 666 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
655 667 # ssh.authorized_keys_ssh_opts =
656 668
657 669 ; Path to the authorized_keys file where the generate entries are placed.
658 670 ; It is possible to have multiple key files specified in `sshd_config` e.g.
659 671 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
660 672 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
661 673
662 674 ; Command to execute the SSH wrapper. The binary is available in the
663 675 ; RhodeCode installation directory.
664 676 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
665 677 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
666 678
667 679 ; Allow shell when executing the ssh-wrapper command
668 680 ssh.wrapper_cmd_allow_shell = false
669 681
670 682 ; Enables logging, and detailed output send back to the client during SSH
671 683 ; operations. Useful for debugging, shouldn't be used in production.
672 684 ssh.enable_debug_logging = true
673 685
674 686 ; Paths to binary executable, by default they are the names, but we can
675 687 ; override them if we want to use a custom one
676 688 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
677 689 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
678 690 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
679 691
680 692 ; Enables SSH key generator web interface. Disabling this still allows users
681 693 ; to add their own keys.
682 694 ssh.enable_ui_key_generator = true
683 695
684 696
685 697 ; #################
686 698 ; APPENLIGHT CONFIG
687 699 ; #################
688 700
689 701 ; Appenlight is tailored to work with RhodeCode, see
690 702 ; http://appenlight.rhodecode.com for details how to obtain an account
691 703
692 704 ; Appenlight integration enabled
693 705 appenlight = false
694 706
695 707 appenlight.server_url = https://api.appenlight.com
696 708 appenlight.api_key = YOUR_API_KEY
697 709 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
698 710
699 711 ; used for JS client
700 712 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
701 713
702 714 ; TWEAK AMOUNT OF INFO SENT HERE
703 715
704 716 ; enables 404 error logging (default False)
705 717 appenlight.report_404 = false
706 718
707 719 ; time in seconds after request is considered being slow (default 1)
708 720 appenlight.slow_request_time = 1
709 721
710 722 ; record slow requests in application
711 723 ; (needs to be enabled for slow datastore recording and time tracking)
712 724 appenlight.slow_requests = true
713 725
714 726 ; enable hooking to application loggers
715 727 appenlight.logging = true
716 728
717 729 ; minimum log level for log capture
718 730 appenlight.logging.level = WARNING
719 731
720 732 ; send logs only from erroneous/slow requests
721 733 ; (saves API quota for intensive logging)
722 734 appenlight.logging_on_error = false
723 735
724 736 ; list of additional keywords that should be grabbed from environ object
725 737 ; can be string with comma separated list of words in lowercase
726 738 ; (by default client will always send following info:
727 739 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
728 740 ; start with HTTP* this list be extended with additional keywords here
729 741 appenlight.environ_keys_whitelist =
730 742
731 743 ; list of keywords that should be blanked from request object
732 744 ; can be string with comma separated list of words in lowercase
733 745 ; (by default client will always blank keys that contain following words
734 746 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
735 747 ; this list be extended with additional keywords set here
736 748 appenlight.request_keys_blacklist =
737 749
738 750 ; list of namespaces that should be ignores when gathering log entries
739 751 ; can be string with comma separated list of namespaces
740 752 ; (by default the client ignores own entries: appenlight_client.client)
741 753 appenlight.log_namespace_blacklist =
742 754
743 755 ; Dummy marker to add new entries after.
744 756 ; Add any custom entries below. Please don't remove this marker.
745 757 custom.conf = 1
746 758
747 759
748 760 ; #####################
749 761 ; LOGGING CONFIGURATION
750 762 ; #####################
751 763 [loggers]
752 764 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
753 765
754 766 [handlers]
755 767 keys = console, console_sql
756 768
757 769 [formatters]
758 770 keys = generic, color_formatter, color_formatter_sql
759 771
760 772 ; #######
761 773 ; LOGGERS
762 774 ; #######
763 775 [logger_root]
764 776 level = NOTSET
765 777 handlers = console
766 778
767 779 [logger_sqlalchemy]
768 780 level = INFO
769 781 handlers = console_sql
770 782 qualname = sqlalchemy.engine
771 783 propagate = 0
772 784
773 785 [logger_beaker]
774 786 level = DEBUG
775 787 handlers =
776 788 qualname = beaker.container
777 789 propagate = 1
778 790
779 791 [logger_rhodecode]
780 792 level = DEBUG
781 793 handlers =
782 794 qualname = rhodecode
783 795 propagate = 1
784 796
785 797 [logger_ssh_wrapper]
786 798 level = DEBUG
787 799 handlers =
788 800 qualname = ssh_wrapper
789 801 propagate = 1
790 802
791 803 [logger_celery]
792 804 level = DEBUG
793 805 handlers =
794 806 qualname = celery
795 807
796 808
797 809 ; ########
798 810 ; HANDLERS
799 811 ; ########
800 812
801 813 [handler_console]
802 814 class = StreamHandler
803 815 args = (sys.stderr, )
804 816 level = DEBUG
805 817 formatter = color_formatter
806 818
807 819 [handler_console_sql]
808 820 ; "level = DEBUG" logs SQL queries and results.
809 821 ; "level = INFO" logs SQL queries.
810 822 ; "level = WARN" logs neither. (Recommended for production systems.)
811 823 class = StreamHandler
812 824 args = (sys.stderr, )
813 825 level = WARN
814 826 formatter = color_formatter_sql
815 827
816 828 ; ##########
817 829 ; FORMATTERS
818 830 ; ##########
819 831
820 832 [formatter_generic]
821 833 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
822 834 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
823 835 datefmt = %Y-%m-%d %H:%M:%S
824 836
825 837 [formatter_color_formatter]
826 838 class = rhodecode.lib.logging_formatter.ColorFormatter
827 839 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
828 840 datefmt = %Y-%m-%d %H:%M:%S
829 841
830 842 [formatter_color_formatter_sql]
831 843 class = rhodecode.lib.logging_formatter.ColorFormatterSql
832 844 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
833 845 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,784 +1,796 b''
1 1 ## -*- coding: utf-8 -*-
2 2
3 3 ; #########################################
4 4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
5 5 ; #########################################
6 6
7 7 [DEFAULT]
8 8 ; Debug flag sets all loggers to debug, and enables request tracking
9 9 debug = false
10 10
11 11 ; ########################################################################
12 12 ; EMAIL CONFIGURATION
13 13 ; These settings will be used by the RhodeCode mailing system
14 14 ; ########################################################################
15 15
16 16 ; prefix all emails subjects with given prefix, helps filtering out emails
17 17 #email_prefix = [RhodeCode]
18 18
19 19 ; email FROM address all mails will be sent
20 20 #app_email_from = rhodecode-noreply@localhost
21 21
22 22 #smtp_server = mail.server.com
23 23 #smtp_username =
24 24 #smtp_password =
25 25 #smtp_port =
26 26 #smtp_use_tls = false
27 27 #smtp_use_ssl = true
28 28
29 29 [server:main]
30 30 ; COMMON HOST/IP CONFIG
31 31 host = 127.0.0.1
32 32 port = 5000
33 33
34 34
35 35 ; ###########################
36 36 ; GUNICORN APPLICATION SERVER
37 37 ; ###########################
38 38
39 39 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
40 40
41 41 ; Module to use, this setting shouldn't be changed
42 42 use = egg:gunicorn#main
43 43
44 44 ; Sets the number of process workers. More workers means more concurrent connections
45 45 ; RhodeCode can handle at the same time. Each additional worker also it increases
46 46 ; memory usage as each has it's own set of caches.
47 47 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
48 48 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
49 49 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
50 50 ; when using more than 1 worker.
51 51 workers = 2
52 52
53 53 ; Gunicorn access log level
54 54 loglevel = info
55 55
56 56 ; Process name visible in process list
57 57 proc_name = rhodecode
58 58
59 59 ; Type of worker class, one of `sync`, `gevent`
60 60 ; Recommended type is `gevent`
61 61 worker_class = gevent
62 62
63 63 ; The maximum number of simultaneous clients per worker. Valid only for gevent
64 64 worker_connections = 10
65 65
66 66 ; Max number of requests that worker will handle before being gracefully restarted.
67 67 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
68 68 max_requests = 1000
69 69 max_requests_jitter = 30
70 70
71 71 ; Amount of time a worker can spend with handling a request before it
72 72 ; gets killed and restarted. By default set to 21600 (6hrs)
73 73 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
74 74 timeout = 21600
75 75
76 76 ; The maximum size of HTTP request line in bytes.
77 77 ; 0 for unlimited
78 78 limit_request_line = 0
79 79
80 80 ; Limit the number of HTTP headers fields in a request.
81 81 ; By default this value is 100 and can't be larger than 32768.
82 82 limit_request_fields = 32768
83 83
84 84 ; Limit the allowed size of an HTTP request header field.
85 85 ; Value is a positive number or 0.
86 86 ; Setting it to 0 will allow unlimited header field sizes.
87 87 limit_request_field_size = 0
88 88
89 89 ; Timeout for graceful workers restart.
90 90 ; After receiving a restart signal, workers have this much time to finish
91 91 ; serving requests. Workers still alive after the timeout (starting from the
92 92 ; receipt of the restart signal) are force killed.
93 93 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
94 94 graceful_timeout = 3600
95 95
96 96 # The number of seconds to wait for requests on a Keep-Alive connection.
97 97 # Generally set in the 1-5 seconds range.
98 98 keepalive = 2
99 99
100 100 ; Maximum memory usage that each worker can use before it will receive a
101 101 ; graceful restart signal 0 = memory monitoring is disabled
102 102 ; Examples: 268435456 (256MB), 536870912 (512MB)
103 103 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
104 104 memory_max_usage = 0
105 105
106 106 ; How often in seconds to check for memory usage for each gunicorn worker
107 107 memory_usage_check_interval = 60
108 108
109 109 ; Threshold value for which we don't recycle worker if GarbageCollection
110 110 ; frees up enough resources. Before each restart we try to run GC on worker
111 111 ; in case we get enough free memory after that, restart will not happen.
112 112 memory_usage_recovery_threshold = 0.8
113 113
114 114
115 115 ; Prefix middleware for RhodeCode.
116 116 ; recommended when using proxy setup.
117 117 ; allows to set RhodeCode under a prefix in server.
118 118 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
119 119 ; And set your prefix like: `prefix = /custom_prefix`
120 120 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
121 121 ; to make your cookies only work on prefix url
122 122 [filter:proxy-prefix]
123 123 use = egg:PasteDeploy#prefix
124 124 prefix = /
125 125
126 126 [app:main]
127 127 ; The %(here)s variable will be replaced with the absolute path of parent directory
128 128 ; of this file
129 129 ; In addition ENVIRONMENT variables usage is possible, e.g
130 130 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
131 131
132 132 use = egg:rhodecode-enterprise-ce
133 133
134 134 ; enable proxy prefix middleware, defined above
135 135 #filter-with = proxy-prefix
136 136
137 137 ; encryption key used to encrypt social plugin tokens,
138 138 ; remote_urls with credentials etc, if not set it defaults to
139 139 ; `beaker.session.secret`
140 140 #rhodecode.encrypted_values.secret =
141 141
142 142 ; decryption strict mode (enabled by default). It controls if decryption raises
143 143 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
144 144 #rhodecode.encrypted_values.strict = false
145 145
146 146 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
147 147 ; fernet is safer, and we strongly recommend switching to it.
148 148 ; Due to backward compatibility aes is used as default.
149 149 #rhodecode.encrypted_values.algorithm = fernet
150 150
151 151 ; Return gzipped responses from RhodeCode (static files/application)
152 152 gzip_responses = false
153 153
154 154 ; Auto-generate javascript routes file on startup
155 155 generate_js_files = false
156 156
157 157 ; System global default language.
158 158 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
159 159 lang = en
160 160
161 161 ; Perform a full repository scan and import on each server start.
162 162 ; Settings this to true could lead to very long startup time.
163 163 startup.import_repos = false
164 164
165 165 ; Uncomment and set this path to use archive download cache.
166 166 ; Once enabled, generated archives will be cached at this location
167 167 ; and served from the cache during subsequent requests for the same archive of
168 168 ; the repository.
169 169 #archive_cache_dir = /tmp/tarballcache
170 170
171 171 ; URL at which the application is running. This is used for Bootstrapping
172 172 ; requests in context when no web request is available. Used in ishell, or
173 173 ; SSH calls. Set this for events to receive proper url for SSH calls.
174 174 app.base_url = http://rhodecode.local
175 175
176 176 ; Unique application ID. Should be a random unique string for security.
177 177 app_instance_uuid = rc-production
178 178
179 179 ; Cut off limit for large diffs (size in bytes). If overall diff size on
180 180 ; commit, or pull request exceeds this limit this diff will be displayed
181 181 ; partially. E.g 512000 == 512Kb
182 182 cut_off_limit_diff = 512000
183 183
184 184 ; Cut off limit for large files inside diffs (size in bytes). Each individual
185 185 ; file inside diff which exceeds this limit will be displayed partially.
186 186 ; E.g 128000 == 128Kb
187 187 cut_off_limit_file = 128000
188 188
189 189 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
190 190 vcs_full_cache = true
191 191
192 192 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
193 193 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
194 194 force_https = false
195 195
196 196 ; use Strict-Transport-Security headers
197 197 use_htsts = false
198 198
199 199 ; Set to true if your repos are exposed using the dumb protocol
200 200 git_update_server_info = false
201 201
202 202 ; RSS/ATOM feed options
203 203 rss_cut_off_limit = 256000
204 204 rss_items_per_page = 10
205 205 rss_include_diff = false
206 206
207 207 ; gist URL alias, used to create nicer urls for gist. This should be an
208 208 ; url that does rewrites to _admin/gists/{gistid}.
209 209 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
210 210 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
211 211 gist_alias_url =
212 212
213 213 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
214 214 ; used for access.
215 215 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
216 216 ; came from the the logged in user who own this authentication token.
217 217 ; Additionally @TOKEN syntax can be used to bound the view to specific
218 218 ; authentication token. Such view would be only accessible when used together
219 219 ; with this authentication token
220 220 ; list of all views can be found under `/_admin/permissions/auth_token_access`
221 221 ; The list should be "," separated and on a single line.
222 222 ; Most common views to enable:
223 223
224 224 # RepoCommitsView:repo_commit_download
225 225 # RepoCommitsView:repo_commit_patch
226 226 # RepoCommitsView:repo_commit_raw
227 227 # RepoCommitsView:repo_commit_raw@TOKEN
228 228 # RepoFilesView:repo_files_diff
229 229 # RepoFilesView:repo_archivefile
230 230 # RepoFilesView:repo_file_raw
231 231 # GistView:*
232 232 api_access_controllers_whitelist =
233 233
234 234 ; Default encoding used to convert from and to unicode
235 235 ; can be also a comma separated list of encoding in case of mixed encodings
236 236 default_encoding = UTF-8
237 237
238 238 ; instance-id prefix
239 239 ; a prefix key for this instance used for cache invalidation when running
240 240 ; multiple instances of RhodeCode, make sure it's globally unique for
241 241 ; all running RhodeCode instances. Leave empty if you don't use it
242 242 instance_id =
243 243
244 244 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
245 245 ; of an authentication plugin also if it is disabled by it's settings.
246 246 ; This could be useful if you are unable to log in to the system due to broken
247 247 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
248 248 ; module to log in again and fix the settings.
249 249 ; Available builtin plugin IDs (hash is part of the ID):
250 250 ; egg:rhodecode-enterprise-ce#rhodecode
251 251 ; egg:rhodecode-enterprise-ce#pam
252 252 ; egg:rhodecode-enterprise-ce#ldap
253 253 ; egg:rhodecode-enterprise-ce#jasig_cas
254 254 ; egg:rhodecode-enterprise-ce#headers
255 255 ; egg:rhodecode-enterprise-ce#crowd
256 256
257 257 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
258 258
259 259 ; Flag to control loading of legacy plugins in py:/path format
260 260 auth_plugin.import_legacy_plugins = true
261 261
262 262 ; alternative return HTTP header for failed authentication. Default HTTP
263 263 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
264 264 ; handling that causing a series of failed authentication calls.
265 265 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
266 266 ; This will be served instead of default 401 on bad authentication
267 267 auth_ret_code =
268 268
269 269 ; use special detection method when serving auth_ret_code, instead of serving
270 270 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
271 271 ; and then serve auth_ret_code to clients
272 272 auth_ret_code_detection = false
273 273
274 274 ; locking return code. When repository is locked return this HTTP code. 2XX
275 275 ; codes don't break the transactions while 4XX codes do
276 276 lock_ret_code = 423
277 277
278 278 ; allows to change the repository location in settings page
279 279 allow_repo_location_change = true
280 280
281 281 ; allows to setup custom hooks in settings page
282 282 allow_custom_hooks_settings = true
283 283
284 284 ; Generated license token required for EE edition license.
285 285 ; New generated token value can be found in Admin > settings > license page.
286 286 license_token =
287 287
288 288 ; This flag hides sensitive information on the license page such as token, and license data
289 289 license.hide_license_info = false
290 290
291 291 ; supervisor connection uri, for managing supervisor and logs.
292 292 supervisor.uri =
293 293
294 294 ; supervisord group name/id we only want this RC instance to handle
295 295 supervisor.group_id = prod
296 296
297 297 ; Display extended labs settings
298 298 labs_settings_active = true
299 299
300 300 ; Custom exception store path, defaults to TMPDIR
301 301 ; This is used to store exception from RhodeCode in shared directory
302 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 315 ; File store configuration. This is used to store and serve uploaded files
305 316 file_store.enabled = true
306 317
307 318 ; Storage backend, available options are: local
308 319 file_store.backend = local
309 320
310 321 ; path to store the uploaded binaries
311 322 file_store.storage_path = %(here)s/data/file_store
312 323
313 324
314 325 ; #############
315 326 ; CELERY CONFIG
316 327 ; #############
317 328
318 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 331 use_celery = false
321 332
322 333 ; connection url to the message broker (default redis)
323 334 celery.broker_url = redis://localhost:6379/8
324 335
325 336 ; rabbitmq example
326 337 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
327 338
328 339 ; maximum tasks to execute before worker restart
329 340 celery.max_tasks_per_child = 100
330 341
331 342 ; tasks will never be sent to the queue, but executed locally instead.
332 343 celery.task_always_eager = false
333 344
334 345 ; #############
335 346 ; DOGPILE CACHE
336 347 ; #############
337 348
338 349 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
339 350 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
340 351 cache_dir = %(here)s/data
341 352
342 353 ; *********************************************
343 354 ; `sql_cache_short` cache for heavy SQL queries
344 355 ; Only supported backend is `memory_lru`
345 356 ; *********************************************
346 357 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
347 358 rc_cache.sql_cache_short.expiration_time = 30
348 359
349 360
350 361 ; *****************************************************
351 362 ; `cache_repo_longterm` cache for repo object instances
352 363 ; Only supported backend is `memory_lru`
353 364 ; *****************************************************
354 365 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
355 366 ; by default we use 30 Days, cache is still invalidated on push
356 367 rc_cache.cache_repo_longterm.expiration_time = 2592000
357 368 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
358 369 rc_cache.cache_repo_longterm.max_size = 10000
359 370
360 371
361 372 ; *************************************************
362 373 ; `cache_perms` cache for permission tree, auth TTL
363 374 ; *************************************************
364 375 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
365 376 rc_cache.cache_perms.expiration_time = 300
366 377 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
367 378 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
368 379
369 380 ; alternative `cache_perms` redis backend with distributed lock
370 381 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
371 382 #rc_cache.cache_perms.expiration_time = 300
372 383
373 384 ; redis_expiration_time needs to be greater then expiration_time
374 385 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
375 386
376 387 #rc_cache.cache_perms.arguments.host = localhost
377 388 #rc_cache.cache_perms.arguments.port = 6379
378 389 #rc_cache.cache_perms.arguments.db = 0
379 390 #rc_cache.cache_perms.arguments.socket_timeout = 30
380 391 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
381 392 #rc_cache.cache_perms.arguments.distributed_lock = true
382 393
383 394
384 395 ; ***************************************************
385 396 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
386 397 ; ***************************************************
387 398 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
388 399 rc_cache.cache_repo.expiration_time = 2592000
389 400 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
390 401 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
391 402
392 403 ; alternative `cache_repo` redis backend with distributed lock
393 404 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
394 405 #rc_cache.cache_repo.expiration_time = 2592000
395 406
396 407 ; redis_expiration_time needs to be greater then expiration_time
397 408 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
398 409
399 410 #rc_cache.cache_repo.arguments.host = localhost
400 411 #rc_cache.cache_repo.arguments.port = 6379
401 412 #rc_cache.cache_repo.arguments.db = 1
402 413 #rc_cache.cache_repo.arguments.socket_timeout = 30
403 414 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
404 415 #rc_cache.cache_repo.arguments.distributed_lock = true
405 416
406 417
407 418 ; ##############
408 419 ; BEAKER SESSION
409 420 ; ##############
410 421
411 422 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
412 423 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
413 424 ; Fastest ones are Redis and ext:database
414 425 beaker.session.type = file
415 426 beaker.session.data_dir = %(here)s/data/sessions
416 427
417 428 ; Redis based sessions
418 429 #beaker.session.type = ext:redis
419 430 #beaker.session.url = redis://127.0.0.1:6379/2
420 431
421 432 ; DB based session, fast, and allows easy management over logged in users
422 433 #beaker.session.type = ext:database
423 434 #beaker.session.table_name = db_session
424 435 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
425 436 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
426 437 #beaker.session.sa.pool_recycle = 3600
427 438 #beaker.session.sa.echo = false
428 439
429 440 beaker.session.key = rhodecode
430 441 beaker.session.secret = production-rc-uytcxaz
431 442 beaker.session.lock_dir = %(here)s/data/sessions/lock
432 443
433 444 ; Secure encrypted cookie. Requires AES and AES python libraries
434 445 ; you must disable beaker.session.secret to use this
435 446 #beaker.session.encrypt_key = key_for_encryption
436 447 #beaker.session.validate_key = validation_key
437 448
438 449 ; Sets session as invalid (also logging out user) if it haven not been
439 450 ; accessed for given amount of time in seconds
440 451 beaker.session.timeout = 2592000
441 452 beaker.session.httponly = true
442 453
443 454 ; Path to use for the cookie. Set to prefix if you use prefix middleware
444 455 #beaker.session.cookie_path = /custom_prefix
445 456
446 457 ; Set https secure cookie
447 458 beaker.session.secure = false
448 459
449 460 ; default cookie expiration time in seconds, set to `true` to set expire
450 461 ; at browser close
451 462 #beaker.session.cookie_expires = 3600
452 463
453 464 ; #############################
454 465 ; SEARCH INDEXING CONFIGURATION
455 466 ; #############################
456 467
457 468 ; Full text search indexer is available in rhodecode-tools under
458 469 ; `rhodecode-tools index` command
459 470
460 471 ; WHOOSH Backend, doesn't require additional services to run
461 472 ; it works good with few dozen repos
462 473 search.module = rhodecode.lib.index.whoosh
463 474 search.location = %(here)s/data/index
464 475
465 476 ; ####################
466 477 ; CHANNELSTREAM CONFIG
467 478 ; ####################
468 479
469 480 ; channelstream enables persistent connections and live notification
470 481 ; in the system. It's also used by the chat system
471 482
472 483 channelstream.enabled = false
473 484
474 485 ; server address for channelstream server on the backend
475 486 channelstream.server = 127.0.0.1:9800
476 487
477 488 ; location of the channelstream server from outside world
478 489 ; use ws:// for http or wss:// for https. This address needs to be handled
479 490 ; by external HTTP server such as Nginx or Apache
480 491 ; see Nginx/Apache configuration examples in our docs
481 492 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
482 493 channelstream.secret = secret
483 494 channelstream.history.location = %(here)s/channelstream_history
484 495
485 496 ; Internal application path that Javascript uses to connect into.
486 497 ; If you use proxy-prefix the prefix should be added before /_channelstream
487 498 channelstream.proxy_path = /_channelstream
488 499
489 500
490 501 ; ##############################
491 502 ; MAIN RHODECODE DATABASE CONFIG
492 503 ; ##############################
493 504
494 505 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
495 506 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
496 507 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
497 508 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
498 509 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
499 510
500 511 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
501 512
502 513 ; see sqlalchemy docs for other advanced settings
503 514 ; print the sql statements to output
504 515 sqlalchemy.db1.echo = false
505 516
506 517 ; recycle the connections after this amount of seconds
507 518 sqlalchemy.db1.pool_recycle = 3600
508 519 sqlalchemy.db1.convert_unicode = true
509 520
510 521 ; the number of connections to keep open inside the connection pool.
511 522 ; 0 indicates no limit
512 523 #sqlalchemy.db1.pool_size = 5
513 524
514 525 ; The number of connections to allow in connection pool "overflow", that is
515 526 ; connections that can be opened above and beyond the pool_size setting,
516 527 ; which defaults to five.
517 528 #sqlalchemy.db1.max_overflow = 10
518 529
519 530 ; Connection check ping, used to detect broken database connections
520 531 ; could be enabled to better handle cases if MySQL has gone away errors
521 532 #sqlalchemy.db1.ping_connection = true
522 533
523 534 ; ##########
524 535 ; VCS CONFIG
525 536 ; ##########
526 537 vcs.server.enable = true
527 538 vcs.server = localhost:9900
528 539
529 540 ; Web server connectivity protocol, responsible for web based VCS operations
530 541 ; Available protocols are:
531 542 ; `http` - use http-rpc backend (default)
532 543 vcs.server.protocol = http
533 544
534 545 ; Push/Pull operations protocol, available options are:
535 546 ; `http` - use http-rpc backend (default)
536 547 vcs.scm_app_implementation = http
537 548
538 549 ; Push/Pull operations hooks protocol, available options are:
539 550 ; `http` - use http-rpc backend (default)
540 551 vcs.hooks.protocol = http
541 552
542 553 ; Host on which this instance is listening for hooks. If vcsserver is in other location
543 554 ; this should be adjusted.
544 555 vcs.hooks.host = 127.0.0.1
545 556
546 557 ; Start VCSServer with this instance as a subprocess, useful for development
547 558 vcs.start_server = false
548 559
549 560 ; List of enabled VCS backends, available options are:
550 561 ; `hg` - mercurial
551 562 ; `git` - git
552 563 ; `svn` - subversion
553 564 vcs.backends = hg, git, svn
554 565
555 566 ; Wait this number of seconds before killing connection to the vcsserver
556 567 vcs.connection_timeout = 3600
557 568
558 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
560 #vcs.svn.compatible_version = pre-1.8-compatible
570 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
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 576 ; Subversion proxy support (mod_dav_svn)
565 577 ; Maps RhodeCode repo groups into SVN paths for Apache
566 578 ; ####################################################
567 579
568 580 ; Enable or disable the config file generation.
569 581 svn.proxy.generate_config = false
570 582
571 583 ; Generate config file with `SVNListParentPath` set to `On`.
572 584 svn.proxy.list_parent_path = true
573 585
574 586 ; Set location and file name of generated config file.
575 587 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
576 588
577 589 ; alternative mod_dav config template. This needs to be a valid mako template
578 590 ; Example template can be found in the source code:
579 591 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
580 592 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
581 593
582 594 ; Used as a prefix to the `Location` block in the generated config file.
583 595 ; In most cases it should be set to `/`.
584 596 svn.proxy.location_root = /
585 597
586 598 ; Command to reload the mod dav svn configuration on change.
587 599 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
588 600 ; Make sure user who runs RhodeCode process is allowed to reload Apache
589 601 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
590 602
591 603 ; If the timeout expires before the reload command finishes, the command will
592 604 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
593 605 #svn.proxy.reload_timeout = 10
594 606
595 607 ; ####################
596 608 ; SSH Support Settings
597 609 ; ####################
598 610
599 611 ; Defines if a custom authorized_keys file should be created and written on
600 612 ; any change user ssh keys. Setting this to false also disables possibility
601 613 ; of adding SSH keys by users from web interface. Super admins can still
602 614 ; manage SSH Keys.
603 615 ssh.generate_authorized_keyfile = false
604 616
605 617 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
606 618 # ssh.authorized_keys_ssh_opts =
607 619
608 620 ; Path to the authorized_keys file where the generate entries are placed.
609 621 ; It is possible to have multiple key files specified in `sshd_config` e.g.
610 622 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
611 623 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
612 624
613 625 ; Command to execute the SSH wrapper. The binary is available in the
614 626 ; RhodeCode installation directory.
615 627 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
616 628 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
617 629
618 630 ; Allow shell when executing the ssh-wrapper command
619 631 ssh.wrapper_cmd_allow_shell = false
620 632
621 633 ; Enables logging, and detailed output send back to the client during SSH
622 634 ; operations. Useful for debugging, shouldn't be used in production.
623 635 ssh.enable_debug_logging = false
624 636
625 637 ; Paths to binary executable, by default they are the names, but we can
626 638 ; override them if we want to use a custom one
627 639 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
628 640 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
629 641 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
630 642
631 643 ; Enables SSH key generator web interface. Disabling this still allows users
632 644 ; to add their own keys.
633 645 ssh.enable_ui_key_generator = true
634 646
635 647
636 648 ; #################
637 649 ; APPENLIGHT CONFIG
638 650 ; #################
639 651
640 652 ; Appenlight is tailored to work with RhodeCode, see
641 653 ; http://appenlight.rhodecode.com for details how to obtain an account
642 654
643 655 ; Appenlight integration enabled
644 656 appenlight = false
645 657
646 658 appenlight.server_url = https://api.appenlight.com
647 659 appenlight.api_key = YOUR_API_KEY
648 660 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
649 661
650 662 ; used for JS client
651 663 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
652 664
653 665 ; TWEAK AMOUNT OF INFO SENT HERE
654 666
655 667 ; enables 404 error logging (default False)
656 668 appenlight.report_404 = false
657 669
658 670 ; time in seconds after request is considered being slow (default 1)
659 671 appenlight.slow_request_time = 1
660 672
661 673 ; record slow requests in application
662 674 ; (needs to be enabled for slow datastore recording and time tracking)
663 675 appenlight.slow_requests = true
664 676
665 677 ; enable hooking to application loggers
666 678 appenlight.logging = true
667 679
668 680 ; minimum log level for log capture
669 681 appenlight.logging.level = WARNING
670 682
671 683 ; send logs only from erroneous/slow requests
672 684 ; (saves API quota for intensive logging)
673 685 appenlight.logging_on_error = false
674 686
675 687 ; list of additional keywords that should be grabbed from environ object
676 688 ; can be string with comma separated list of words in lowercase
677 689 ; (by default client will always send following info:
678 690 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
679 691 ; start with HTTP* this list be extended with additional keywords here
680 692 appenlight.environ_keys_whitelist =
681 693
682 694 ; list of keywords that should be blanked from request object
683 695 ; can be string with comma separated list of words in lowercase
684 696 ; (by default client will always blank keys that contain following words
685 697 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
686 698 ; this list be extended with additional keywords set here
687 699 appenlight.request_keys_blacklist =
688 700
689 701 ; list of namespaces that should be ignores when gathering log entries
690 702 ; can be string with comma separated list of namespaces
691 703 ; (by default the client ignores own entries: appenlight_client.client)
692 704 appenlight.log_namespace_blacklist =
693 705
694 706 ; Dummy marker to add new entries after.
695 707 ; Add any custom entries below. Please don't remove this marker.
696 708 custom.conf = 1
697 709
698 710
699 711 ; #####################
700 712 ; LOGGING CONFIGURATION
701 713 ; #####################
702 714 [loggers]
703 715 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
704 716
705 717 [handlers]
706 718 keys = console, console_sql
707 719
708 720 [formatters]
709 721 keys = generic, color_formatter, color_formatter_sql
710 722
711 723 ; #######
712 724 ; LOGGERS
713 725 ; #######
714 726 [logger_root]
715 727 level = NOTSET
716 728 handlers = console
717 729
718 730 [logger_sqlalchemy]
719 731 level = INFO
720 732 handlers = console_sql
721 733 qualname = sqlalchemy.engine
722 734 propagate = 0
723 735
724 736 [logger_beaker]
725 737 level = DEBUG
726 738 handlers =
727 739 qualname = beaker.container
728 740 propagate = 1
729 741
730 742 [logger_rhodecode]
731 743 level = DEBUG
732 744 handlers =
733 745 qualname = rhodecode
734 746 propagate = 1
735 747
736 748 [logger_ssh_wrapper]
737 749 level = DEBUG
738 750 handlers =
739 751 qualname = ssh_wrapper
740 752 propagate = 1
741 753
742 754 [logger_celery]
743 755 level = DEBUG
744 756 handlers =
745 757 qualname = celery
746 758
747 759
748 760 ; ########
749 761 ; HANDLERS
750 762 ; ########
751 763
752 764 [handler_console]
753 765 class = StreamHandler
754 766 args = (sys.stderr, )
755 767 level = INFO
756 768 formatter = generic
757 769
758 770 [handler_console_sql]
759 771 ; "level = DEBUG" logs SQL queries and results.
760 772 ; "level = INFO" logs SQL queries.
761 773 ; "level = WARN" logs neither. (Recommended for production systems.)
762 774 class = StreamHandler
763 775 args = (sys.stderr, )
764 776 level = WARN
765 777 formatter = generic
766 778
767 779 ; ##########
768 780 ; FORMATTERS
769 781 ; ##########
770 782
771 783 [formatter_generic]
772 784 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
773 785 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
774 786 datefmt = %Y-%m-%d %H:%M:%S
775 787
776 788 [formatter_color_formatter]
777 789 class = rhodecode.lib.logging_formatter.ColorFormatter
778 790 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
779 791 datefmt = %Y-%m-%d %H:%M:%S
780 792
781 793 [formatter_color_formatter_sql]
782 794 class = rhodecode.lib.logging_formatter.ColorFormatterSql
783 795 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
784 796 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,61 +1,104 b''
1 1 .. _repo-admin-tasks:
2 2
3 3 Common Admin Tasks for Repositories
4 4 -----------------------------------
5 5
6 6
7 7 Manually Force Delete Repository
8 8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9 9
10 10 In case of attached forks or pull-requests repositories should be archived.
11 11 Here is how to force delete a repository and remove all dependent objects
12 12
13 13
14 14 .. code-block:: bash
15 15 :dedent: 1
16 16
17 17 # starts the ishell interactive prompt
18 18 $ rccontrol ishell enterprise-1
19 19
20 20 .. code-block:: python
21 21 :dedent: 1
22 22
23 23 In [4]: from rhodecode.model.repo import RepoModel
24 24 In [3]: repo = Repository.get_by_repo_name('test_repos/repo_with_prs')
25 25 In [5]: RepoModel().delete(repo, forks='detach', pull_requests='delete')
26 26 In [6]: Session().commit()
27 27
28 28
29 29 Below is a fully automated example to force delete repositories reading from a
30 30 file where each line is a repository name. This can be executed via simple CLI command
31 31 without entering the interactive shell.
32 32
33 33 Save the below content as a file named `repo_delete_task.py`
34 34
35 35
36 36 .. code-block:: python
37 37 :dedent: 1
38 38
39 39 from rhodecode.model.db import *
40 40 from rhodecode.model.repo import RepoModel
41 41 with open('delete_repos.txt', 'rb') as f:
42 42 # read all lines from file
43 43 repos = f.readlines()
44 44 for repo_name in repos:
45 45 repo_name = repo_name.strip() # cleanup the name just in case
46 46 repo = Repository.get_by_repo_name(repo_name)
47 47 if not repo:
48 48 raise Exception('Repo with name {} not found'.format(repo_name))
49 49 RepoModel().delete(repo, forks='detach', pull_requests='delete')
50 50 Session().commit()
51 51 print('Removed repository {}'.format(repo_name))
52 52
53 53
54 54 The code above will read the names of repositories from a file called `delete_repos.txt`
55 55 Each lines should represent a single name e.g `repo_name_1` or `repo_group/repo_name_2`
56 56
57 57 Run this line from CLI to execute the code from the `repo_delete_task.py` file and
58 58 exit the ishell after the execution::
59 59
60 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 1 .. _system-overview-ref:
2 2
3 3 System Overview
4 4 ===============
5 5
6 6 Latest Version
7 7 --------------
8 8
9 9 * |release| on Unix and Windows systems.
10 10
11 11 System Architecture
12 12 -------------------
13 13
14 14 The following diagram shows a typical production architecture.
15 15
16 16 .. image:: ../images/architecture-diagram.png
17 17 :align: center
18 18
19 19 Supported Operating Systems
20 20 ---------------------------
21 21
22 22 Linux
23 23 ^^^^^
24 24
25 * Ubuntu 14.04
26 * CentOS 6.2 and 7
25 * Ubuntu 14.04+
26 * CentOS 6.2, 7 and 8
27 * RHEL 6.2, 7 and 8
27 28 * Debian 7.8
28 29 * RedHat Fedora
29 30 * Arch Linux
30 31 * SUSE Linux
31 32
32 33 Windows
33 34 ^^^^^^^
34 35
35 36 * Windows Vista Ultimate 64bit
36 37 * Windows 7 Ultimate 64bit
37 38 * Windows 8 Professional 64bit
38 39 * Windows 8.1 Enterprise 64bit
39 40 * Windows Server 2008 64bit
40 41 * Windows Server 2008-R2 64bit
41 42 * Windows Server 2012 64bit
42 43
43 44 Supported Databases
44 45 -------------------
45 46
46 47 * SQLite
47 48 * MySQL
48 49 * MariaDB
49 50 * PostgreSQL
50 51
51 52 Supported Browsers
52 53 ------------------
53 54
54 55 * Chrome
55 56 * Safari
56 57 * Firefox
57 58 * Internet Explorer 10 & 11
58 59
59 60 System Requirements
60 61 -------------------
61 62
62 63 |RCE| performs best on machines with ultra-fast hard disks. Generally disk
63 64 performance is more important than CPU performance. In a corporate production
64 65 environment handling 1000s of users and |repos| you should deploy on a 12+
65 66 core 64GB RAM server. In short, the more RAM the better.
66 67
67 68
68 69 For example:
69 70
70 71 - for team of 1 - 5 active users you can run on 1GB RAM machine with 1CPU
71 72 - above 250 active users, |RCE| needs at least 8GB of memory.
72 73 Number of CPUs is less important, but recommended to have at least 2-3 CPUs
73 74
74 75
75 76 .. _config-rce-files:
76 77
77 78 Configuration Files
78 79 -------------------
79 80
80 81 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
81 82 * :file:`/home/{user}/.rccontrol/{instance-id}/search_mapping.ini`
82 83 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`
83 84 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.ini`
84 85 * :file:`/home/{user}/.rccontrol.ini`
85 86 * :file:`/home/{user}/.rhoderc`
86 87 * :file:`/home/{user}/.rccontrol/cache/MANIFEST`
87 88
88 89 For more information, see the :ref:`config-files` section.
89 90
90 91 Log Files
91 92 ---------
92 93
93 94 * :file:`/home/{user}/.rccontrol/{instance-id}/enterprise.log`
94 95 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.log`
95 96 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.log`
96 97 * :file:`/tmp/rccontrol.log`
97 98 * :file:`/tmp/rhodecode_tools.log`
98 99
99 100 Storage Files
100 101 -------------
101 102
102 103 * :file:`/home/{user}/.rccontrol/{instance-id}/data/index/{index-file.toc}`
103 104 * :file:`/home/{user}/repos/.rc_gist_store`
104 105 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
105 106 * :file:`/opt/rhodecode/store/{unique-hash}`
106 107
107 108 Default Repositories Location
108 109 -----------------------------
109 110
110 111 * :file:`/home/{user}/repos`
111 112
112 113 Connection Methods
113 114 ------------------
114 115
115 116 * HTTPS
116 117 * SSH
117 118 * |RCE| API
118 119
119 120 Internationalization Support
120 121 ----------------------------
121 122
122 123 Currently available in the following languages, see `Transifex`_ for the
123 124 latest details. If you want a new language added, please contact us. To
124 125 configure your language settings, see the :ref:`set-lang` section.
125 126
126 127 .. hlist::
127 128
128 129 * Belorussian
129 130 * Chinese
130 131 * French
131 132 * German
132 133 * Italian
133 134 * Japanese
134 135 * Portuguese
135 136 * Polish
136 137 * Russian
137 138 * Spanish
138 139
139 140 Licencing Information
140 141 ---------------------
141 142
142 143 * See licencing information `here`_
143 144
144 145 Peer-to-peer Failover Support
145 146 -----------------------------
146 147
147 148 * Yes
148 149
149 150 Additional Binaries
150 151 -------------------
151 152
152 153 * Yes, see :ref:`rhodecode-nix-ref` for full details.
153 154
154 155 Remote Connectivity
155 156 -------------------
156 157
157 158 * Available
158 159
159 160 Executable Files
160 161 ----------------
161 162
162 163 Windows: :file:`RhodeCode-installer-{version}.exe`
163 164
164 165 Deprecated Support
165 166 ------------------
166 167
167 168 - Internet Explorer 8 support deprecated since version 3.7.0.
168 169 - Internet Explorer 9 support deprecated since version 3.8.0.
169 170
170 171 .. _here: https://rhodecode.com/licenses/
171 172 .. _Transifex: https://www.transifex.com/projects/p/RhodeCode/
@@ -1,442 +1,447 b''
1 1 .. _pull-request-methods-ref:
2 2
3 3 pull_request methods
4 4 ====================
5 5
6 6 close_pull_request
7 7 ------------------
8 8
9 9 .. py:function:: close_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>, message=<Optional:''>)
10 10
11 11 Close the pull request specified by `pullrequestid`.
12 12
13 13 :param apiuser: This is filled automatically from the |authtoken|.
14 14 :type apiuser: AuthUser
15 15 :param repoid: Repository name or repository ID to which the pull
16 16 request belongs.
17 17 :type repoid: str or int
18 18 :param pullrequestid: ID of the pull request to be closed.
19 19 :type pullrequestid: int
20 20 :param userid: Close the pull request as this user.
21 21 :type userid: Optional(str or int)
22 22 :param message: Optional message to close the Pull Request with. If not
23 23 specified it will be generated automatically.
24 24 :type message: Optional(str)
25 25
26 26 Example output:
27 27
28 28 .. code-block:: bash
29 29
30 30 "id": <id_given_in_input>,
31 31 "result": {
32 32 "pull_request_id": "<int>",
33 33 "close_status": "<str:status_lbl>,
34 34 "closed": "<bool>"
35 35 },
36 36 "error": null
37 37
38 38
39 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 44 Comment on the pull request specified with the `pullrequestid`,
45 45 in the |repo| specified by the `repoid`, and optionally change the
46 46 review status.
47 47
48 48 :param apiuser: This is filled automatically from the |authtoken|.
49 49 :type apiuser: AuthUser
50 50 :param repoid: Optional repository name or repository ID.
51 51 :type repoid: str or int
52 52 :param pullrequestid: The pull request ID.
53 53 :type pullrequestid: int
54 54 :param commit_id: Specify the commit_id for which to set a comment. If
55 55 given commit_id is different than latest in the PR status
56 56 change won't be performed.
57 57 :type commit_id: str
58 58 :param message: The text content of the comment.
59 59 :type message: str
60 60 :param status: (**Optional**) Set the approval status of the pull
61 61 request. One of: 'not_reviewed', 'approved', 'rejected',
62 62 'under_review'
63 63 :type status: str
64 64 :param comment_type: Comment type, one of: 'note', 'todo'
65 65 :type comment_type: Optional(str), default: 'note'
66 66 :param resolves_comment_id: id of comment which this one will resolve
67 67 :type resolves_comment_id: Optional(int)
68 68 :param extra_recipients: list of user ids or usernames to add
69 69 notifications for this comment. Acts like a CC for notification
70 70 :type extra_recipients: Optional(list)
71 71 :param userid: Comment on the pull request as this user
72 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 76 Example output:
75 77
76 78 .. code-block:: bash
77 79
78 80 id : <id_given_in_input>
79 81 result : {
80 82 "pull_request_id": "<Integer>",
81 83 "comment_id": "<Integer>",
82 84 "status": {"given": <given_status>,
83 85 "was_changed": <bool status_was_actually_changed> },
84 86 },
85 87 error : null
86 88
87 89
88 90 create_pull_request
89 91 -------------------
90 92
91 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 95 Creates a new pull request.
94 96
95 97 Accepts refs in the following formats:
96 98
97 99 * branch:<branch_name>:<sha>
98 100 * branch:<branch_name>
99 101 * bookmark:<bookmark_name>:<sha> (Mercurial only)
100 102 * bookmark:<bookmark_name> (Mercurial only)
101 103
102 104 :param apiuser: This is filled automatically from the |authtoken|.
103 105 :type apiuser: AuthUser
104 106 :param source_repo: Set the source repository name.
105 107 :type source_repo: str
106 108 :param target_repo: Set the target repository name.
107 109 :type target_repo: str
108 110 :param source_ref: Set the source ref name.
109 111 :type source_ref: str
110 112 :param target_ref: Set the target ref name.
111 113 :type target_ref: str
112 114 :param owner: user_id or username
113 115 :type owner: Optional(str)
114 116 :param title: Optionally Set the pull request title, it's generated otherwise
115 117 :type title: str
116 118 :param description: Set the pull request description.
117 119 :type description: Optional(str)
118 120 :type description_renderer: Optional(str)
119 121 :param description_renderer: Set pull request renderer for the description.
120 122 It should be 'rst', 'markdown' or 'plain'. If not give default
121 123 system renderer will be used
122 124 :param reviewers: Set the new pull request reviewers list.
123 125 Reviewer defined by review rules will be added automatically to the
124 126 defined list.
125 127 :type reviewers: Optional(list)
126 128 Accepts username strings or objects of the format:
127 129
128 130 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
129 131
130 132
131 133 get_pull_request
132 134 ----------------
133 135
134 136 .. py:function:: get_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, merge_state=<Optional:False>)
135 137
136 138 Get a pull request based on the given ID.
137 139
138 140 :param apiuser: This is filled automatically from the |authtoken|.
139 141 :type apiuser: AuthUser
140 142 :param repoid: Optional, repository name or repository ID from where
141 143 the pull request was opened.
142 144 :type repoid: str or int
143 145 :param pullrequestid: ID of the requested pull request.
144 146 :type pullrequestid: int
145 147 :param merge_state: Optional calculate merge state for each repository.
146 148 This could result in longer time to fetch the data
147 149 :type merge_state: bool
148 150
149 151 Example output:
150 152
151 153 .. code-block:: bash
152 154
153 155 "id": <id_given_in_input>,
154 156 "result":
155 157 {
156 158 "pull_request_id": "<pull_request_id>",
157 159 "url": "<url>",
158 160 "title": "<title>",
159 161 "description": "<description>",
160 162 "status" : "<status>",
161 163 "created_on": "<date_time_created>",
162 164 "updated_on": "<date_time_updated>",
165 "versions": "<number_or_versions_of_pr>",
163 166 "commit_ids": [
164 167 ...
165 168 "<commit_id>",
166 169 "<commit_id>",
167 170 ...
168 171 ],
169 172 "review_status": "<review_status>",
170 173 "mergeable": {
171 174 "status": "<bool>",
172 175 "message": "<message>",
173 176 },
174 177 "source": {
175 178 "clone_url": "<clone_url>",
176 179 "repository": "<repository_name>",
177 180 "reference":
178 181 {
179 182 "name": "<name>",
180 183 "type": "<type>",
181 184 "commit_id": "<commit_id>",
182 185 }
183 186 },
184 187 "target": {
185 188 "clone_url": "<clone_url>",
186 189 "repository": "<repository_name>",
187 190 "reference":
188 191 {
189 192 "name": "<name>",
190 193 "type": "<type>",
191 194 "commit_id": "<commit_id>",
192 195 }
193 196 },
194 197 "merge": {
195 198 "clone_url": "<clone_url>",
196 199 "reference":
197 200 {
198 201 "name": "<name>",
199 202 "type": "<type>",
200 203 "commit_id": "<commit_id>",
201 204 }
202 205 },
203 206 "author": <user_obj>,
204 207 "reviewers": [
205 208 ...
206 209 {
207 210 "user": "<user_obj>",
208 211 "review_status": "<review_status>",
209 212 }
210 213 ...
211 214 ]
212 215 },
213 216 "error": null
214 217
215 218
216 219 get_pull_request_comments
217 220 -------------------------
218 221
219 222 .. py:function:: get_pull_request_comments(apiuser, pullrequestid, repoid=<Optional:None>)
220 223
221 224 Get all comments of pull request specified with the `pullrequestid`
222 225
223 226 :param apiuser: This is filled automatically from the |authtoken|.
224 227 :type apiuser: AuthUser
225 228 :param repoid: Optional repository name or repository ID.
226 229 :type repoid: str or int
227 230 :param pullrequestid: The pull request ID.
228 231 :type pullrequestid: int
229 232
230 233 Example output:
231 234
232 235 .. code-block:: bash
233 236
234 237 id : <id_given_in_input>
235 238 result : [
236 239 {
237 240 "comment_author": {
238 241 "active": true,
239 242 "full_name_or_username": "Tom Gore",
240 243 "username": "admin"
241 244 },
242 245 "comment_created_on": "2017-01-02T18:43:45.533",
243 246 "comment_f_path": null,
244 247 "comment_id": 25,
245 248 "comment_lineno": null,
246 249 "comment_status": {
247 250 "status": "under_review",
248 251 "status_lbl": "Under Review"
249 252 },
250 253 "comment_text": "Example text",
251 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 260 error : null
256 261
257 262
258 263 get_pull_requests
259 264 -----------------
260 265
261 266 .. py:function:: get_pull_requests(apiuser, repoid, status=<Optional:'new'>, merge_state=<Optional:False>)
262 267
263 268 Get all pull requests from the repository specified in `repoid`.
264 269
265 270 :param apiuser: This is filled automatically from the |authtoken|.
266 271 :type apiuser: AuthUser
267 272 :param repoid: Optional repository name or repository ID.
268 273 :type repoid: str or int
269 274 :param status: Only return pull requests with the specified status.
270 275 Valid options are.
271 276 * ``new`` (default)
272 277 * ``open``
273 278 * ``closed``
274 279 :type status: str
275 280 :param merge_state: Optional calculate merge state for each repository.
276 281 This could result in longer time to fetch the data
277 282 :type merge_state: bool
278 283
279 284 Example output:
280 285
281 286 .. code-block:: bash
282 287
283 288 "id": <id_given_in_input>,
284 289 "result":
285 290 [
286 291 ...
287 292 {
288 293 "pull_request_id": "<pull_request_id>",
289 294 "url": "<url>",
290 295 "title" : "<title>",
291 296 "description": "<description>",
292 297 "status": "<status>",
293 298 "created_on": "<date_time_created>",
294 299 "updated_on": "<date_time_updated>",
295 300 "commit_ids": [
296 301 ...
297 302 "<commit_id>",
298 303 "<commit_id>",
299 304 ...
300 305 ],
301 306 "review_status": "<review_status>",
302 307 "mergeable": {
303 308 "status": "<bool>",
304 309 "message: "<message>",
305 310 },
306 311 "source": {
307 312 "clone_url": "<clone_url>",
308 313 "reference":
309 314 {
310 315 "name": "<name>",
311 316 "type": "<type>",
312 317 "commit_id": "<commit_id>",
313 318 }
314 319 },
315 320 "target": {
316 321 "clone_url": "<clone_url>",
317 322 "reference":
318 323 {
319 324 "name": "<name>",
320 325 "type": "<type>",
321 326 "commit_id": "<commit_id>",
322 327 }
323 328 },
324 329 "merge": {
325 330 "clone_url": "<clone_url>",
326 331 "reference":
327 332 {
328 333 "name": "<name>",
329 334 "type": "<type>",
330 335 "commit_id": "<commit_id>",
331 336 }
332 337 },
333 338 "author": <user_obj>,
334 339 "reviewers": [
335 340 ...
336 341 {
337 342 "user": "<user_obj>",
338 343 "review_status": "<review_status>",
339 344 }
340 345 ...
341 346 ]
342 347 }
343 348 ...
344 349 ],
345 350 "error": null
346 351
347 352
348 353 merge_pull_request
349 354 ------------------
350 355
351 356 .. py:function:: merge_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
352 357
353 358 Merge the pull request specified by `pullrequestid` into its target
354 359 repository.
355 360
356 361 :param apiuser: This is filled automatically from the |authtoken|.
357 362 :type apiuser: AuthUser
358 363 :param repoid: Optional, repository name or repository ID of the
359 364 target repository to which the |pr| is to be merged.
360 365 :type repoid: str or int
361 366 :param pullrequestid: ID of the pull request which shall be merged.
362 367 :type pullrequestid: int
363 368 :param userid: Merge the pull request as this user.
364 369 :type userid: Optional(str or int)
365 370
366 371 Example output:
367 372
368 373 .. code-block:: bash
369 374
370 375 "id": <id_given_in_input>,
371 376 "result": {
372 377 "executed": "<bool>",
373 378 "failure_reason": "<int>",
374 379 "merge_status_message": "<str>",
375 380 "merge_commit_id": "<merge_commit_id>",
376 381 "possible": "<bool>",
377 382 "merge_ref": {
378 383 "commit_id": "<commit_id>",
379 384 "type": "<type>",
380 385 "name": "<name>"
381 386 }
382 387 },
383 388 "error": null
384 389
385 390
386 391 update_pull_request
387 392 -------------------
388 393
389 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 396 Updates a pull request.
392 397
393 398 :param apiuser: This is filled automatically from the |authtoken|.
394 399 :type apiuser: AuthUser
395 400 :param repoid: Optional repository name or repository ID.
396 401 :type repoid: str or int
397 402 :param pullrequestid: The pull request ID.
398 403 :type pullrequestid: int
399 404 :param title: Set the pull request title.
400 405 :type title: str
401 406 :param description: Update pull request description.
402 407 :type description: Optional(str)
403 408 :type description_renderer: Optional(str)
404 409 :param description_renderer: Update pull request renderer for the description.
405 410 It should be 'rst', 'markdown' or 'plain'
406 411 :param reviewers: Update pull request reviewers list with new value.
407 412 :type reviewers: Optional(list)
408 413 Accepts username strings or objects of the format:
409 414
410 415 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
411 416
412 417 :param update_commits: Trigger update of commits for this pull request
413 418 :type: update_commits: Optional(bool)
414 419
415 420 Example output:
416 421
417 422 .. code-block:: bash
418 423
419 424 id : <id_given_in_input>
420 425 result : {
421 426 "msg": "Updated pull request `63`",
422 427 "pull_request": <pull_request_object>,
423 428 "updated_reviewers": {
424 429 "added": [
425 430 "username"
426 431 ],
427 432 "removed": []
428 433 },
429 434 "updated_commits": {
430 435 "added": [
431 436 "<sha1_hash>"
432 437 ],
433 438 "common": [
434 439 "<sha1_hash>",
435 440 "<sha1_hash>",
436 441 ],
437 442 "removed": []
438 443 }
439 444 }
440 445 error : null
441 446
442 447
@@ -1,1138 +1,1140 b''
1 1 .. _repo-methods-ref:
2 2
3 3 repo methods
4 4 ============
5 5
6 6 add_field_to_repo
7 7 -----------------
8 8
9 9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
10 10
11 11 Adds an extra field to a repository.
12 12
13 13 This command can only be run using an |authtoken| with at least
14 14 write permissions to the |repo|.
15 15
16 16 :param apiuser: This is filled automatically from the |authtoken|.
17 17 :type apiuser: AuthUser
18 18 :param repoid: Set the repository name or repository id.
19 19 :type repoid: str or int
20 20 :param key: Create a unique field key for this repository.
21 21 :type key: str
22 22 :param label:
23 23 :type label: Optional(str)
24 24 :param description:
25 25 :type description: Optional(str)
26 26
27 27
28 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 33 Set a commit comment, and optionally change the status of the commit.
34 34
35 35 :param apiuser: This is filled automatically from the |authtoken|.
36 36 :type apiuser: AuthUser
37 37 :param repoid: Set the repository name or repository ID.
38 38 :type repoid: str or int
39 39 :param commit_id: Specify the commit_id for which to set a comment.
40 40 :type commit_id: str
41 41 :param message: The comment text.
42 42 :type message: str
43 43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
44 44 'approved', 'rejected', 'under_review'
45 45 :type status: str
46 46 :param comment_type: Comment type, one of: 'note', 'todo'
47 47 :type comment_type: Optional(str), default: 'note'
48 48 :param resolves_comment_id: id of comment which this one will resolve
49 49 :type resolves_comment_id: Optional(int)
50 50 :param extra_recipients: list of user ids or usernames to add
51 51 notifications for this comment. Acts like a CC for notification
52 52 :type extra_recipients: Optional(list)
53 53 :param userid: Set the user name of the comment creator.
54 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 58 Example error output:
57 59
58 60 .. code-block:: bash
59 61
60 62 {
61 63 "id" : <id_given_in_input>,
62 64 "result" : {
63 65 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
64 66 "status_change": null or <status>,
65 67 "success": true
66 68 },
67 69 "error" : null
68 70 }
69 71
70 72
71 73 create_repo
72 74 -----------
73 75
74 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 78 Creates a repository.
77 79
78 80 * If the repository name contains "/", repository will be created inside
79 81 a repository group or nested repository groups
80 82
81 83 For example "foo/bar/repo1" will create |repo| called "repo1" inside
82 84 group "foo/bar". You have to have permissions to access and write to
83 85 the last repository group ("bar" in this example)
84 86
85 87 This command can only be run using an |authtoken| with at least
86 88 permissions to create repositories, or write permissions to
87 89 parent repository groups.
88 90
89 91 :param apiuser: This is filled automatically from the |authtoken|.
90 92 :type apiuser: AuthUser
91 93 :param repo_name: Set the repository name.
92 94 :type repo_name: str
93 95 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
94 96 :type repo_type: str
95 97 :param owner: user_id or username
96 98 :type owner: Optional(str)
97 99 :param description: Set the repository description.
98 100 :type description: Optional(str)
99 101 :param private: set repository as private
100 102 :type private: bool
101 103 :param clone_uri: set clone_uri
102 104 :type clone_uri: str
103 105 :param push_uri: set push_uri
104 106 :type push_uri: str
105 107 :param landing_rev: <rev_type>:<rev>, e.g branch:default, book:dev, rev:abcd
106 108 :type landing_rev: str
107 109 :param enable_locking:
108 110 :type enable_locking: bool
109 111 :param enable_downloads:
110 112 :type enable_downloads: bool
111 113 :param enable_statistics:
112 114 :type enable_statistics: bool
113 115 :param copy_permissions: Copy permission from group in which the
114 116 repository is being created.
115 117 :type copy_permissions: bool
116 118
117 119
118 120 Example output:
119 121
120 122 .. code-block:: bash
121 123
122 124 id : <id_given_in_input>
123 125 result: {
124 126 "msg": "Created new repository `<reponame>`",
125 127 "success": true,
126 128 "task": "<celery task id or None if done sync>"
127 129 }
128 130 error: null
129 131
130 132
131 133 Example error output:
132 134
133 135 .. code-block:: bash
134 136
135 137 id : <id_given_in_input>
136 138 result : null
137 139 error : {
138 140 'failed to create repository `<repo_name>`'
139 141 }
140 142
141 143
142 144 delete_repo
143 145 -----------
144 146
145 147 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
146 148
147 149 Deletes a repository.
148 150
149 151 * When the `forks` parameter is set it's possible to detach or delete
150 152 forks of deleted repository.
151 153
152 154 This command can only be run using an |authtoken| with admin
153 155 permissions on the |repo|.
154 156
155 157 :param apiuser: This is filled automatically from the |authtoken|.
156 158 :type apiuser: AuthUser
157 159 :param repoid: Set the repository name or repository ID.
158 160 :type repoid: str or int
159 161 :param forks: Set to `detach` or `delete` forks from the |repo|.
160 162 :type forks: Optional(str)
161 163
162 164 Example error output:
163 165
164 166 .. code-block:: bash
165 167
166 168 id : <id_given_in_input>
167 169 result: {
168 170 "msg": "Deleted repository `<reponame>`",
169 171 "success": true
170 172 }
171 173 error: null
172 174
173 175
174 176 fork_repo
175 177 ---------
176 178
177 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 181 Creates a fork of the specified |repo|.
180 182
181 183 * If the fork_name contains "/", fork will be created inside
182 184 a repository group or nested repository groups
183 185
184 186 For example "foo/bar/fork-repo" will create fork called "fork-repo"
185 187 inside group "foo/bar". You have to have permissions to access and
186 188 write to the last repository group ("bar" in this example)
187 189
188 190 This command can only be run using an |authtoken| with minimum
189 191 read permissions of the forked repo, create fork permissions for an user.
190 192
191 193 :param apiuser: This is filled automatically from the |authtoken|.
192 194 :type apiuser: AuthUser
193 195 :param repoid: Set repository name or repository ID.
194 196 :type repoid: str or int
195 197 :param fork_name: Set the fork name, including it's repository group membership.
196 198 :type fork_name: str
197 199 :param owner: Set the fork owner.
198 200 :type owner: str
199 201 :param description: Set the fork description.
200 202 :type description: str
201 203 :param copy_permissions: Copy permissions from parent |repo|. The
202 204 default is False.
203 205 :type copy_permissions: bool
204 206 :param private: Make the fork private. The default is False.
205 207 :type private: bool
206 208 :param landing_rev: Set the landing revision. E.g branch:default, book:dev, rev:abcd
207 209
208 210 Example output:
209 211
210 212 .. code-block:: bash
211 213
212 214 id : <id_for_response>
213 215 api_key : "<api_key>"
214 216 args: {
215 217 "repoid" : "<reponame or repo_id>",
216 218 "fork_name": "<forkname>",
217 219 "owner": "<username or user_id = Optional(=apiuser)>",
218 220 "description": "<description>",
219 221 "copy_permissions": "<bool>",
220 222 "private": "<bool>",
221 223 "landing_rev": "<landing_rev>"
222 224 }
223 225
224 226 Example error output:
225 227
226 228 .. code-block:: bash
227 229
228 230 id : <id_given_in_input>
229 231 result: {
230 232 "msg": "Created fork of `<reponame>` as `<forkname>`",
231 233 "success": true,
232 234 "task": "<celery task id or None if done sync>"
233 235 }
234 236 error: null
235 237
236 238
237 239 get_repo
238 240 --------
239 241
240 242 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
241 243
242 244 Gets an existing repository by its name or repository_id.
243 245
244 246 The members section so the output returns users groups or users
245 247 associated with that repository.
246 248
247 249 This command can only be run using an |authtoken| with admin rights,
248 250 or users with at least read rights to the |repo|.
249 251
250 252 :param apiuser: This is filled automatically from the |authtoken|.
251 253 :type apiuser: AuthUser
252 254 :param repoid: The repository name or repository id.
253 255 :type repoid: str or int
254 256 :param cache: use the cached value for last changeset
255 257 :type: cache: Optional(bool)
256 258
257 259 Example output:
258 260
259 261 .. code-block:: bash
260 262
261 263 {
262 264 "error": null,
263 265 "id": <repo_id>,
264 266 "result": {
265 267 "clone_uri": null,
266 268 "created_on": "timestamp",
267 269 "description": "repo description",
268 270 "enable_downloads": false,
269 271 "enable_locking": false,
270 272 "enable_statistics": false,
271 273 "followers": [
272 274 {
273 275 "active": true,
274 276 "admin": false,
275 277 "api_key": "****************************************",
276 278 "api_keys": [
277 279 "****************************************"
278 280 ],
279 281 "email": "user@example.com",
280 282 "emails": [
281 283 "user@example.com"
282 284 ],
283 285 "extern_name": "rhodecode",
284 286 "extern_type": "rhodecode",
285 287 "firstname": "username",
286 288 "ip_addresses": [],
287 289 "language": null,
288 290 "last_login": "2015-09-16T17:16:35.854",
289 291 "lastname": "surname",
290 292 "user_id": <user_id>,
291 293 "username": "name"
292 294 }
293 295 ],
294 296 "fork_of": "parent-repo",
295 297 "landing_rev": [
296 298 "rev",
297 299 "tip"
298 300 ],
299 301 "last_changeset": {
300 302 "author": "User <user@example.com>",
301 303 "branch": "default",
302 304 "date": "timestamp",
303 305 "message": "last commit message",
304 306 "parents": [
305 307 {
306 308 "raw_id": "commit-id"
307 309 }
308 310 ],
309 311 "raw_id": "commit-id",
310 312 "revision": <revision number>,
311 313 "short_id": "short id"
312 314 },
313 315 "lock_reason": null,
314 316 "locked_by": null,
315 317 "locked_date": null,
316 318 "owner": "owner-name",
317 319 "permissions": [
318 320 {
319 321 "name": "super-admin-name",
320 322 "origin": "super-admin",
321 323 "permission": "repository.admin",
322 324 "type": "user"
323 325 },
324 326 {
325 327 "name": "owner-name",
326 328 "origin": "owner",
327 329 "permission": "repository.admin",
328 330 "type": "user"
329 331 },
330 332 {
331 333 "name": "user-group-name",
332 334 "origin": "permission",
333 335 "permission": "repository.write",
334 336 "type": "user_group"
335 337 }
336 338 ],
337 339 "private": true,
338 340 "repo_id": 676,
339 341 "repo_name": "user-group/repo-name",
340 342 "repo_type": "hg"
341 343 }
342 344 }
343 345
344 346
345 347 get_repo_changeset
346 348 ------------------
347 349
348 350 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
349 351
350 352 Returns information about a changeset.
351 353
352 354 Additionally parameters define the amount of details returned by
353 355 this function.
354 356
355 357 This command can only be run using an |authtoken| with admin rights,
356 358 or users with at least read rights to the |repo|.
357 359
358 360 :param apiuser: This is filled automatically from the |authtoken|.
359 361 :type apiuser: AuthUser
360 362 :param repoid: The repository name or repository id
361 363 :type repoid: str or int
362 364 :param revision: revision for which listing should be done
363 365 :type revision: str
364 366 :param details: details can be 'basic|extended|full' full gives diff
365 367 info details like the diff itself, and number of changed files etc.
366 368 :type details: Optional(str)
367 369
368 370
369 371 get_repo_changesets
370 372 -------------------
371 373
372 374 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
373 375
374 376 Returns a set of commits limited by the number starting
375 377 from the `start_rev` option.
376 378
377 379 Additional parameters define the amount of details returned by this
378 380 function.
379 381
380 382 This command can only be run using an |authtoken| with admin rights,
381 383 or users with at least read rights to |repos|.
382 384
383 385 :param apiuser: This is filled automatically from the |authtoken|.
384 386 :type apiuser: AuthUser
385 387 :param repoid: The repository name or repository ID.
386 388 :type repoid: str or int
387 389 :param start_rev: The starting revision from where to get changesets.
388 390 :type start_rev: str
389 391 :param limit: Limit the number of commits to this amount
390 392 :type limit: str or int
391 393 :param details: Set the level of detail returned. Valid option are:
392 394 ``basic``, ``extended`` and ``full``.
393 395 :type details: Optional(str)
394 396
395 397 .. note::
396 398
397 399 Setting the parameter `details` to the value ``full`` is extensive
398 400 and returns details like the diff itself, and the number
399 401 of changed files.
400 402
401 403
402 404 get_repo_comments
403 405 -----------------
404 406
405 407 .. py:function:: get_repo_comments(apiuser, repoid, commit_id=<Optional:None>, comment_type=<Optional:None>, userid=<Optional:None>)
406 408
407 409 Get all comments for a repository
408 410
409 411 :param apiuser: This is filled automatically from the |authtoken|.
410 412 :type apiuser: AuthUser
411 413 :param repoid: Set the repository name or repository ID.
412 414 :type repoid: str or int
413 415 :param commit_id: Optionally filter the comments by the commit_id
414 416 :type commit_id: Optional(str), default: None
415 417 :param comment_type: Optionally filter the comments by the comment_type
416 418 one of: 'note', 'todo'
417 419 :type comment_type: Optional(str), default: None
418 420 :param userid: Optionally filter the comments by the author of comment
419 421 :type userid: Optional(str or int), Default: None
420 422
421 423 Example error output:
422 424
423 425 .. code-block:: bash
424 426
425 427 {
426 428 "id" : <id_given_in_input>,
427 429 "result" : [
428 430 {
429 431 "comment_author": <USER_DETAILS>,
430 432 "comment_created_on": "2017-02-01T14:38:16.309",
431 433 "comment_f_path": "file.txt",
432 434 "comment_id": 282,
433 435 "comment_lineno": "n1",
434 436 "comment_resolved_by": null,
435 437 "comment_status": [],
436 438 "comment_text": "This file needs a header",
437 439 "comment_type": "todo"
438 440 }
439 441 ],
440 442 "error" : null
441 443 }
442 444
443 445
444 446 get_repo_file
445 447 -------------
446 448
447 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 451 Returns a single file from repository at given revision.
450 452
451 453 This command can only be run using an |authtoken| with admin rights,
452 454 or users with at least read rights to |repos|.
453 455
454 456 :param apiuser: This is filled automatically from the |authtoken|.
455 457 :type apiuser: AuthUser
456 458 :param repoid: The repository name or repository ID.
457 459 :type repoid: str or int
458 460 :param commit_id: The revision for which listing should be done.
459 461 :type commit_id: str
460 462 :param file_path: The path from which to start displaying.
461 463 :type file_path: str
462 464 :param details: Returns different set of information about nodes.
463 465 The valid options are ``minimal`` ``basic`` and ``full``.
464 466 :type details: Optional(str)
465 467 :param max_file_bytes: Only return file content under this file size bytes
466 468 :type max_file_bytes: Optional(int)
467 469 :param cache: Use internal caches for fetching files. If disabled fetching
468 470 files is slower but more memory efficient
469 471 :type cache: Optional(bool)
470 472
471 473 Example output:
472 474
473 475 .. code-block:: bash
474 476
475 477 id : <id_given_in_input>
476 478 result: {
477 479 "binary": false,
478 480 "extension": "py",
479 481 "lines": 35,
480 482 "content": "....",
481 483 "md5": "76318336366b0f17ee249e11b0c99c41",
482 484 "mimetype": "text/x-python",
483 485 "name": "python.py",
484 486 "size": 817,
485 487 "type": "file",
486 488 }
487 489 error: null
488 490
489 491
490 492 get_repo_fts_tree
491 493 -----------------
492 494
493 495 .. py:function:: get_repo_fts_tree(apiuser, repoid, commit_id, root_path)
494 496
495 497 Returns a list of tree nodes for path at given revision. This api is built
496 498 strictly for usage in full text search building, and shouldn't be consumed
497 499
498 500 This command can only be run using an |authtoken| with admin rights,
499 501 or users with at least read rights to |repos|.
500 502
501 503
502 504 get_repo_nodes
503 505 --------------
504 506
505 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 509 Returns a list of nodes and children in a flat list for a given
508 510 path at given revision.
509 511
510 512 It's possible to specify ret_type to show only `files` or `dirs`.
511 513
512 514 This command can only be run using an |authtoken| with admin rights,
513 515 or users with at least read rights to |repos|.
514 516
515 517 :param apiuser: This is filled automatically from the |authtoken|.
516 518 :type apiuser: AuthUser
517 519 :param repoid: The repository name or repository ID.
518 520 :type repoid: str or int
519 521 :param revision: The revision for which listing should be done.
520 522 :type revision: str
521 523 :param root_path: The path from which to start displaying.
522 524 :type root_path: str
523 525 :param ret_type: Set the return type. Valid options are
524 526 ``all`` (default), ``files`` and ``dirs``.
525 527 :type ret_type: Optional(str)
526 528 :param details: Returns extended information about nodes, such as
527 529 md5, binary, and or content.
528 530 The valid options are ``basic`` and ``full``.
529 531 :type details: Optional(str)
530 532 :param max_file_bytes: Only return file content under this file size bytes
531 533 :type details: Optional(int)
532 534
533 535 Example output:
534 536
535 537 .. code-block:: bash
536 538
537 539 id : <id_given_in_input>
538 540 result: [
539 541 {
540 542 "binary": false,
541 543 "content": "File line",
542 544 "extension": "md",
543 545 "lines": 2,
544 546 "md5": "059fa5d29b19c0657e384749480f6422",
545 547 "mimetype": "text/x-minidsrc",
546 548 "name": "file.md",
547 549 "size": 580,
548 550 "type": "file"
549 551 },
550 552 ...
551 553 ]
552 554 error: null
553 555
554 556
555 557 get_repo_refs
556 558 -------------
557 559
558 560 .. py:function:: get_repo_refs(apiuser, repoid)
559 561
560 562 Returns a dictionary of current references. It returns
561 563 bookmarks, branches, closed_branches, and tags for given repository
562 564
563 565 It's possible to specify ret_type to show only `files` or `dirs`.
564 566
565 567 This command can only be run using an |authtoken| with admin rights,
566 568 or users with at least read rights to |repos|.
567 569
568 570 :param apiuser: This is filled automatically from the |authtoken|.
569 571 :type apiuser: AuthUser
570 572 :param repoid: The repository name or repository ID.
571 573 :type repoid: str or int
572 574
573 575 Example output:
574 576
575 577 .. code-block:: bash
576 578
577 579 id : <id_given_in_input>
578 580 "result": {
579 581 "bookmarks": {
580 582 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
581 583 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
582 584 },
583 585 "branches": {
584 586 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
585 587 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
586 588 },
587 589 "branches_closed": {},
588 590 "tags": {
589 591 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
590 592 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
591 593 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
592 594 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
593 595 }
594 596 }
595 597 error: null
596 598
597 599
598 600 get_repo_settings
599 601 -----------------
600 602
601 603 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
602 604
603 605 Returns all settings for a repository. If key is given it only returns the
604 606 setting identified by the key or null.
605 607
606 608 :param apiuser: This is filled automatically from the |authtoken|.
607 609 :type apiuser: AuthUser
608 610 :param repoid: The repository name or repository id.
609 611 :type repoid: str or int
610 612 :param key: Key of the setting to return.
611 613 :type: key: Optional(str)
612 614
613 615 Example output:
614 616
615 617 .. code-block:: bash
616 618
617 619 {
618 620 "error": null,
619 621 "id": 237,
620 622 "result": {
621 623 "extensions_largefiles": true,
622 624 "extensions_evolve": true,
623 625 "hooks_changegroup_push_logger": true,
624 626 "hooks_changegroup_repo_size": false,
625 627 "hooks_outgoing_pull_logger": true,
626 628 "phases_publish": "True",
627 629 "rhodecode_hg_use_rebase_for_merging": true,
628 630 "rhodecode_pr_merge_enabled": true,
629 631 "rhodecode_use_outdated_comments": true
630 632 }
631 633 }
632 634
633 635
634 636 get_repos
635 637 ---------
636 638
637 639 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
638 640
639 641 Lists all existing repositories.
640 642
641 643 This command can only be run using an |authtoken| with admin rights,
642 644 or users with at least read rights to |repos|.
643 645
644 646 :param apiuser: This is filled automatically from the |authtoken|.
645 647 :type apiuser: AuthUser
646 648 :param root: specify root repository group to fetch repositories.
647 649 filters the returned repositories to be members of given root group.
648 650 :type root: Optional(None)
649 651 :param traverse: traverse given root into subrepositories. With this flag
650 652 set to False, it will only return top-level repositories from `root`.
651 653 if root is empty it will return just top-level repositories.
652 654 :type traverse: Optional(True)
653 655
654 656
655 657 Example output:
656 658
657 659 .. code-block:: bash
658 660
659 661 id : <id_given_in_input>
660 662 result: [
661 663 {
662 664 "repo_id" : "<repo_id>",
663 665 "repo_name" : "<reponame>"
664 666 "repo_type" : "<repo_type>",
665 667 "clone_uri" : "<clone_uri>",
666 668 "private": : "<bool>",
667 669 "created_on" : "<datetimecreated>",
668 670 "description" : "<description>",
669 671 "landing_rev": "<landing_rev>",
670 672 "owner": "<repo_owner>",
671 673 "fork_of": "<name_of_fork_parent>",
672 674 "enable_downloads": "<bool>",
673 675 "enable_locking": "<bool>",
674 676 "enable_statistics": "<bool>",
675 677 },
676 678 ...
677 679 ]
678 680 error: null
679 681
680 682
681 683 grant_user_group_permission
682 684 ---------------------------
683 685
684 686 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
685 687
686 688 Grant permission for a user group on the specified repository,
687 689 or update existing permissions.
688 690
689 691 This command can only be run using an |authtoken| with admin
690 692 permissions on the |repo|.
691 693
692 694 :param apiuser: This is filled automatically from the |authtoken|.
693 695 :type apiuser: AuthUser
694 696 :param repoid: Set the repository name or repository ID.
695 697 :type repoid: str or int
696 698 :param usergroupid: Specify the ID of the user group.
697 699 :type usergroupid: str or int
698 700 :param perm: Set the user group permissions using the following
699 701 format: (repository.(none|read|write|admin))
700 702 :type perm: str
701 703
702 704 Example output:
703 705
704 706 .. code-block:: bash
705 707
706 708 id : <id_given_in_input>
707 709 result : {
708 710 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
709 711 "success": true
710 712
711 713 }
712 714 error : null
713 715
714 716 Example error output:
715 717
716 718 .. code-block:: bash
717 719
718 720 id : <id_given_in_input>
719 721 result : null
720 722 error : {
721 723 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
722 724 }
723 725
724 726
725 727 grant_user_permission
726 728 ---------------------
727 729
728 730 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
729 731
730 732 Grant permissions for the specified user on the given repository,
731 733 or update existing permissions if found.
732 734
733 735 This command can only be run using an |authtoken| with admin
734 736 permissions on the |repo|.
735 737
736 738 :param apiuser: This is filled automatically from the |authtoken|.
737 739 :type apiuser: AuthUser
738 740 :param repoid: Set the repository name or repository ID.
739 741 :type repoid: str or int
740 742 :param userid: Set the user name.
741 743 :type userid: str
742 744 :param perm: Set the user permissions, using the following format
743 745 ``(repository.(none|read|write|admin))``
744 746 :type perm: str
745 747
746 748 Example output:
747 749
748 750 .. code-block:: bash
749 751
750 752 id : <id_given_in_input>
751 753 result: {
752 754 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
753 755 "success": true
754 756 }
755 757 error: null
756 758
757 759
758 760 invalidate_cache
759 761 ----------------
760 762
761 763 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
762 764
763 765 Invalidates the cache for the specified repository.
764 766
765 767 This command can only be run using an |authtoken| with admin rights to
766 768 the specified repository.
767 769
768 770 This command takes the following options:
769 771
770 772 :param apiuser: This is filled automatically from |authtoken|.
771 773 :type apiuser: AuthUser
772 774 :param repoid: Sets the repository name or repository ID.
773 775 :type repoid: str or int
774 776 :param delete_keys: This deletes the invalidated keys instead of
775 777 just flagging them.
776 778 :type delete_keys: Optional(``True`` | ``False``)
777 779
778 780 Example output:
779 781
780 782 .. code-block:: bash
781 783
782 784 id : <id_given_in_input>
783 785 result : {
784 786 'msg': Cache for repository `<repository name>` was invalidated,
785 787 'repository': <repository name>
786 788 }
787 789 error : null
788 790
789 791 Example error output:
790 792
791 793 .. code-block:: bash
792 794
793 795 id : <id_given_in_input>
794 796 result : null
795 797 error : {
796 798 'Error occurred during cache invalidation action'
797 799 }
798 800
799 801
800 802 lock
801 803 ----
802 804
803 805 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
804 806
805 807 Sets the lock state of the specified |repo| by the given user.
806 808 From more information, see :ref:`repo-locking`.
807 809
808 810 * If the ``userid`` option is not set, the repository is locked to the
809 811 user who called the method.
810 812 * If the ``locked`` parameter is not set, the current lock state of the
811 813 repository is displayed.
812 814
813 815 This command can only be run using an |authtoken| with admin rights to
814 816 the specified repository.
815 817
816 818 This command takes the following options:
817 819
818 820 :param apiuser: This is filled automatically from the |authtoken|.
819 821 :type apiuser: AuthUser
820 822 :param repoid: Sets the repository name or repository ID.
821 823 :type repoid: str or int
822 824 :param locked: Sets the lock state.
823 825 :type locked: Optional(``True`` | ``False``)
824 826 :param userid: Set the repository lock to this user.
825 827 :type userid: Optional(str or int)
826 828
827 829 Example error output:
828 830
829 831 .. code-block:: bash
830 832
831 833 id : <id_given_in_input>
832 834 result : {
833 835 'repo': '<reponame>',
834 836 'locked': <bool: lock state>,
835 837 'locked_since': <int: lock timestamp>,
836 838 'locked_by': <username of person who made the lock>,
837 839 'lock_reason': <str: reason for locking>,
838 840 'lock_state_changed': <bool: True if lock state has been changed in this request>,
839 841 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
840 842 or
841 843 'msg': 'Repo `<repository name>` not locked.'
842 844 or
843 845 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
844 846 }
845 847 error : null
846 848
847 849 Example error output:
848 850
849 851 .. code-block:: bash
850 852
851 853 id : <id_given_in_input>
852 854 result : null
853 855 error : {
854 856 'Error occurred locking repository `<reponame>`'
855 857 }
856 858
857 859
858 860 maintenance
859 861 -----------
860 862
861 863 .. py:function:: maintenance(apiuser, repoid)
862 864
863 865 Triggers a maintenance on the given repository.
864 866
865 867 This command can only be run using an |authtoken| with admin
866 868 rights to the specified repository. For more information,
867 869 see :ref:`config-token-ref`.
868 870
869 871 This command takes the following options:
870 872
871 873 :param apiuser: This is filled automatically from the |authtoken|.
872 874 :type apiuser: AuthUser
873 875 :param repoid: The repository name or repository ID.
874 876 :type repoid: str or int
875 877
876 878 Example output:
877 879
878 880 .. code-block:: bash
879 881
880 882 id : <id_given_in_input>
881 883 result : {
882 884 "msg": "executed maintenance command",
883 885 "executed_actions": [
884 886 <action_message>, <action_message2>...
885 887 ],
886 888 "repository": "<repository name>"
887 889 }
888 890 error : null
889 891
890 892 Example error output:
891 893
892 894 .. code-block:: bash
893 895
894 896 id : <id_given_in_input>
895 897 result : null
896 898 error : {
897 899 "Unable to execute maintenance on `<reponame>`"
898 900 }
899 901
900 902
901 903 pull
902 904 ----
903 905
904 906 .. py:function:: pull(apiuser, repoid, remote_uri=<Optional:None>)
905 907
906 908 Triggers a pull on the given repository from a remote location. You
907 909 can use this to keep remote repositories up-to-date.
908 910
909 911 This command can only be run using an |authtoken| with admin
910 912 rights to the specified repository. For more information,
911 913 see :ref:`config-token-ref`.
912 914
913 915 This command takes the following options:
914 916
915 917 :param apiuser: This is filled automatically from the |authtoken|.
916 918 :type apiuser: AuthUser
917 919 :param repoid: The repository name or repository ID.
918 920 :type repoid: str or int
919 921 :param remote_uri: Optional remote URI to pass in for pull
920 922 :type remote_uri: str
921 923
922 924 Example output:
923 925
924 926 .. code-block:: bash
925 927
926 928 id : <id_given_in_input>
927 929 result : {
928 930 "msg": "Pulled from url `<remote_url>` on repo `<repository name>`"
929 931 "repository": "<repository name>"
930 932 }
931 933 error : null
932 934
933 935 Example error output:
934 936
935 937 .. code-block:: bash
936 938
937 939 id : <id_given_in_input>
938 940 result : null
939 941 error : {
940 942 "Unable to push changes from `<remote_url>`"
941 943 }
942 944
943 945
944 946 remove_field_from_repo
945 947 ----------------------
946 948
947 949 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
948 950
949 951 Removes an extra field from a repository.
950 952
951 953 This command can only be run using an |authtoken| with at least
952 954 write permissions to the |repo|.
953 955
954 956 :param apiuser: This is filled automatically from the |authtoken|.
955 957 :type apiuser: AuthUser
956 958 :param repoid: Set the repository name or repository ID.
957 959 :type repoid: str or int
958 960 :param key: Set the unique field key for this repository.
959 961 :type key: str
960 962
961 963
962 964 revoke_user_group_permission
963 965 ----------------------------
964 966
965 967 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
966 968
967 969 Revoke the permissions of a user group on a given repository.
968 970
969 971 This command can only be run using an |authtoken| with admin
970 972 permissions on the |repo|.
971 973
972 974 :param apiuser: This is filled automatically from the |authtoken|.
973 975 :type apiuser: AuthUser
974 976 :param repoid: Set the repository name or repository ID.
975 977 :type repoid: str or int
976 978 :param usergroupid: Specify the user group ID.
977 979 :type usergroupid: str or int
978 980
979 981 Example output:
980 982
981 983 .. code-block:: bash
982 984
983 985 id : <id_given_in_input>
984 986 result: {
985 987 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
986 988 "success": true
987 989 }
988 990 error: null
989 991
990 992
991 993 revoke_user_permission
992 994 ----------------------
993 995
994 996 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
995 997
996 998 Revoke permission for a user on the specified repository.
997 999
998 1000 This command can only be run using an |authtoken| with admin
999 1001 permissions on the |repo|.
1000 1002
1001 1003 :param apiuser: This is filled automatically from the |authtoken|.
1002 1004 :type apiuser: AuthUser
1003 1005 :param repoid: Set the repository name or repository ID.
1004 1006 :type repoid: str or int
1005 1007 :param userid: Set the user name of revoked user.
1006 1008 :type userid: str or int
1007 1009
1008 1010 Example error output:
1009 1011
1010 1012 .. code-block:: bash
1011 1013
1012 1014 id : <id_given_in_input>
1013 1015 result: {
1014 1016 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
1015 1017 "success": true
1016 1018 }
1017 1019 error: null
1018 1020
1019 1021
1020 1022 set_repo_settings
1021 1023 -----------------
1022 1024
1023 1025 .. py:function:: set_repo_settings(apiuser, repoid, settings)
1024 1026
1025 1027 Update repository settings. Returns true on success.
1026 1028
1027 1029 :param apiuser: This is filled automatically from the |authtoken|.
1028 1030 :type apiuser: AuthUser
1029 1031 :param repoid: The repository name or repository id.
1030 1032 :type repoid: str or int
1031 1033 :param settings: The new settings for the repository.
1032 1034 :type: settings: dict
1033 1035
1034 1036 Example output:
1035 1037
1036 1038 .. code-block:: bash
1037 1039
1038 1040 {
1039 1041 "error": null,
1040 1042 "id": 237,
1041 1043 "result": true
1042 1044 }
1043 1045
1044 1046
1045 1047 strip
1046 1048 -----
1047 1049
1048 1050 .. py:function:: strip(apiuser, repoid, revision, branch)
1049 1051
1050 1052 Strips the given revision from the specified repository.
1051 1053
1052 1054 * This will remove the revision and all of its decendants.
1053 1055
1054 1056 This command can only be run using an |authtoken| with admin rights to
1055 1057 the specified repository.
1056 1058
1057 1059 This command takes the following options:
1058 1060
1059 1061 :param apiuser: This is filled automatically from the |authtoken|.
1060 1062 :type apiuser: AuthUser
1061 1063 :param repoid: The repository name or repository ID.
1062 1064 :type repoid: str or int
1063 1065 :param revision: The revision you wish to strip.
1064 1066 :type revision: str
1065 1067 :param branch: The branch from which to strip the revision.
1066 1068 :type branch: str
1067 1069
1068 1070 Example output:
1069 1071
1070 1072 .. code-block:: bash
1071 1073
1072 1074 id : <id_given_in_input>
1073 1075 result : {
1074 1076 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
1075 1077 "repository": "<repository name>"
1076 1078 }
1077 1079 error : null
1078 1080
1079 1081 Example error output:
1080 1082
1081 1083 .. code-block:: bash
1082 1084
1083 1085 id : <id_given_in_input>
1084 1086 result : null
1085 1087 error : {
1086 1088 "Unable to strip commit <commit_hash> from repo `<repository name>`"
1087 1089 }
1088 1090
1089 1091
1090 1092 update_repo
1091 1093 -----------
1092 1094
1093 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 1097 Updates a repository with the given information.
1096 1098
1097 1099 This command can only be run using an |authtoken| with at least
1098 1100 admin permissions to the |repo|.
1099 1101
1100 1102 * If the repository name contains "/", repository will be updated
1101 1103 accordingly with a repository group or nested repository groups
1102 1104
1103 1105 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1104 1106 called "repo-test" and place it inside group "foo/bar".
1105 1107 You have to have permissions to access and write to the last repository
1106 1108 group ("bar" in this example)
1107 1109
1108 1110 :param apiuser: This is filled automatically from the |authtoken|.
1109 1111 :type apiuser: AuthUser
1110 1112 :param repoid: repository name or repository ID.
1111 1113 :type repoid: str or int
1112 1114 :param repo_name: Update the |repo| name, including the
1113 1115 repository group it's in.
1114 1116 :type repo_name: str
1115 1117 :param owner: Set the |repo| owner.
1116 1118 :type owner: str
1117 1119 :param fork_of: Set the |repo| as fork of another |repo|.
1118 1120 :type fork_of: str
1119 1121 :param description: Update the |repo| description.
1120 1122 :type description: str
1121 1123 :param private: Set the |repo| as private. (True | False)
1122 1124 :type private: bool
1123 1125 :param clone_uri: Update the |repo| clone URI.
1124 1126 :type clone_uri: str
1125 1127 :param landing_rev: Set the |repo| landing revision. e.g branch:default, book:dev, rev:abcd
1126 1128 :type landing_rev: str
1127 1129 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1128 1130 :type enable_statistics: bool
1129 1131 :param enable_locking: Enable |repo| locking.
1130 1132 :type enable_locking: bool
1131 1133 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1132 1134 :type enable_downloads: bool
1133 1135 :param fields: Add extra fields to the |repo|. Use the following
1134 1136 example format: ``field_key=field_val,field_key2=fieldval2``.
1135 1137 Escape ', ' with \,
1136 1138 :type fields: str
1137 1139
1138 1140
@@ -1,41 +1,56 b''
1 1 .. _search-methods-ref:
2 2
3 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 21 search
7 22 ------
8 23
9 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 26 Fetch Full Text Search results using API.
12 27
13 28 :param apiuser: This is filled automatically from the |authtoken|.
14 29 :type apiuser: AuthUser
15 30 :param search_query: Search query.
16 31 :type search_query: str
17 32 :param search_type: Search type. The following are valid options:
18 33 * commit
19 34 * content
20 35 * path
21 36 :type search_type: str
22 37 :param page_limit: Page item limit, from 1 to 500. Default 10 items.
23 38 :type page_limit: Optional(int)
24 39 :param page: Page number. Default first page.
25 40 :type page: Optional(int)
26 41 :param search_sort: Search sort order.Must start with asc: or desc: Default desc:date.
27 42 The following are valid options:
28 43 * asc|desc:message.raw
29 44 * asc|desc:date
30 45 * asc|desc:author.email.raw
31 46 * asc|desc:message.raw
32 47 * newfirst (old legacy equal to desc:date)
33 48 * oldfirst (old legacy equal to asc:date)
34 49
35 50 :type search_sort: Optional(str)
36 51 :param repo_name: Filter by one repo. Default is all.
37 52 :type repo_name: Optional(str)
38 53 :param repo_group_name: Filter by one repo group. Default is all.
39 54 :type repo_group_name: Optional(str)
40 55
41 56
@@ -1,160 +1,160 b''
1 1 .. _config-ldap-groups-ref:
2 2
3 3 LDAP/AD With User Groups Sync
4 4 -----------------------------
5 5
6 6 **This plugin is available only in EE Edition.**
7 7
8 8 |RCE| supports LDAP (Lightweight Directory Access Protocol) or
9 9 AD (active Directory) authentication.
10 10 All LDAP versions are currently supported.
11 11
12 12 RhodeCode reads all data defined from plugin and creates corresponding
13 13 accounts on local database after receiving data from LDAP. This is done on
14 14 every user log-in including operations like pushing/pulling/checkout.
15 15 In addition group membership is read from LDAP and following operations are done:
16 16
17 17 - automatic addition of user to |RCE| user group
18 18 - automatic removal of user from any other |RCE| user groups not specified in LDAP.
19 19 The removal is done *only* on groups that are marked to be synced from ldap.
20 20 This setting can be changed in advanced settings on user groups
21 21 - automatic creation of user groups if they aren't yet existing in |RCE|
22 22 - marking user as super-admins if he is a member of any admin group defined in plugin settings
23 23
24 24
25 25 .. important::
26 26
27 27 The email used with your |RCE| super-admin account needs to match the email
28 28 address attached to your admin profile in LDAP. This is because
29 29 within |RCE| the user email needs to be unique, and multiple users
30 30 cannot share an email account.
31 31
32 32 Likewise, if as an admin you also have a user account, the email address
33 33 attached to the user account needs to be different.
34 34
35 35
36 36 LDAP Configuration Steps
37 37 ^^^^^^^^^^^^^^^^^^^^^^^^
38 38
39 39 To configure |LDAP|, use the following steps:
40 40
41 41 1. From the |RCE| interface, select
42 42 :menuselection:`Admin --> Authentication`
43 43 2. Activate the `LDAP + User Groups` plugin and select :guilabel:`Save`
44 44 3. Go to newly available menu option called `LDAP + User Groups` on the left side.
45 45 4. Check the `enabled` check box in the plugin configuration section,
46 46 and fill in the required LDAP information and :guilabel:`Save`, for more details,
47 47 see :ref:`config-ldap-groups-examples`
48 48
49 49 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
50 50
51 51 .. _config-ldap-groups-examples:
52 52
53 53 Example LDAP configuration
54 54 ^^^^^^^^^^^^^^^^^^^^^^^^^^
55 55
56 56 Below is example setup that can be used with Active Directory and LDAP server with groups sync::
57 57
58 58 *option*: `enabled` => `True`
59 59 # Enable or disable this authentication plugin.
60 60
61 61 *option*: `cache_ttl` => `360`
62 62 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
63 63 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
64 64
65 65 *option*: `host` => `192.168.245.143,192.168.1.240`
66 66 # Host[s] of the LDAP Server
67 67 # (e.g., 192.168.2.154, or ldap-server.domain.com.
68 68 # Multiple servers can be specified using commas
69 69
70 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 73 *option*: `timeout` => `300`
74 74 # Timeout for LDAP connection
75 75
76 76 *option*: `dn_user` => `Administrator@rhodecode.com`
77 77 # Optional user DN/account to connect to LDAP if authentication is required.
78 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 80 *option*: `dn_pass` => `SomeSecret`
81 81 # Password to authenticate for given user DN.
82 82
83 83 *option*: `tls_kind` => `PLAIN`
84 84 # TLS Type
85 85
86 86 *option*: `tls_reqcert` => `NEVER`
87 87 # Require Cert over TLS?. Self-signed and custom certificates can be used when
88 88 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
89 89
90 90 *option*: `tls_cert_file` => ``
91 91 # This specifies the PEM-format file path containing certificates for use in TLS connection.
92 92 # If not specified `TLS Cert dir` will be used
93 93
94 94 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
95 95 # This specifies the path of a directory that contains individual CA certificates in separate files.
96 96
97 97 *option*: `base_dn` => `dc=rhodecode,dc=com`
98 98 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
99 99 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
100 100
101 101 *option*: `user_search_base` => `ou=RC-Users`
102 102 # User search base will extend the Base DN
103 103 # (e.g., ou=Users will result in ou=Users,dc=mydomain,dc=com root DN)
104 104
105 105 *option*: `user_search_filter` => ``
106 106 # Filter to narrow results
107 107 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
108 108 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
109 109
110 110 *option*: `search_scope` => `SUBTREE`
111 111 # How deep to search LDAP. If unsure set to SUBTREE
112 112
113 113 *option*: `attr_login` => `sAMAccountName`
114 114 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
115 115
116 116 *option*: `attr_email` => `mail`
117 117 # LDAP Attribute to map to email address (e.g., mail).
118 118 # Emails are a crucial part of RhodeCode.
119 119 # If possible add a valid email attribute to ldap users.
120 120
121 121 *option*: `attr_firstname` => `givenName`
122 122 # LDAP Attribute to map to first name (e.g., givenName)
123 123
124 124 *option*: `attr_lastname` => `sn`
125 125 # LDAP Attribute to map to last name (e.g., sn)
126 126
127 127 *option*: `group_extraction_type` => `rfc2307bis`
128 128 # With rfc2307, group members are listed by name in the memberUid attribute
129 129 # With rfc2307bis (Microsoft AD compatible) group members are listed by DN and stored in the member attribute
130 130
131 131 *option*: `group_search_base` => `ou=RC-Groups`
132 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 134 *option*: `group_name_attr` => `sAMAccountName`
135 135 # LDAP Attribute to map to group name (e.g., cn, or sAMAccountName)
136 136
137 137 *option*: `user_member_of` => `memberOf`
138 138 # Users Attribute used to fetch the group membership.
139 139 # Use if users have stored group membership inside their attributes
140 140 # (e.g., memberOf, or userMemberOf)
141 141
142 142 *option*: `group_search_filter` => ``
143 143 # Filter to narrow results (e.g., (&(objectCategory=Group)(objectClass=group)), etc)
144 144
145 145 *option*: `group_member_of` => `memberOf`
146 146 # LDAP Attribute used to resolve the parent group (e.g., memberOf)
147 147
148 148 *option*: `admin_groups` => `Admins,Management`
149 149 # A comma separated list of group names that identify users as RhodeCode Administrators (e.g., admins)
150 150
151 151 *option*: `admin_groups_sync` => `full`
152 152 # Way to sync Admin groups.
153 153 # Full means admin flag is set to on or off according to membership in administrator group defined above.
154 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 157 .. toctree::
158 158
159 159 ldap-active-directory
160 160 ldap-authentication No newline at end of file
@@ -1,117 +1,117 b''
1 1 .. _config-ldap-ref:
2 2
3 3 LDAP/AD
4 4 -------
5 5
6 6 |RCE| supports LDAP (Lightweight Directory Access Protocol) or
7 7 AD (active Directory) authentication.
8 8 All LDAP versions are currently supported.
9 9
10 10 RhodeCode reads all data defined from plugin and creates corresponding
11 11 accounts on local database after receiving data from LDAP. This is done on
12 12 every user log-in including operations like pushing/pulling/checkout.
13 13
14 14
15 15 .. important::
16 16
17 17 The email used with your |RCE| super-admin account needs to match the email
18 18 address attached to your admin profile in LDAP. This is because
19 19 within |RCE| the user email needs to be unique, and multiple users
20 20 cannot share an email account.
21 21
22 22 Likewise, if as an admin you also have a user account, the email address
23 23 attached to the user account needs to be different.
24 24
25 25
26 26 LDAP Configuration Steps
27 27 ^^^^^^^^^^^^^^^^^^^^^^^^
28 28
29 29 To configure |LDAP|, use the following steps:
30 30
31 31 1. From the |RCE| interface, select
32 32 :menuselection:`Admin --> Authentication`
33 33 2. Activate the `LDAP` plugin and select :guilabel:`Save`
34 34 3. Go to newly available menu option called `LDAP` on the left side.
35 35 4. Check the `enabled` check box in the plugin configuration section,
36 36 and fill in the required LDAP information and :guilabel:`Save`, for more details,
37 37 see :ref:`config-ldap-examples`
38 38
39 39 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
40 40
41 41 .. _config-ldap-examples:
42 42
43 43 Example LDAP configuration
44 44 ^^^^^^^^^^^^^^^^^^^^^^^^^^
45 45
46 46 Below is example setup that can be used with Active Directory/LDAP server::
47 47
48 48 *option*: `enabled` => `True`
49 49 # Enable or disable this authentication plugin.
50 50
51 51 *option*: `cache_ttl` => `360`
52 52 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
53 53 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
54 54
55 55 *option*: `host` => `192.168.245.143,192.168.1.240`
56 56 # Host[s] of the LDAP Server
57 57 # (e.g., 192.168.2.154, or ldap-server.domain.com.
58 58 # Multiple servers can be specified using commas
59 59
60 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 63 *option*: `timeout` => `300`
64 64 # Timeout for LDAP connection
65 65
66 66 *option*: `dn_user` => `Administrator@rhodecode.com`
67 67 # Optional user DN/account to connect to LDAP if authentication is required.
68 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 70 *option*: `dn_pass` => `SomeSecret`
71 71 # Password to authenticate for given user DN.
72 72
73 73 *option*: `tls_kind` => `PLAIN`
74 74 # TLS Type
75 75
76 76 *option*: `tls_reqcert` => `NEVER`
77 77 # Require Cert over TLS?. Self-signed and custom certificates can be used when
78 78 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
79 79
80 80 *option*: `tls_cert_file` => ``
81 81 # This specifies the PEM-format file path containing certificates for use in TLS connection.
82 82 # If not specified `TLS Cert dir` will be used
83 83
84 84 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
85 85 # This specifies the path of a directory that contains individual CA certificates in separate files.
86 86
87 87 *option*: `base_dn` => `cn=Rufus Magillacuddy,ou=users,dc=rhodecode,dc=com`
88 88 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
89 89 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
90 90
91 91 *option*: `filter` => `(objectClass=person)`
92 92 # Filter to narrow results
93 93 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
94 94 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
95 95
96 96 *option*: `search_scope` => `SUBTREE`
97 97 # How deep to search LDAP. If unsure set to SUBTREE
98 98
99 99 *option*: `attr_login` => `sAMAccountName`
100 100 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
101 101
102 102 *option*: `attr_email` => `mail`
103 103 # LDAP Attribute to map to email address (e.g., mail).
104 104 # Emails are a crucial part of RhodeCode.
105 105 # If possible add a valid email attribute to ldap users.
106 106
107 107 *option*: `attr_firstname` => `givenName`
108 108 # LDAP Attribute to map to first name (e.g., givenName)
109 109
110 110 *option*: `attr_lastname` => `sn`
111 111 # LDAP Attribute to map to last name (e.g., sn)
112 112
113 113
114 114 .. toctree::
115 115
116 116 ldap-active-directory
117 117 ldap-authentication
@@ -1,75 +1,75 b''
1 1 .. _ldap-act-dir-ref:
2 2
3 3 Active Directory
4 4 ----------------
5 5
6 6 |RCE| can use Microsoft Active Directory for user authentication. This is
7 7 done through an LDAP or LDAPS connection to Active Directory. Use the
8 8 following example LDAP configuration setting to set your Active Directory
9 9 authentication::
10 10
11 11
12 12 *option*: `enabled` => `True`
13 13 # Enable or disable this authentication plugin.
14 14
15 15 *option*: `cache_ttl` => `360`
16 16 # Amount of seconds to cache the authentication and permissions check response call for this plugin.
17 17 # Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled).
18 18
19 19 *option*: `host` => `192.168.245.143,192.168.1.240`
20 20 # Host[s] of the LDAP Server
21 21 # (e.g., 192.168.2.154, or ldap-server.domain.com.
22 22 # Multiple servers can be specified using commas
23 23
24 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 27 *option*: `timeout` => `300`
28 28 # Timeout for LDAP connection
29 29
30 30 *option*: `dn_user` => `Administrator@rhodecode.com`
31 31 # Optional user DN/account to connect to LDAP if authentication is required.
32 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 34 *option*: `dn_pass` => `SomeSecret`
35 35 # Password to authenticate for given user DN.
36 36
37 37 *option*: `tls_kind` => `PLAIN`
38 38 # TLS Type
39 39
40 40 *option*: `tls_reqcert` => `NEVER`
41 41 # Require Cert over TLS?. Self-signed and custom certificates can be used when
42 42 # `RhodeCode Certificate` found in admin > settings > system info page is extended.
43 43
44 44 *option*: `tls_cert_file` => ``
45 45 # This specifies the PEM-format file path containing certificates for use in TLS connection.
46 46 # If not specified `TLS Cert dir` will be used
47 47
48 48 *option*: `tls_cert_dir` => `/etc/openldap/cacerts`
49 49 # This specifies the path of a directory that contains individual CA certificates in separate files.
50 50
51 51 *option*: `base_dn` => `OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local`
52 52 # Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user credentials
53 53 # (e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)
54 54
55 55 *option*: `filter` => `(objectClass=person)`
56 56 # Filter to narrow results
57 57 # (e.g., (&(objectCategory=Person)(objectClass=user)), or
58 58 # (memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))
59 59
60 60 *option*: `search_scope` => `SUBTREE`
61 61 # How deep to search LDAP. If unsure set to SUBTREE
62 62
63 63 *option*: `attr_login` => `sAMAccountName`
64 64 # LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)
65 65
66 66 *option*: `attr_email` => `userEmail`
67 67 # LDAP Attribute to map to email address (e.g., mail).
68 68 # Emails are a crucial part of RhodeCode.
69 69 # If possible add a valid email attribute to ldap users.
70 70
71 71 *option*: `attr_firstname` => `user_firstname`
72 72 # LDAP Attribute to map to first name (e.g., givenName)
73 73
74 74 *option*: `attr_lastname` => `user_surname`
75 75 # LDAP Attribute to map to last name (e.g., sn)
@@ -1,243 +1,243 b''
1 1 .. _dev-setup:
2 2
3 3 ===================
4 4 Development setup
5 5 ===================
6 6
7 7
8 8 RhodeCode Enterprise runs inside a Nix managed environment. This ensures build
9 9 environment dependencies are correctly declared and installed during setup.
10 10 It also enables atomic upgrades, rollbacks, and multiple instances of RhodeCode
11 11 Enterprise running with isolation.
12 12
13 13 To set up RhodeCode Enterprise inside the Nix environment, use the following steps:
14 14
15 15
16 16
17 17 Setup Nix Package Manager
18 18 -------------------------
19 19
20 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 24 or go to https://nixos.org/nix/ and follow the installation instructions.
25 25 Once this is correctly set up on your system, you should be able to use the
26 26 following commands:
27 27
28 28 * `nix-env`
29 29
30 30 * `nix-shell`
31 31
32 32
33 33 .. tip::
34 34
35 35 Update your channels frequently by running ``nix-channel --update``.
36 36
37 37 .. note::
38 38
39 39 To uninstall nix run the following:
40 40
41 41 remove the . "$HOME/.nix-profile/etc/profile.d/nix.sh" line in your ~/.profile or ~/.bash_profile
42 42 rm -rf $HOME/{.nix-channels,.nix-defexpr,.nix-profile,.config/nixpkgs}
43 43 sudo rm -rf /nix
44 44
45 45 Switch nix to the latest STABLE channel
46 46 ---------------------------------------
47 47
48 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 52 Followed by::
53 53
54 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 58 Install required binaries
59 59 -------------------------
60 60
61 61 We need some handy tools first.
62 62
63 63 run::
64 64
65 65 nix-env -i nix-prefetch-hg
66 66 nix-env -i nix-prefetch-git
67 67
68 68
69 69 Speed up JS build by installing PhantomJS
70 70 -----------------------------------------
71 71
72 72 PhantomJS will be downloaded each time nix-shell is invoked. To speed this by
73 73 setting already downloaded version do this::
74 74
75 75 nix-env -i phantomjs-2.1.1
76 76
77 77 # and set nix bin path
78 78 export PATH=$PATH:~/.nix-profile/bin
79 79
80 80
81 81 Clone the required repositories
82 82 -------------------------------
83 83
84 84 After Nix is set up, clone the RhodeCode Enterprise Community Edition and
85 85 RhodeCode VCSServer repositories into the same directory.
86 86 RhodeCode currently is using Mercurial Version Control System, please make sure
87 87 you have it installed before continuing.
88 88
89 89 To obtain the required sources, use the following commands::
90 90
91 91 mkdir rhodecode-develop && cd rhodecode-develop
92 92 hg clone -u default https://code.rhodecode.com/rhodecode-enterprise-ce
93 93 hg clone -u default https://code.rhodecode.com/rhodecode-vcsserver
94 94
95 95 .. note::
96 96
97 97 If you cannot clone the repository, please contact us via support@rhodecode.com
98 98
99 99
100 100 Install some required libraries
101 101 -------------------------------
102 102
103 103 There are some required drivers and dev libraries that we need to install to
104 104 test RhodeCode under different types of databases. For example in Ubuntu we
105 105 need to install the following.
106 106
107 107 required libraries::
108 108
109 109 # svn related
110 110 sudo apt-get install libapr1-dev libaprutil1-dev
111 111 sudo apt-get install libsvn-dev
112 112 # libcurl required too
113 113 sudo apt-get install libcurl4-openssl-dev
114 114 # mysql/pg server for development, optional
115 115 sudo apt-get install mysql-server libmysqlclient-dev
116 116 sudo apt-get install postgresql postgresql-contrib libpq-dev
117 117
118 118
119 119
120 120 Enter the Development Shell
121 121 ---------------------------
122 122
123 123 The final step is to start the development shells. To do this, run the
124 124 following command from inside the cloned repository::
125 125
126 126 # first, the vcsserver
127 127 cd ~/rhodecode-vcsserver
128 128 nix-shell
129 129
130 130 # then enterprise sources
131 131 cd ~/rhodecode-enterprise-ce
132 132 nix-shell
133 133
134 134 .. note::
135 135
136 136 On the first run, this will take a while to download and optionally compile
137 137 a few things. The following runs will be faster. The development shell works
138 138 fine on both MacOS and Linux platforms.
139 139
140 140
141 141 Create config.nix for development
142 142 ---------------------------------
143 143
144 144 In order to run proper tests and setup linking across projects, a config.nix
145 145 file needs to be setup::
146 146
147 147 # create config
148 148 mkdir -p ~/.nixpkgs
149 149 touch ~/.nixpkgs/config.nix
150 150
151 151 # put the below content into the ~/.nixpkgs/config.nix file
152 152 # adjusts, the path to where you cloned your repositories.
153 153
154 154 {
155 155 rc = {
156 156 sources = {
157 157 rhodecode-vcsserver = "/home/dev/rhodecode-vcsserver";
158 158 rhodecode-enterprise-ce = "/home/dev/rhodecode-enterprise-ce";
159 159 rhodecode-enterprise-ee = "/home/dev/rhodecode-enterprise-ee";
160 160 };
161 161 };
162 162 }
163 163
164 164
165 165
166 166 Creating a Development Configuration
167 167 ------------------------------------
168 168
169 169 To create a development environment for RhodeCode Enterprise,
170 170 use the following steps:
171 171
172 172 1. Create a copy of vcsserver config:
173 173 `cp ~/rhodecode-vcsserver/configs/development.ini ~/rhodecode-vcsserver/configs/dev.ini`
174 174 2. Create a copy of rhodocode config:
175 175 `cp ~/rhodecode-enterprise-ce/configs/development.ini ~/rhodecode-enterprise-ce/configs/dev.ini`
176 176 3. Adjust the configuration settings to your needs if needed.
177 177
178 178 .. note::
179 179
180 180 It is recommended to use the name `dev.ini` since it's included in .hgignore file.
181 181
182 182
183 183 Setup the Development Database
184 184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
185 185
186 186 To create a development database, use the following example. This is a one
187 187 time operation executed from the nix-shell of rhodecode-enterprise-ce sources ::
188 188
189 189 rc-setup-app dev.ini \
190 190 --user=admin --password=secret \
191 191 --email=admin@example.com \
192 192 --repos=~/my_dev_repos
193 193
194 194
195 195 Compile CSS and JavaScript
196 196 ^^^^^^^^^^^^^^^^^^^^^^^^^^
197 197
198 198 To use the application's frontend and prepare it for production deployment,
199 199 you will need to compile the CSS and JavaScript with Grunt.
200 200 This is easily done from within the nix-shell using the following command::
201 201
202 202 make web-build
203 203
204 204 When developing new features you will need to recompile following any
205 205 changes made to the CSS or JavaScript files when developing the code::
206 206
207 207 grunt watch
208 208
209 209 This prepares the development (with comments/whitespace) versions of files.
210 210
211 211 Start the Development Servers
212 212 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
213 213
214 214 From the rhodecode-vcsserver directory, start the development server in another
215 215 nix-shell, using the following command::
216 216
217 217 pserve configs/dev.ini
218 218
219 219 In the adjacent nix-shell which you created for your development server, you may
220 220 now start CE with the following command::
221 221
222 222
223 223 pserve --reload configs/dev.ini
224 224
225 225 .. note::
226 226
227 227 `--reload` flag will automatically reload the server when source file changes.
228 228
229 229
230 230 Run the Environment Tests
231 231 ^^^^^^^^^^^^^^^^^^^^^^^^^
232 232
233 233 Please make sure that the tests are passing to verify that your environment is
234 234 set up correctly. RhodeCode uses py.test to run tests.
235 235 While your instance is running, start a new nix-shell and simply run
236 236 ``make test`` to run the basic test suite.
237 237
238 238
239 239 Need Help?
240 240 ^^^^^^^^^^
241 241
242 242 Join us on Slack via https://rhodecode.com/join or post questions in our
243 243 Community Portal at https://community.rhodecode.com
@@ -1,98 +1,95 b''
1 1 .. _known-issues:
2 2
3 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 6 Windows Upload
21 7 --------------
22 8
23 9 There can be an issue with uploading files from web interface on Windows,
24 10 and afterwards users cannot properly clone or synchronize with the repository.
25 11
26 12 Early testing shows that often uploading files via HTML forms on Windows
27 13 includes the full path of the file being uploaded and not the name of the file.
28 14
29 15 Old Format of Git Repositories
30 16 ------------------------------
31 17
32 18 There is an issue when trying to import old |git| format |repos| into recent
33 19 versions of |RCE|. This issue can occur when importing from external |git|
34 20 repositories or from older versions of |RCE| (<=2.2.7).
35 21
36 22 To convert the old version into a current version, clone the old
37 23 |repo| into a local machine using a recent |git| client, then push it to a new
38 24 |repo| inside |RCE|.
39 25
40 26
41 27 VCS Server Memory Consumption
42 28 -----------------------------
43 29
44 30 The VCS Server cache grows without limits if not configured correctly. This
45 31 applies to |RCE| versions prior to the 3.3.2 releases, as 3.3.2
46 32 shipped with the optimal configuration as default. See the
47 33 :ref:`vcs-server-maintain` section for details.
48 34
49 35 To fix this issue, upgrade to |RCE| 3.3.2 or greater, and if you discover
50 36 memory consumption issues check the VCS Server settings.
51 37
52 Fedora 23 / Ubuntu 18.04
53 ------------------------
38 Newer Operating system locales
39 ------------------------------
54 40
55 41 |RCC| has a know problem with locales, due to changes in glibc 2.27+ which affects
56 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 49 To work around this problem, you need set path to ``$LOCAL_ARCHIVE`` to the
60 50 locale package in older pre glibc 2.27 format, or set `LC_ALL=C` in your enviroment.
61 51
62 52 To use the pre 2.27 locale-archive fix follow these steps:
63 53
64 54 1. Download the pre 2.27 locale-archive package
65 55
66 56 .. code-block:: bash
67 57
68 58 wget https://dls.rhodecode.com/assets/locale-archive
69 59
70 60
71 61 2. Point ``$LOCAL_ARCHIVE`` to the locale package.
72 62
73 63 .. code-block:: bash
74 64
75 65 $ export LOCALE_ARCHIVE=/home/USER/locale-archive # change to your path
76 66
77 This can either added in `~/.rccontrol/supervisor/supervisord.ini`
78 or in user .bashrc/.zshrc etc, or via a startup script that
67 This should be added *both* in `enviroment` variable of `~/.rccontrol/supervisor/supervisord.ini`
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 76 runs `rccontrol self-init`
80 77
81 78 If you happen to be running |RCC| from systemd, use the following
82 79 example to pass the correct locale information on boot.
83 80
84 81 .. code-block:: ini
85 82
86 83 [Unit]
87 84 Description=Rhodecode
88 85 After=network.target
89 86
90 87 [Service]
91 88 Type=forking
92 89 User=scm
93 90 Environment="LOCALE_ARCHIVE=/YOUR-PATH/locale-archive"
94 91 ExecStart=/YOUR-PATH/.rccontrol-profile/bin/rccontrol-self-init
95 92
96 93 [Install]
97 94 WantedBy=multi-user.target
98 95
@@ -1,140 +1,141 b''
1 1 .. _rhodecode-release-notes-ref:
2 2
3 3 Release Notes
4 4 =============
5 5
6 6 |RCE| 4.x Versions
7 7 ------------------
8 8
9 9 .. toctree::
10 10 :maxdepth: 1
11 11
12 release-notes-4.19.0.rst
12 13 release-notes-4.18.3.rst
13 14 release-notes-4.18.2.rst
14 15 release-notes-4.18.1.rst
15 16 release-notes-4.18.0.rst
16 17 release-notes-4.17.4.rst
17 18 release-notes-4.17.3.rst
18 19 release-notes-4.17.2.rst
19 20 release-notes-4.17.1.rst
20 21 release-notes-4.17.0.rst
21 22 release-notes-4.16.2.rst
22 23 release-notes-4.16.1.rst
23 24 release-notes-4.16.0.rst
24 25 release-notes-4.15.2.rst
25 26 release-notes-4.15.1.rst
26 27 release-notes-4.15.0.rst
27 28 release-notes-4.14.1.rst
28 29 release-notes-4.14.0.rst
29 30 release-notes-4.13.3.rst
30 31 release-notes-4.13.2.rst
31 32 release-notes-4.13.1.rst
32 33 release-notes-4.13.0.rst
33 34 release-notes-4.12.4.rst
34 35 release-notes-4.12.3.rst
35 36 release-notes-4.12.2.rst
36 37 release-notes-4.12.1.rst
37 38 release-notes-4.12.0.rst
38 39 release-notes-4.11.6.rst
39 40 release-notes-4.11.5.rst
40 41 release-notes-4.11.4.rst
41 42 release-notes-4.11.3.rst
42 43 release-notes-4.11.2.rst
43 44 release-notes-4.11.1.rst
44 45 release-notes-4.11.0.rst
45 46 release-notes-4.10.6.rst
46 47 release-notes-4.10.5.rst
47 48 release-notes-4.10.4.rst
48 49 release-notes-4.10.3.rst
49 50 release-notes-4.10.2.rst
50 51 release-notes-4.10.1.rst
51 52 release-notes-4.10.0.rst
52 53 release-notes-4.9.1.rst
53 54 release-notes-4.9.0.rst
54 55 release-notes-4.8.0.rst
55 56 release-notes-4.7.2.rst
56 57 release-notes-4.7.1.rst
57 58 release-notes-4.7.0.rst
58 59 release-notes-4.6.1.rst
59 60 release-notes-4.6.0.rst
60 61 release-notes-4.5.2.rst
61 62 release-notes-4.5.1.rst
62 63 release-notes-4.5.0.rst
63 64 release-notes-4.4.2.rst
64 65 release-notes-4.4.1.rst
65 66 release-notes-4.4.0.rst
66 67 release-notes-4.3.1.rst
67 68 release-notes-4.3.0.rst
68 69 release-notes-4.2.1.rst
69 70 release-notes-4.2.0.rst
70 71 release-notes-4.1.2.rst
71 72 release-notes-4.1.1.rst
72 73 release-notes-4.1.0.rst
73 74 release-notes-4.0.1.rst
74 75 release-notes-4.0.0.rst
75 76
76 77 |RCE| 3.x Versions
77 78 ------------------
78 79
79 80 .. toctree::
80 81 :maxdepth: 1
81 82
82 83 release-notes-3.8.4.rst
83 84 release-notes-3.8.3.rst
84 85 release-notes-3.8.2.rst
85 86 release-notes-3.8.1.rst
86 87 release-notes-3.8.0.rst
87 88 release-notes-3.7.1.rst
88 89 release-notes-3.7.0.rst
89 90 release-notes-3.6.1.rst
90 91 release-notes-3.6.0.rst
91 92 release-notes-3.5.2.rst
92 93 release-notes-3.5.1.rst
93 94 release-notes-3.5.0.rst
94 95 release-notes-3.4.1.rst
95 96 release-notes-3.4.0.rst
96 97 release-notes-3.3.4.rst
97 98 release-notes-3.3.3.rst
98 99 release-notes-3.3.2.rst
99 100 release-notes-3.3.1.rst
100 101 release-notes-3.3.0.rst
101 102 release-notes-3.2.3.rst
102 103 release-notes-3.2.2.rst
103 104 release-notes-3.2.1.rst
104 105 release-notes-3.2.0.rst
105 106 release-notes-3.1.1.rst
106 107 release-notes-3.1.0.rst
107 108 release-notes-3.0.2.rst
108 109 release-notes-3.0.1.rst
109 110 release-notes-3.0.0.rst
110 111
111 112 |RCE| 2.x Versions
112 113 ------------------
113 114
114 115 .. toctree::
115 116 :maxdepth: 1
116 117
117 118 release-notes-2.2.8.rst
118 119 release-notes-2.2.7.rst
119 120 release-notes-2.2.6.rst
120 121 release-notes-2.2.5.rst
121 122 release-notes-2.2.4.rst
122 123 release-notes-2.2.3.rst
123 124 release-notes-2.2.2.rst
124 125 release-notes-2.2.1.rst
125 126 release-notes-2.2.0.rst
126 127 release-notes-2.1.0.rst
127 128 release-notes-2.0.2.rst
128 129 release-notes-2.0.1.rst
129 130 release-notes-2.0.0.rst
130 131
131 132 |RCE| 1.x Versions
132 133 ------------------
133 134
134 135 .. toctree::
135 136 :maxdepth: 1
136 137
137 138 release-notes-1.7.2.rst
138 139 release-notes-1.7.1.rst
139 140 release-notes-1.7.0.rst
140 141 release-notes-1.6.0.rst
@@ -1,8 +1,8 b''
1 1 sphinx==1.8.2
2 2 six==1.11.0
3 3 sphinx_rtd_theme==0.4.1
4 docutils==0.14.0
4 docutils==0.16.0
5 5 pygments==2.3.0
6 6 markupsafe==1.0.0
7 7 jinja2==2.9.6
8 8 pytz==2018.4
@@ -1,183 +1,184 b''
1 1 {
2 2 "dirs": {
3 3 "css": {
4 4 "src": "rhodecode/public/css",
5 5 "dest": "rhodecode/public/css"
6 6 },
7 7 "js": {
8 8 "src": "rhodecode/public/js/src",
9 9 "src_rc": "rhodecode/public/js/rhodecode",
10 10 "dest": "rhodecode/public/js",
11 11 "node_modules": "node_modules"
12 12 }
13 13 },
14 14 "copy": {
15 15 "main": {
16 16 "files": [
17 17 {
18 18 "expand": true,
19 19 "cwd": "node_modules/@webcomponents",
20 20 "src": "webcomponentsjs/*.*",
21 21 "dest": "<%= dirs.js.dest %>/vendors"
22 22 },
23 23 {
24 24 "src": "<%= dirs.css.src %>/style-polymer.css",
25 25 "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css"
26 26 }
27 27 ]
28 28 }
29 29 },
30 30 "concat": {
31 31 "dist": {
32 32 "src": [
33 33 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
34 34 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
35 35 "<%= dirs.js.node_modules %>/moment/min/moment.min.js",
36 36 "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js",
37 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 40 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js",
40 41 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
41 42 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
42 43 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
43 44 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
44 45 "<%= dirs.js.src %>/logging.js",
45 46 "<%= dirs.js.src %>/bootstrap.js",
46 47 "<%= dirs.js.src %>/i18n_utils.js",
47 48 "<%= dirs.js.src %>/deform.js",
48 49 "<%= dirs.js.src %>/ejs.js",
49 50 "<%= dirs.js.src %>/ejs_templates/utils.js",
50 51 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
51 52 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
52 53 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
53 54 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
54 55 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
55 56 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
56 57 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
57 58 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
58 59 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
59 60 "<%= dirs.js.src %>/select2/select2.js",
60 61 "<%= dirs.js.src %>/codemirror/codemirror.js",
61 62 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
62 63 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
63 64 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
64 65 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
65 66 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
66 67 "<%= dirs.js.dest %>/mode/meta.js",
67 68 "<%= dirs.js.dest %>/mode/meta_ext.js",
68 69 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
69 70 "<%= dirs.js.src %>/rhodecode/utils/array.js",
70 71 "<%= dirs.js.src %>/rhodecode/utils/string.js",
71 72 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
72 73 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
73 74 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
74 75 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
75 76 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
76 77 "<%= dirs.js.src %>/rhodecode/utils/os.js",
77 78 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
78 79 "<%= dirs.js.src %>/rhodecode/init.js",
79 80 "<%= dirs.js.src %>/rhodecode/changelog.js",
80 81 "<%= dirs.js.src %>/rhodecode/codemirror.js",
81 82 "<%= dirs.js.src %>/rhodecode/comments.js",
82 83 "<%= dirs.js.src %>/rhodecode/constants.js",
83 84 "<%= dirs.js.src %>/rhodecode/files.js",
84 85 "<%= dirs.js.src %>/rhodecode/followers.js",
85 86 "<%= dirs.js.src %>/rhodecode/menus.js",
86 87 "<%= dirs.js.src %>/rhodecode/notifications.js",
87 88 "<%= dirs.js.src %>/rhodecode/permissions.js",
88 89 "<%= dirs.js.src %>/rhodecode/pjax.js",
89 90 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
90 91 "<%= dirs.js.src %>/rhodecode/settings.js",
91 92 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
92 93 "<%= dirs.js.src %>/rhodecode/tooltips.js",
93 94 "<%= dirs.js.src %>/rhodecode/users.js",
94 95 "<%= dirs.js.src %>/rhodecode/appenlight.js",
95 96 "<%= dirs.js.src %>/rhodecode.js",
96 97 "<%= dirs.js.dest %>/rhodecode-components.js"
97 98 ],
98 99 "dest": "<%= dirs.js.dest %>/scripts.js",
99 100 "nonull": true
100 101 }
101 102 },
102 103 "uglify": {
103 104 "dist": {
104 105 "src": "<%= dirs.js.dest %>/scripts.js",
105 106 "dest": "<%= dirs.js.dest %>/scripts.min.js"
106 107 }
107 108 },
108 109 "less": {
109 110 "development": {
110 111 "options": {
111 112 "compress": false,
112 113 "yuicompress": false,
113 114 "optimization": 0
114 115 },
115 116 "files": {
116 117 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
117 118 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
118 119 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
119 120 }
120 121 },
121 122 "production": {
122 123 "options": {
123 124 "compress": true,
124 125 "yuicompress": true,
125 126 "optimization": 2
126 127 },
127 128 "files": {
128 129 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
129 130 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
130 131 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
131 132 }
132 133 },
133 134 "components": {
134 135 "files": [
135 136 {
136 137 "cwd": "<%= dirs.js.src %>/components/",
137 138 "dest": "<%= dirs.js.src %>/components/",
138 139 "src": [
139 140 "**/*.less"
140 141 ],
141 142 "expand": true,
142 143 "ext": ".css"
143 144 }
144 145 ]
145 146 }
146 147 },
147 148 "watch": {
148 149 "less": {
149 150 "files": [
150 151 "<%= dirs.css.src %>/**/*.less",
151 152 "<%= dirs.js.src %>/components/**/*.less"
152 153 ],
153 154 "tasks": [
154 155 "less:development",
155 156 "less:components",
156 157 "concat:polymercss",
157 158 "webpack",
158 159 "concat:dist"
159 160 ]
160 161 },
161 162 "js": {
162 163 "files": [
163 164 "!<%= dirs.js.src %>/components/root-styles.gen.html",
164 165 "<%= dirs.js.src %>/**/*.js",
165 166 "<%= dirs.js.src %>/components/**/*.html"
166 167 ],
167 168 "tasks": [
168 169 "less:components",
169 170 "concat:polymercss",
170 171 "webpack",
171 172 "concat:dist"
172 173 ]
173 174 }
174 175 },
175 176 "jshint": {
176 177 "rhodecode": {
177 178 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
178 179 "options": {
179 180 "jshintrc": ".jshintrc"
180 181 }
181 182 }
182 183 }
183 184 }
@@ -1,61 +1,62 b''
1 1 {
2 2 "name": "rhodecode-enterprise",
3 3 "version": "2.0.0",
4 4 "private": true,
5 5 "description" : "RhodeCode JS packaged",
6 6 "license": "SEE LICENSE IN LICENSE.txt",
7 7 "repository" : {
8 8 "type" : "hg",
9 9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
10 10 },
11 11 "devDependencies": {
12 12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
13 13 "clipboard": "^2.0.1",
14 14 "exports-loader": "^0.6.4",
15 15 "favico.js": "^0.3.10",
16 16 "dropzone": "^5.5.0",
17 17 "grunt": "^0.4.5",
18 18 "grunt-cli": "^1.3.1",
19 19 "grunt-contrib-concat": "^0.5.1",
20 20 "grunt-contrib-copy": "^1.0.0",
21 21 "grunt-contrib-jshint": "^0.12.0",
22 22 "grunt-contrib-less": "^1.1.0",
23 23 "grunt-contrib-watch": "^0.6.1",
24 24 "grunt-webpack": "^3.1.3",
25 25 "grunt-contrib-uglify": "^4.0.1",
26 "sweetalert2": "^9.10.12",
26 27 "jquery": "1.11.3",
27 28 "mark.js": "8.11.1",
28 29 "jshint": "^2.9.1-rc3",
29 30 "moment": "^2.18.1",
30 31 "mousetrap": "^1.6.1",
31 32 "qrious": "^4.0.2",
32 33 "sticky-sidebar": "3.3.1",
33 34 "waypoints": "4.0.1",
34 35 "webpack": "4.23.1",
35 36 "webpack-cli": "3.1.2",
36 37 "babel-core": "^6.26.3",
37 38 "babel-loader": "^7.1.2",
38 39 "babel-plugin-transform-object-rest-spread": "^6.26.0",
39 40 "babel-preset-env": "^1.6.0",
40 41 "copy-webpack-plugin": "^4.4.2",
41 42 "css-loader": "^0.28.11",
42 43 "html-loader": "^0.4.4",
43 44 "html-webpack-plugin": "^3.2.0",
44 45 "imports-loader": "^0.7.1",
45 46 "polymer-webpack-loader": "^2.0.1",
46 47 "style-loader": "^0.21.0",
47 48 "webpack-uglify-js-plugin": "^1.1.9",
48 49 "raw-loader": "1.0.0-beta.0",
49 50 "ts-loader": "^1.3.3",
50 51 "@webcomponents/webcomponentsjs": "^2.0.0",
51 52 "@polymer/polymer": "^3.0.0",
52 53 "@polymer/paper-button": "^3.0.0",
53 54 "@polymer/paper-spinner": "^3.0.0",
54 55 "@polymer/paper-tooltip": "^3.0.0",
55 56 "@polymer/paper-toast": "^3.0.0",
56 57 "@polymer/paper-toggle-button": "^3.0.0",
57 58 "@polymer/iron-ajax": "^3.0.0",
58 59 "@polymer/iron-autogrow-textarea": "^3.0.0",
59 60 "@polymer/iron-a11y-keys": "^3.0.0"
60 61 }
61 62 }
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now