##// END OF EJS Templates
release: Merge default into stable for release preparation
marcink -
r3497:d3230053 merge stable
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,42 b''
1 .. _restore-deleted-repositories:
2
3 Restoring Deleted Repositories
4 ==============================
5
6 By default when repository or whole repository group is deleted an archived copy
7 of filesystem repositories are kept. You can see them as special entries in the
8 repository storage such as::
9
10 drwxrwxr-x 3 rcdev rcdev 4096 Dec 4 2017 rm__20171204_105727_400795__ce-import
11 drwxrwxr-x 6 rcdev rcdev 4096 Nov 21 2017 rm__20180221_152430_675047__svn-repo
12 drwxr-xr-x 7 rcdev rcdev 4096 Mar 28 2018 rm__20180328_143124_617576__test-git
13 drwxr-xr-x 7 rcdev rcdev 4096 Mar 28 2018 rm__20180328_144954_317729__test-git-install-hooks
14
15
16 Data from those repositories can be restored by simply removing the
17 `rm_YYYYDDMM_HHMMSS_DDDDDD__` prefix and additionally only in case of Mercurial
18 repositories remove the `.hg` store prefix.::
19
20 rm__.hg => .hg
21
22
23 For Git or SVN repositories this operation is not required.
24
25 After removing the prefix repository can be brought by opening
26 :menuselection:`Admin --> Settings --> Remap and Rescan` and running `Rescan Filesystem`
27
28 This will create a new DB entry restoring the data previously removed.
29 To restore OLD database entries this should be done by restoring from a Database backup.
30
31 RhodeCode also keeps the repository group structure, this is marked by entries that
32 in addition have GROUP in the prefix, eg::
33
34 drwxr-xr-x 2 rcdev rcdev 4096 Jan 18 16:13 rm__20181130_120650_977082_GROUP_Test1
35 drwxr-xr-x 2 rcdev rcdev 4096 Jan 18 16:13 rm__20181130_120659_922952_GROUP_Docs
36
37
38
39 .. note::
40
41 RhodeCode Tools have a special cleanup tool for the archived repositories. Please
42 see :ref:`clean-up-cmds`
@@ -0,0 +1,37 b''
1 .. _store-methods-ref:
2
3 store methods
4 =============
5
6 file_store_add (EE only)
7 ------------------------
8
9 .. py:function:: file_store_add(apiuser, filename, content)
10
11 Upload API for the file_store
12
13 Example usage from CLI::
14 rhodecode-api --instance-name=enterprise-1 upload_file "{"content": "$(cat image.jpg | base64)", "filename":"image.jpg"}"
15
16 This command takes the following options:
17
18 :param apiuser: This is filled automatically from the |authtoken|.
19 :type apiuser: AuthUser
20 :param filename: name of the file uploaded
21 :type filename: str
22 :param content: base64 encoded content of the uploaded file
23 :type content: str
24
25 Example output:
26
27 .. code-block:: bash
28
29 id : <id_given_in_input>
30 result: {
31 "access_path": "/_file_store/download/84d156f7-8323-4ad3-9fce-4a8e88e1deaf-0.jpg",
32 "access_path_fqn": "http://server.domain.com/_file_store/download/84d156f7-8323-4ad3-9fce-4a8e88e1deaf-0.jpg",
33 "store_fid": "84d156f7-8323-4ad3-9fce-4a8e88e1deaf-0.jpg"
34 }
35 error : null
36
37
@@ -0,0 +1,88 b''
1 .. _auth-saml-bulk-enroll-users-ref:
2
3
4 Bulk enroll multiple existing users
5 -----------------------------------
6
7
8 RhodeCode Supports standard SAML 2.0 SSO for the web-application part.
9 Below is an example how to enroll list of all or some users to use SAML authentication.
10 This method simply enables SAML authentication for many users at once.
11
12
13 From the server RhodeCode Enterprise is running run ishell on the instance which we
14 want to apply the SAML migration::
15
16 rccontrol ishell enterprise-1
17
18 Follow these steps to enable SAML authentication for multiple users.
19
20
21 1) Create a user_id => attribute mapping
22
23
24 `saml2user` is a mapping of external ID from SAML provider such as OneLogin, DuoSecurity, Google.
25 This mapping consists of local rhodecode user_id mapped to set of required attributes needed to bind SAML
26 account to internal rhodecode user.
27 For example, 123 is local rhodecode user_id, and '48253211' is OneLogin ID.
28 For other providers you'd have to figure out what would be the user-id, sometimes it's the email, i.e for Google
29 The most important this id needs to be unique for each user.
30
31 .. code-block:: python
32
33 In [1]: saml2user = {
34 ...: # OneLogin, uses externalID available to read from in the UI
35 ...: 123: {'id: '48253211'},
36 ...: # for Google/DuoSecurity email is also an option for unique ID
37 ...: 124: {'id: 'email@domain.com'},
38 ...: }
39
40
41 2) Import the plugin you want to run migration for.
42
43 From available options pick only one and run the `import` statement
44
45 .. code-block:: python
46
47 # for Duo Security
48 In [2]: from rc_auth_plugins.auth_duo_security import RhodeCodeAuthPlugin
49 # for OneLogin
50 In [2]: from rc_auth_plugins.auth_onelogin import RhodeCodeAuthPlugin
51 # generic SAML plugin
52 In [2]: from rc_auth_plugins.auth_saml import RhodeCodeAuthPlugin
53
54 3) Run the migration based on saml2user mapping.
55
56 Enter in the ishell prompt
57
58 .. code-block:: python
59
60 In [3]: for user in User.get_all():
61 ...: existing_identity = ExternalIdentity().query().filter(ExternalIdentity.local_user_id == user.user_id).scalar()
62 ...: attrs = saml2user.get(user.user_id)
63 ...: provider = RhodeCodeAuthPlugin.uid
64 ...: if existing_identity:
65 ...: print('Identity for user `{}` already exists, skipping'.format(user.username))
66 ...: continue
67 ...: if attrs:
68 ...: external_id = attrs['id']
69 ...: new_external_identity = ExternalIdentity()
70 ...: new_external_identity.external_id = external_id
71 ...: new_external_identity.external_username = '{}-saml-{}'.format(user.username, user.user_id)
72 ...: new_external_identity.provider_name = provider
73 ...: new_external_identity.local_user_id = user_id
74 ...: new_external_identity.access_token = ''
75 ...: new_external_identity.token_secret = ''
76 ...: new_external_identity.alt_token = ''
77 ...: Session().add(ex_identity)
78 ...: Session().commit()
79 ...: print('Set user `{}` external identity bound to ExternalID:{}'.format(user.username, external_id))
80
81 .. note::
82
83 saml2user can be really big and hard to maintain in ishell. It's also possible
84 to load it as a JSON file prepared before and stored on disk. To do so run::
85
86 import json
87 saml2user = json.loads(open('/path/to/saml2user.json','rb').read())
88
@@ -0,0 +1,148 b''
1 |RCE| 4.16.0 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2019-02-15
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13
14 - Full-text search: added support for ElasticSearch 6.X (ES6)
15 - Full-text search: Expose a quick way to search within repository groups using ES6.
16 - Full-text search: Add quick links to broaden/narrow search scope to repositories or
17 repository groups from global search.
18 - Full-text search: ES6 backend adds new highlighter, and search markers for better UX when searching.
19 - Full-text search: ES6 backend has enabled advanced `query string syntax`
20 adding more search and filtering capabilities.
21 - Full-text search: ES6 engine will now show added information where available such as line numbers file size.
22 - Files: added option to use highlight marker to show keywords inside file source. This
23 is used now for ES6 backend extended highlighting capabilities
24 - Artifacts (beta): EE edition exposes new feature called storage_api this allows storing
25 binary files outside of Version Control System, but in the scope of a repository or group.
26 This will soon become an Artifacts functionality available in EE edition.
27 - Authentication: introduced `User restriction` and `Scope restriction` for RhodeCode authentication plugins.
28 Admins can limit usage of RhodeCode plugins to super-admins user types, and usage in Web, or VCS protocol only.
29 This is mostly to help to migrate users to SAML, keeping the super-admins to manage instances via local-logins,
30 and secondly to force usage of AuthenticationTokens instead of re-using same credentials for
31 WEB and VCS authentication.
32 - API: added basic upload API for the storage_api. It's possible to store files using internal
33 API. This is a start for attachments upload in RhodeCode.
34 - API: added store_exception_api for remote exception storage. This is used by a new
35 indexer that will report any problems back into the RhodeCode instance in case of indexing problems.
36 - API: added function to fetch comments for a repository.
37 - Quick search: improve the styling of search input and results.
38 - Pull requests: allowed to select all forks and parent forks of target repository in creation UI.
39 This is a common workflow supported by GitHub etc.
40
41
42 General
43 ^^^^^^^
44
45 - Users/Repositories/Repository groups: expose IDs of those objects in advanced views.
46 Useful for API calls or usage in ishell.
47 - UI: moved repo group select next to the name as it's very relevant to each other.
48 - Pull requests: increase the stability of concurrent pull requests created.
49 - Pull requests: introduced operation state for pull requests to prevent from
50 locks during merge/update operations in concurrent busy environments.
51 - Pull requests: ensure that merge response provide more details about failed operations.
52 - UI / Files: expose downloads options onto files view similar as in summary page.
53 - Repositories: show hooks version and update link in the advanced section of repository page.
54 - Events: trigger 'review_status_change' in all cases when reviewers are changed
55 influencing review status.
56 - Files: display submodules in a sorted way, equal to how Directories are sorted.
57 - API: fetching all pull-requests now sorts the results and exposed a flag to show/hide
58 the merge result state for faster result fetching.
59 - API: merge_pull_request expose detailed merge message in the merge operation
60 next to numeric merge response code.
61 - API: added possibility to specify owner to create_pull_request API.
62 - SSH: Added ability to disable server-side SSH key generation to enforce users
63 generated SSH keys only outside of the server.
64 - Integrations: allow PUT method for WebHook integration.
65 - Dependencies: bumped git to 2.19.2 release.
66 - Dependencies: dropped pygments-markdown-lexer as it's natively supported by pygments now.
67 - Dependencies: bumped pyramid to 1.10.1
68 - Dependencies: bumped pastedeploy to 2.0.1
69 - Dependencies: bumped pastescript to 3.0.0
70 - Dependencies: bumped pathlib2 to 2.3.3
71 - Dependencies: bumped webob to 1.8.4
72 - Dependencies: bumped iso8601 to 0.1.12
73 - Dependencies: bumped more-itertools to 5.0.0
74 - Dependencies: bumped psutil to 5.4.8
75 - Dependencies: bumped pyasn1 to 0.4.5
76 - Dependencies: bumped pygments to 2.3.1
77 - Dependencies: bumped pyramid-debugtoolbar to 4.5.0
78 - Dependencies: bumped subprocess32 to 3.5.3
79 - Dependencies: bumped supervisor to 3.3.5
80 - Dependencies: bumped dogpile.cache to 0.7.1
81 - Dependencies: bumped simplejson to 3.16.0
82 - Dependencies: bumped gevent to 1.4.0
83 - Dependencies: bumped configparser to 3.5.1
84
85
86 Security
87 ^^^^^^^^
88
89 - Fork page: don't expose fork origin link if we don't have permission to access this repository.
90 Additionally don't pre-select such repository in pull request ref selector.
91 - Security: fix possible XSS in the issue tracker URL.
92 - Security: sanitize plaintext renderer with bleach, preventing XSS in rendered html.
93 - Audit logs: added audit logs for API permission calls.
94
95
96 Performance
97 ^^^^^^^^^^^
98
99 - Summary page: don't load repo size when showing expanded information about repository.
100 Size calculation needs to be triggered manually.
101 - Git: use rev-list for fetching last commit data in case of single commit history.
102 In some cases, it is much faster than previously used git log command.
103
104
105 Fixes
106 ^^^^^
107
108 - Installer: fixed 32bit package builds broken in previous releases.
109 - Git: use iterative fetch to prevent errors about too many arguments on
110 synchronizing very large repositories.
111 - Git: pass in the SSL dir that is exposed from wire for remote GIT commands.
112 - LDAP+Groups: improve logging, and fix the case when extracting group name from LDAP
113 returned nothing. We should warn about that, but not FAIL on login.
114 - Default reviewers: fixed submodule support in picking reviewers from annotation for files.
115 - Hooks: handle non-ascii characters in hooks new pull-requests open template.
116 - Diffs: fixed missing limited diff container display on over-size limit diffs.
117 - Diffs: fixed 500 error in case of some very uncommon diffs containing only Unicode characters.
118 - Repositories: handle VCS backend unavailable correctly in advanced settings for the repository.
119 - Remap & rescan: prevent empty/damaged repositories to break the remap operation.
120 - Visual: fixed show revision/commit length settings.
121 - Mercurial submodules: only show submodule in the path that it belongs too.
122 Before even submodules from root node were shown in subdirectories.
123 - UI/Files: fixed icons in file tree search.
124 - WebHook integration: quote URL variables to prevent URL errors with special chars
125 like # in the title.
126 - API: pull-requests, fixed invocation of merge as another user.
127 - VCS: limit fd leaks on subprocessio calls.
128 - VCS: expose SSL certificate path over the wire to the vcsserver, this solves some
129 remote SSL import problems reported.
130
131
132 Upgrade notes
133 ^^^^^^^^^^^^^
134
135 This release brings the new Full-text search capabilities using ElasticSearch 6.
136 If you use Elastic Search backend a backward compatibility mode is enabled and
137 ElasticSearch backend defaults to previously used ElasticSearch 2.
138
139 To use new features a full index rebuild is required, in addition ```--es-version=6``` flag
140 needs to be used with indexer and ```search.es_version = 6``` should be set in rhodecode.ini
141
142 Additionally new mapping format is available for the indexer that has additional capabilities
143 for include/exclude rules. Old format should work as well, but we encourage to
144 generate a new mapping.ini file using rhodecode-index command, and migrate your repositories
145 to the new format.
146
147 Please refer to the :ref:`indexing-ref` documentation for more details.
148
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,6 +1,6 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.15.2
2 current_version = 4.16.0
3 message = release: Bump version {current_version} to {new_version}
3 message = release: Bump version {current_version} to {new_version}
4
4
5 [bumpversion:file:rhodecode/VERSION]
5 [bumpversion:file:rhodecode/VERSION]
6
6
@@ -1,33 +1,28 b''
1 [DEFAULT]
1 [DEFAULT]
2 done = false
2 done = false
3
3
4 [task:bump_version]
4 [task:bump_version]
5 done = true
5 done = true
6
6
7 [task:rc_tools_pinned]
7 [task:rc_tools_pinned]
8 done = true
9
8
10 [task:fixes_on_stable]
9 [task:fixes_on_stable]
11 done = true
12
10
13 [task:pip2nix_generated]
11 [task:pip2nix_generated]
14 done = true
15
12
16 [task:changelog_updated]
13 [task:changelog_updated]
17 done = true
18
14
19 [task:generate_api_docs]
15 [task:generate_api_docs]
20 done = true
16
17 [task:updated_translation]
21
18
22 [release]
19 [release]
23 state = prepared
20 state = in_progress
24 version = 4.15.2
21 version = 4.16.0
25
26 [task:updated_translation]
27
22
28 [task:generate_js_routes]
23 [task:generate_js_routes]
29
24
30 [task:updated_trial_license]
25 [task:updated_trial_license]
31
26
32 [task:generate_oss_licenses]
27 [task:generate_oss_licenses]
33
28
@@ -1,696 +1,694 b''
1 This program is free software: you can redistribute it and/or modify
1 This program is free software: you can redistribute it and/or modify
2 it under the terms of the GNU Affero General Public License, version 3
2 it under the terms of the GNU Affero General Public License, version 3
3 (only), as published by the Free Software Foundation.
3 (only), as published by the Free Software Foundation.
4
4
5
5
6 This program incorporates work covered by the following copyright and
6 This program incorporates work covered by the following copyright and
7 permission notice:
7 permission notice:
8
8
9 Copyright (c) 2014-2016 - packaging
9 Copyright (c) 2014-2016 - packaging
10 file:
10 file:
11 Copyright (c) 2008-2011 - msgpack-python
11 Copyright (c) 2008-2011 - msgpack-python
12 file:licenses/msgpack_license.txt
12 file:licenses/msgpack_license.txt
13 Copyright (c) 2009 - tornado
13 Copyright (c) 2009 - tornado
14 file:licenses/tornado_license.txt
14 file:licenses/tornado_license.txt
15 Copyright (c) 2015 - pygments-markdown-lexer
16 file:licenses/pygments_markdown_lexer_license.txt
17 Copyright 2006 - diff_match_patch
15 Copyright 2006 - diff_match_patch
18 file:licenses/diff_match_patch_license.txt
16 file:licenses/diff_match_patch_license.txt
19
17
20 All licensed under the Apache License, Version 2.0 (the "License");
18 All licensed under the Apache License, Version 2.0 (the "License");
21 you may not use this file except in compliance with the License.
19 you may not use this file except in compliance with the License.
22 You may obtain a copy of the License at
20 You may obtain a copy of the License at
23
21
24 http://www.apache.org/licenses/LICENSE-2.0
22 http://www.apache.org/licenses/LICENSE-2.0
25
23
26 Unless required by applicable law or agreed to in writing, software
24 Unless required by applicable law or agreed to in writing, software
27 distributed under the License is distributed on an "AS IS" BASIS,
25 distributed under the License is distributed on an "AS IS" BASIS,
28 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29 See the License for the specific language governing permissions and
27 See the License for the specific language governing permissions and
30 imitations under the License.
28 imitations under the License.
31
29
32
30
33 Below is the full text of GNU Affero General Public License, version 3
31 Below is the full text of GNU Affero General Public License, version 3
34
32
35
33
36 GNU AFFERO GENERAL PUBLIC LICENSE
34 GNU AFFERO GENERAL PUBLIC LICENSE
37 Version 3, 19 November 2007
35 Version 3, 19 November 2007
38
36
39 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
37 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
40 Everyone is permitted to copy and distribute verbatim copies
38 Everyone is permitted to copy and distribute verbatim copies
41 of this license document, but changing it is not allowed.
39 of this license document, but changing it is not allowed.
42
40
43 Preamble
41 Preamble
44
42
45 The GNU Affero General Public License is a free, copyleft license for
43 The GNU Affero General Public License is a free, copyleft license for
46 software and other kinds of works, specifically designed to ensure
44 software and other kinds of works, specifically designed to ensure
47 cooperation with the community in the case of network server software.
45 cooperation with the community in the case of network server software.
48
46
49 The licenses for most software and other practical works are designed
47 The licenses for most software and other practical works are designed
50 to take away your freedom to share and change the works. By contrast,
48 to take away your freedom to share and change the works. By contrast,
51 our General Public Licenses are intended to guarantee your freedom to
49 our General Public Licenses are intended to guarantee your freedom to
52 share and change all versions of a program--to make sure it remains free
50 share and change all versions of a program--to make sure it remains free
53 software for all its users.
51 software for all its users.
54
52
55 When we speak of free software, we are referring to freedom, not
53 When we speak of free software, we are referring to freedom, not
56 price. Our General Public Licenses are designed to make sure that you
54 price. Our General Public Licenses are designed to make sure that you
57 have the freedom to distribute copies of free software (and charge for
55 have the freedom to distribute copies of free software (and charge for
58 them if you wish), that you receive source code or can get it if you
56 them if you wish), that you receive source code or can get it if you
59 want it, that you can change the software or use pieces of it in new
57 want it, that you can change the software or use pieces of it in new
60 free programs, and that you know you can do these things.
58 free programs, and that you know you can do these things.
61
59
62 Developers that use our General Public Licenses protect your rights
60 Developers that use our General Public Licenses protect your rights
63 with two steps: (1) assert copyright on the software, and (2) offer
61 with two steps: (1) assert copyright on the software, and (2) offer
64 you this License which gives you legal permission to copy, distribute
62 you this License which gives you legal permission to copy, distribute
65 and/or modify the software.
63 and/or modify the software.
66
64
67 A secondary benefit of defending all users' freedom is that
65 A secondary benefit of defending all users' freedom is that
68 improvements made in alternate versions of the program, if they
66 improvements made in alternate versions of the program, if they
69 receive widespread use, become available for other developers to
67 receive widespread use, become available for other developers to
70 incorporate. Many developers of free software are heartened and
68 incorporate. Many developers of free software are heartened and
71 encouraged by the resulting cooperation. However, in the case of
69 encouraged by the resulting cooperation. However, in the case of
72 software used on network servers, this result may fail to come about.
70 software used on network servers, this result may fail to come about.
73 The GNU General Public License permits making a modified version and
71 The GNU General Public License permits making a modified version and
74 letting the public access it on a server without ever releasing its
72 letting the public access it on a server without ever releasing its
75 source code to the public.
73 source code to the public.
76
74
77 The GNU Affero General Public License is designed specifically to
75 The GNU Affero General Public License is designed specifically to
78 ensure that, in such cases, the modified source code becomes available
76 ensure that, in such cases, the modified source code becomes available
79 to the community. It requires the operator of a network server to
77 to the community. It requires the operator of a network server to
80 provide the source code of the modified version running there to the
78 provide the source code of the modified version running there to the
81 users of that server. Therefore, public use of a modified version, on
79 users of that server. Therefore, public use of a modified version, on
82 a publicly accessible server, gives the public access to the source
80 a publicly accessible server, gives the public access to the source
83 code of the modified version.
81 code of the modified version.
84
82
85 An older license, called the Affero General Public License and
83 An older license, called the Affero General Public License and
86 published by Affero, was designed to accomplish similar goals. This is
84 published by Affero, was designed to accomplish similar goals. This is
87 a different license, not a version of the Affero GPL, but Affero has
85 a different license, not a version of the Affero GPL, but Affero has
88 released a new version of the Affero GPL which permits relicensing under
86 released a new version of the Affero GPL which permits relicensing under
89 this license.
87 this license.
90
88
91 The precise terms and conditions for copying, distribution and
89 The precise terms and conditions for copying, distribution and
92 modification follow.
90 modification follow.
93
91
94 TERMS AND CONDITIONS
92 TERMS AND CONDITIONS
95
93
96 0. Definitions.
94 0. Definitions.
97
95
98 "This License" refers to version 3 of the GNU Affero General Public License.
96 "This License" refers to version 3 of the GNU Affero General Public License.
99
97
100 "Copyright" also means copyright-like laws that apply to other kinds of
98 "Copyright" also means copyright-like laws that apply to other kinds of
101 works, such as semiconductor masks.
99 works, such as semiconductor masks.
102
100
103 "The Program" refers to any copyrightable work licensed under this
101 "The Program" refers to any copyrightable work licensed under this
104 License. Each licensee is addressed as "you". "Licensees" and
102 License. Each licensee is addressed as "you". "Licensees" and
105 "recipients" may be individuals or organizations.
103 "recipients" may be individuals or organizations.
106
104
107 To "modify" a work means to copy from or adapt all or part of the work
105 To "modify" a work means to copy from or adapt all or part of the work
108 in a fashion requiring copyright permission, other than the making of an
106 in a fashion requiring copyright permission, other than the making of an
109 exact copy. The resulting work is called a "modified version" of the
107 exact copy. The resulting work is called a "modified version" of the
110 earlier work or a work "based on" the earlier work.
108 earlier work or a work "based on" the earlier work.
111
109
112 A "covered work" means either the unmodified Program or a work based
110 A "covered work" means either the unmodified Program or a work based
113 on the Program.
111 on the Program.
114
112
115 To "propagate" a work means to do anything with it that, without
113 To "propagate" a work means to do anything with it that, without
116 permission, would make you directly or secondarily liable for
114 permission, would make you directly or secondarily liable for
117 infringement under applicable copyright law, except executing it on a
115 infringement under applicable copyright law, except executing it on a
118 computer or modifying a private copy. Propagation includes copying,
116 computer or modifying a private copy. Propagation includes copying,
119 distribution (with or without modification), making available to the
117 distribution (with or without modification), making available to the
120 public, and in some countries other activities as well.
118 public, and in some countries other activities as well.
121
119
122 To "convey" a work means any kind of propagation that enables other
120 To "convey" a work means any kind of propagation that enables other
123 parties to make or receive copies. Mere interaction with a user through
121 parties to make or receive copies. Mere interaction with a user through
124 a computer network, with no transfer of a copy, is not conveying.
122 a computer network, with no transfer of a copy, is not conveying.
125
123
126 An interactive user interface displays "Appropriate Legal Notices"
124 An interactive user interface displays "Appropriate Legal Notices"
127 to the extent that it includes a convenient and prominently visible
125 to the extent that it includes a convenient and prominently visible
128 feature that (1) displays an appropriate copyright notice, and (2)
126 feature that (1) displays an appropriate copyright notice, and (2)
129 tells the user that there is no warranty for the work (except to the
127 tells the user that there is no warranty for the work (except to the
130 extent that warranties are provided), that licensees may convey the
128 extent that warranties are provided), that licensees may convey the
131 work under this License, and how to view a copy of this License. If
129 work under this License, and how to view a copy of this License. If
132 the interface presents a list of user commands or options, such as a
130 the interface presents a list of user commands or options, such as a
133 menu, a prominent item in the list meets this criterion.
131 menu, a prominent item in the list meets this criterion.
134
132
135 1. Source Code.
133 1. Source Code.
136
134
137 The "source code" for a work means the preferred form of the work
135 The "source code" for a work means the preferred form of the work
138 for making modifications to it. "Object code" means any non-source
136 for making modifications to it. "Object code" means any non-source
139 form of a work.
137 form of a work.
140
138
141 A "Standard Interface" means an interface that either is an official
139 A "Standard Interface" means an interface that either is an official
142 standard defined by a recognized standards body, or, in the case of
140 standard defined by a recognized standards body, or, in the case of
143 interfaces specified for a particular programming language, one that
141 interfaces specified for a particular programming language, one that
144 is widely used among developers working in that language.
142 is widely used among developers working in that language.
145
143
146 The "System Libraries" of an executable work include anything, other
144 The "System Libraries" of an executable work include anything, other
147 than the work as a whole, that (a) is included in the normal form of
145 than the work as a whole, that (a) is included in the normal form of
148 packaging a Major Component, but which is not part of that Major
146 packaging a Major Component, but which is not part of that Major
149 Component, and (b) serves only to enable use of the work with that
147 Component, and (b) serves only to enable use of the work with that
150 Major Component, or to implement a Standard Interface for which an
148 Major Component, or to implement a Standard Interface for which an
151 implementation is available to the public in source code form. A
149 implementation is available to the public in source code form. A
152 "Major Component", in this context, means a major essential component
150 "Major Component", in this context, means a major essential component
153 (kernel, window system, and so on) of the specific operating system
151 (kernel, window system, and so on) of the specific operating system
154 (if any) on which the executable work runs, or a compiler used to
152 (if any) on which the executable work runs, or a compiler used to
155 produce the work, or an object code interpreter used to run it.
153 produce the work, or an object code interpreter used to run it.
156
154
157 The "Corresponding Source" for a work in object code form means all
155 The "Corresponding Source" for a work in object code form means all
158 the source code needed to generate, install, and (for an executable
156 the source code needed to generate, install, and (for an executable
159 work) run the object code and to modify the work, including scripts to
157 work) run the object code and to modify the work, including scripts to
160 control those activities. However, it does not include the work's
158 control those activities. However, it does not include the work's
161 System Libraries, or general-purpose tools or generally available free
159 System Libraries, or general-purpose tools or generally available free
162 programs which are used unmodified in performing those activities but
160 programs which are used unmodified in performing those activities but
163 which are not part of the work. For example, Corresponding Source
161 which are not part of the work. For example, Corresponding Source
164 includes interface definition files associated with source files for
162 includes interface definition files associated with source files for
165 the work, and the source code for shared libraries and dynamically
163 the work, and the source code for shared libraries and dynamically
166 linked subprograms that the work is specifically designed to require,
164 linked subprograms that the work is specifically designed to require,
167 such as by intimate data communication or control flow between those
165 such as by intimate data communication or control flow between those
168 subprograms and other parts of the work.
166 subprograms and other parts of the work.
169
167
170 The Corresponding Source need not include anything that users
168 The Corresponding Source need not include anything that users
171 can regenerate automatically from other parts of the Corresponding
169 can regenerate automatically from other parts of the Corresponding
172 Source.
170 Source.
173
171
174 The Corresponding Source for a work in source code form is that
172 The Corresponding Source for a work in source code form is that
175 same work.
173 same work.
176
174
177 2. Basic Permissions.
175 2. Basic Permissions.
178
176
179 All rights granted under this License are granted for the term of
177 All rights granted under this License are granted for the term of
180 copyright on the Program, and are irrevocable provided the stated
178 copyright on the Program, and are irrevocable provided the stated
181 conditions are met. This License explicitly affirms your unlimited
179 conditions are met. This License explicitly affirms your unlimited
182 permission to run the unmodified Program. The output from running a
180 permission to run the unmodified Program. The output from running a
183 covered work is covered by this License only if the output, given its
181 covered work is covered by this License only if the output, given its
184 content, constitutes a covered work. This License acknowledges your
182 content, constitutes a covered work. This License acknowledges your
185 rights of fair use or other equivalent, as provided by copyright law.
183 rights of fair use or other equivalent, as provided by copyright law.
186
184
187 You may make, run and propagate covered works that you do not
185 You may make, run and propagate covered works that you do not
188 convey, without conditions so long as your license otherwise remains
186 convey, without conditions so long as your license otherwise remains
189 in force. You may convey covered works to others for the sole purpose
187 in force. You may convey covered works to others for the sole purpose
190 of having them make modifications exclusively for you, or provide you
188 of having them make modifications exclusively for you, or provide you
191 with facilities for running those works, provided that you comply with
189 with facilities for running those works, provided that you comply with
192 the terms of this License in conveying all material for which you do
190 the terms of this License in conveying all material for which you do
193 not control copyright. Those thus making or running the covered works
191 not control copyright. Those thus making or running the covered works
194 for you must do so exclusively on your behalf, under your direction
192 for you must do so exclusively on your behalf, under your direction
195 and control, on terms that prohibit them from making any copies of
193 and control, on terms that prohibit them from making any copies of
196 your copyrighted material outside their relationship with you.
194 your copyrighted material outside their relationship with you.
197
195
198 Conveying under any other circumstances is permitted solely under
196 Conveying under any other circumstances is permitted solely under
199 the conditions stated below. Sublicensing is not allowed; section 10
197 the conditions stated below. Sublicensing is not allowed; section 10
200 makes it unnecessary.
198 makes it unnecessary.
201
199
202 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
200 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
203
201
204 No covered work shall be deemed part of an effective technological
202 No covered work shall be deemed part of an effective technological
205 measure under any applicable law fulfilling obligations under article
203 measure under any applicable law fulfilling obligations under article
206 11 of the WIPO copyright treaty adopted on 20 December 1996, or
204 11 of the WIPO copyright treaty adopted on 20 December 1996, or
207 similar laws prohibiting or restricting circumvention of such
205 similar laws prohibiting or restricting circumvention of such
208 measures.
206 measures.
209
207
210 When you convey a covered work, you waive any legal power to forbid
208 When you convey a covered work, you waive any legal power to forbid
211 circumvention of technological measures to the extent such circumvention
209 circumvention of technological measures to the extent such circumvention
212 is effected by exercising rights under this License with respect to
210 is effected by exercising rights under this License with respect to
213 the covered work, and you disclaim any intention to limit operation or
211 the covered work, and you disclaim any intention to limit operation or
214 modification of the work as a means of enforcing, against the work's
212 modification of the work as a means of enforcing, against the work's
215 users, your or third parties' legal rights to forbid circumvention of
213 users, your or third parties' legal rights to forbid circumvention of
216 technological measures.
214 technological measures.
217
215
218 4. Conveying Verbatim Copies.
216 4. Conveying Verbatim Copies.
219
217
220 You may convey verbatim copies of the Program's source code as you
218 You may convey verbatim copies of the Program's source code as you
221 receive it, in any medium, provided that you conspicuously and
219 receive it, in any medium, provided that you conspicuously and
222 appropriately publish on each copy an appropriate copyright notice;
220 appropriately publish on each copy an appropriate copyright notice;
223 keep intact all notices stating that this License and any
221 keep intact all notices stating that this License and any
224 non-permissive terms added in accord with section 7 apply to the code;
222 non-permissive terms added in accord with section 7 apply to the code;
225 keep intact all notices of the absence of any warranty; and give all
223 keep intact all notices of the absence of any warranty; and give all
226 recipients a copy of this License along with the Program.
224 recipients a copy of this License along with the Program.
227
225
228 You may charge any price or no price for each copy that you convey,
226 You may charge any price or no price for each copy that you convey,
229 and you may offer support or warranty protection for a fee.
227 and you may offer support or warranty protection for a fee.
230
228
231 5. Conveying Modified Source Versions.
229 5. Conveying Modified Source Versions.
232
230
233 You may convey a work based on the Program, or the modifications to
231 You may convey a work based on the Program, or the modifications to
234 produce it from the Program, in the form of source code under the
232 produce it from the Program, in the form of source code under the
235 terms of section 4, provided that you also meet all of these conditions:
233 terms of section 4, provided that you also meet all of these conditions:
236
234
237 a) The work must carry prominent notices stating that you modified
235 a) The work must carry prominent notices stating that you modified
238 it, and giving a relevant date.
236 it, and giving a relevant date.
239
237
240 b) The work must carry prominent notices stating that it is
238 b) The work must carry prominent notices stating that it is
241 released under this License and any conditions added under section
239 released under this License and any conditions added under section
242 7. This requirement modifies the requirement in section 4 to
240 7. This requirement modifies the requirement in section 4 to
243 "keep intact all notices".
241 "keep intact all notices".
244
242
245 c) You must license the entire work, as a whole, under this
243 c) You must license the entire work, as a whole, under this
246 License to anyone who comes into possession of a copy. This
244 License to anyone who comes into possession of a copy. This
247 License will therefore apply, along with any applicable section 7
245 License will therefore apply, along with any applicable section 7
248 additional terms, to the whole of the work, and all its parts,
246 additional terms, to the whole of the work, and all its parts,
249 regardless of how they are packaged. This License gives no
247 regardless of how they are packaged. This License gives no
250 permission to license the work in any other way, but it does not
248 permission to license the work in any other way, but it does not
251 invalidate such permission if you have separately received it.
249 invalidate such permission if you have separately received it.
252
250
253 d) If the work has interactive user interfaces, each must display
251 d) If the work has interactive user interfaces, each must display
254 Appropriate Legal Notices; however, if the Program has interactive
252 Appropriate Legal Notices; however, if the Program has interactive
255 interfaces that do not display Appropriate Legal Notices, your
253 interfaces that do not display Appropriate Legal Notices, your
256 work need not make them do so.
254 work need not make them do so.
257
255
258 A compilation of a covered work with other separate and independent
256 A compilation of a covered work with other separate and independent
259 works, which are not by their nature extensions of the covered work,
257 works, which are not by their nature extensions of the covered work,
260 and which are not combined with it such as to form a larger program,
258 and which are not combined with it such as to form a larger program,
261 in or on a volume of a storage or distribution medium, is called an
259 in or on a volume of a storage or distribution medium, is called an
262 "aggregate" if the compilation and its resulting copyright are not
260 "aggregate" if the compilation and its resulting copyright are not
263 used to limit the access or legal rights of the compilation's users
261 used to limit the access or legal rights of the compilation's users
264 beyond what the individual works permit. Inclusion of a covered work
262 beyond what the individual works permit. Inclusion of a covered work
265 in an aggregate does not cause this License to apply to the other
263 in an aggregate does not cause this License to apply to the other
266 parts of the aggregate.
264 parts of the aggregate.
267
265
268 6. Conveying Non-Source Forms.
266 6. Conveying Non-Source Forms.
269
267
270 You may convey a covered work in object code form under the terms
268 You may convey a covered work in object code form under the terms
271 of sections 4 and 5, provided that you also convey the
269 of sections 4 and 5, provided that you also convey the
272 machine-readable Corresponding Source under the terms of this License,
270 machine-readable Corresponding Source under the terms of this License,
273 in one of these ways:
271 in one of these ways:
274
272
275 a) Convey the object code in, or embodied in, a physical product
273 a) Convey the object code in, or embodied in, a physical product
276 (including a physical distribution medium), accompanied by the
274 (including a physical distribution medium), accompanied by the
277 Corresponding Source fixed on a durable physical medium
275 Corresponding Source fixed on a durable physical medium
278 customarily used for software interchange.
276 customarily used for software interchange.
279
277
280 b) Convey the object code in, or embodied in, a physical product
278 b) Convey the object code in, or embodied in, a physical product
281 (including a physical distribution medium), accompanied by a
279 (including a physical distribution medium), accompanied by a
282 written offer, valid for at least three years and valid for as
280 written offer, valid for at least three years and valid for as
283 long as you offer spare parts or customer support for that product
281 long as you offer spare parts or customer support for that product
284 model, to give anyone who possesses the object code either (1) a
282 model, to give anyone who possesses the object code either (1) a
285 copy of the Corresponding Source for all the software in the
283 copy of the Corresponding Source for all the software in the
286 product that is covered by this License, on a durable physical
284 product that is covered by this License, on a durable physical
287 medium customarily used for software interchange, for a price no
285 medium customarily used for software interchange, for a price no
288 more than your reasonable cost of physically performing this
286 more than your reasonable cost of physically performing this
289 conveying of source, or (2) access to copy the
287 conveying of source, or (2) access to copy the
290 Corresponding Source from a network server at no charge.
288 Corresponding Source from a network server at no charge.
291
289
292 c) Convey individual copies of the object code with a copy of the
290 c) Convey individual copies of the object code with a copy of the
293 written offer to provide the Corresponding Source. This
291 written offer to provide the Corresponding Source. This
294 alternative is allowed only occasionally and noncommercially, and
292 alternative is allowed only occasionally and noncommercially, and
295 only if you received the object code with such an offer, in accord
293 only if you received the object code with such an offer, in accord
296 with subsection 6b.
294 with subsection 6b.
297
295
298 d) Convey the object code by offering access from a designated
296 d) Convey the object code by offering access from a designated
299 place (gratis or for a charge), and offer equivalent access to the
297 place (gratis or for a charge), and offer equivalent access to the
300 Corresponding Source in the same way through the same place at no
298 Corresponding Source in the same way through the same place at no
301 further charge. You need not require recipients to copy the
299 further charge. You need not require recipients to copy the
302 Corresponding Source along with the object code. If the place to
300 Corresponding Source along with the object code. If the place to
303 copy the object code is a network server, the Corresponding Source
301 copy the object code is a network server, the Corresponding Source
304 may be on a different server (operated by you or a third party)
302 may be on a different server (operated by you or a third party)
305 that supports equivalent copying facilities, provided you maintain
303 that supports equivalent copying facilities, provided you maintain
306 clear directions next to the object code saying where to find the
304 clear directions next to the object code saying where to find the
307 Corresponding Source. Regardless of what server hosts the
305 Corresponding Source. Regardless of what server hosts the
308 Corresponding Source, you remain obligated to ensure that it is
306 Corresponding Source, you remain obligated to ensure that it is
309 available for as long as needed to satisfy these requirements.
307 available for as long as needed to satisfy these requirements.
310
308
311 e) Convey the object code using peer-to-peer transmission, provided
309 e) Convey the object code using peer-to-peer transmission, provided
312 you inform other peers where the object code and Corresponding
310 you inform other peers where the object code and Corresponding
313 Source of the work are being offered to the general public at no
311 Source of the work are being offered to the general public at no
314 charge under subsection 6d.
312 charge under subsection 6d.
315
313
316 A separable portion of the object code, whose source code is excluded
314 A separable portion of the object code, whose source code is excluded
317 from the Corresponding Source as a System Library, need not be
315 from the Corresponding Source as a System Library, need not be
318 included in conveying the object code work.
316 included in conveying the object code work.
319
317
320 A "User Product" is either (1) a "consumer product", which means any
318 A "User Product" is either (1) a "consumer product", which means any
321 tangible personal property which is normally used for personal, family,
319 tangible personal property which is normally used for personal, family,
322 or household purposes, or (2) anything designed or sold for incorporation
320 or household purposes, or (2) anything designed or sold for incorporation
323 into a dwelling. In determining whether a product is a consumer product,
321 into a dwelling. In determining whether a product is a consumer product,
324 doubtful cases shall be resolved in favor of coverage. For a particular
322 doubtful cases shall be resolved in favor of coverage. For a particular
325 product received by a particular user, "normally used" refers to a
323 product received by a particular user, "normally used" refers to a
326 typical or common use of that class of product, regardless of the status
324 typical or common use of that class of product, regardless of the status
327 of the particular user or of the way in which the particular user
325 of the particular user or of the way in which the particular user
328 actually uses, or expects or is expected to use, the product. A product
326 actually uses, or expects or is expected to use, the product. A product
329 is a consumer product regardless of whether the product has substantial
327 is a consumer product regardless of whether the product has substantial
330 commercial, industrial or non-consumer uses, unless such uses represent
328 commercial, industrial or non-consumer uses, unless such uses represent
331 the only significant mode of use of the product.
329 the only significant mode of use of the product.
332
330
333 "Installation Information" for a User Product means any methods,
331 "Installation Information" for a User Product means any methods,
334 procedures, authorization keys, or other information required to install
332 procedures, authorization keys, or other information required to install
335 and execute modified versions of a covered work in that User Product from
333 and execute modified versions of a covered work in that User Product from
336 a modified version of its Corresponding Source. The information must
334 a modified version of its Corresponding Source. The information must
337 suffice to ensure that the continued functioning of the modified object
335 suffice to ensure that the continued functioning of the modified object
338 code is in no case prevented or interfered with solely because
336 code is in no case prevented or interfered with solely because
339 modification has been made.
337 modification has been made.
340
338
341 If you convey an object code work under this section in, or with, or
339 If you convey an object code work under this section in, or with, or
342 specifically for use in, a User Product, and the conveying occurs as
340 specifically for use in, a User Product, and the conveying occurs as
343 part of a transaction in which the right of possession and use of the
341 part of a transaction in which the right of possession and use of the
344 User Product is transferred to the recipient in perpetuity or for a
342 User Product is transferred to the recipient in perpetuity or for a
345 fixed term (regardless of how the transaction is characterized), the
343 fixed term (regardless of how the transaction is characterized), the
346 Corresponding Source conveyed under this section must be accompanied
344 Corresponding Source conveyed under this section must be accompanied
347 by the Installation Information. But this requirement does not apply
345 by the Installation Information. But this requirement does not apply
348 if neither you nor any third party retains the ability to install
346 if neither you nor any third party retains the ability to install
349 modified object code on the User Product (for example, the work has
347 modified object code on the User Product (for example, the work has
350 been installed in ROM).
348 been installed in ROM).
351
349
352 The requirement to provide Installation Information does not include a
350 The requirement to provide Installation Information does not include a
353 requirement to continue to provide support service, warranty, or updates
351 requirement to continue to provide support service, warranty, or updates
354 for a work that has been modified or installed by the recipient, or for
352 for a work that has been modified or installed by the recipient, or for
355 the User Product in which it has been modified or installed. Access to a
353 the User Product in which it has been modified or installed. Access to a
356 network may be denied when the modification itself materially and
354 network may be denied when the modification itself materially and
357 adversely affects the operation of the network or violates the rules and
355 adversely affects the operation of the network or violates the rules and
358 protocols for communication across the network.
356 protocols for communication across the network.
359
357
360 Corresponding Source conveyed, and Installation Information provided,
358 Corresponding Source conveyed, and Installation Information provided,
361 in accord with this section must be in a format that is publicly
359 in accord with this section must be in a format that is publicly
362 documented (and with an implementation available to the public in
360 documented (and with an implementation available to the public in
363 source code form), and must require no special password or key for
361 source code form), and must require no special password or key for
364 unpacking, reading or copying.
362 unpacking, reading or copying.
365
363
366 7. Additional Terms.
364 7. Additional Terms.
367
365
368 "Additional permissions" are terms that supplement the terms of this
366 "Additional permissions" are terms that supplement the terms of this
369 License by making exceptions from one or more of its conditions.
367 License by making exceptions from one or more of its conditions.
370 Additional permissions that are applicable to the entire Program shall
368 Additional permissions that are applicable to the entire Program shall
371 be treated as though they were included in this License, to the extent
369 be treated as though they were included in this License, to the extent
372 that they are valid under applicable law. If additional permissions
370 that they are valid under applicable law. If additional permissions
373 apply only to part of the Program, that part may be used separately
371 apply only to part of the Program, that part may be used separately
374 under those permissions, but the entire Program remains governed by
372 under those permissions, but the entire Program remains governed by
375 this License without regard to the additional permissions.
373 this License without regard to the additional permissions.
376
374
377 When you convey a copy of a covered work, you may at your option
375 When you convey a copy of a covered work, you may at your option
378 remove any additional permissions from that copy, or from any part of
376 remove any additional permissions from that copy, or from any part of
379 it. (Additional permissions may be written to require their own
377 it. (Additional permissions may be written to require their own
380 removal in certain cases when you modify the work.) You may place
378 removal in certain cases when you modify the work.) You may place
381 additional permissions on material, added by you to a covered work,
379 additional permissions on material, added by you to a covered work,
382 for which you have or can give appropriate copyright permission.
380 for which you have or can give appropriate copyright permission.
383
381
384 Notwithstanding any other provision of this License, for material you
382 Notwithstanding any other provision of this License, for material you
385 add to a covered work, you may (if authorized by the copyright holders of
383 add to a covered work, you may (if authorized by the copyright holders of
386 that material) supplement the terms of this License with terms:
384 that material) supplement the terms of this License with terms:
387
385
388 a) Disclaiming warranty or limiting liability differently from the
386 a) Disclaiming warranty or limiting liability differently from the
389 terms of sections 15 and 16 of this License; or
387 terms of sections 15 and 16 of this License; or
390
388
391 b) Requiring preservation of specified reasonable legal notices or
389 b) Requiring preservation of specified reasonable legal notices or
392 author attributions in that material or in the Appropriate Legal
390 author attributions in that material or in the Appropriate Legal
393 Notices displayed by works containing it; or
391 Notices displayed by works containing it; or
394
392
395 c) Prohibiting misrepresentation of the origin of that material, or
393 c) Prohibiting misrepresentation of the origin of that material, or
396 requiring that modified versions of such material be marked in
394 requiring that modified versions of such material be marked in
397 reasonable ways as different from the original version; or
395 reasonable ways as different from the original version; or
398
396
399 d) Limiting the use for publicity purposes of names of licensors or
397 d) Limiting the use for publicity purposes of names of licensors or
400 authors of the material; or
398 authors of the material; or
401
399
402 e) Declining to grant rights under trademark law for use of some
400 e) Declining to grant rights under trademark law for use of some
403 trade names, trademarks, or service marks; or
401 trade names, trademarks, or service marks; or
404
402
405 f) Requiring indemnification of licensors and authors of that
403 f) Requiring indemnification of licensors and authors of that
406 material by anyone who conveys the material (or modified versions of
404 material by anyone who conveys the material (or modified versions of
407 it) with contractual assumptions of liability to the recipient, for
405 it) with contractual assumptions of liability to the recipient, for
408 any liability that these contractual assumptions directly impose on
406 any liability that these contractual assumptions directly impose on
409 those licensors and authors.
407 those licensors and authors.
410
408
411 All other non-permissive additional terms are considered "further
409 All other non-permissive additional terms are considered "further
412 restrictions" within the meaning of section 10. If the Program as you
410 restrictions" within the meaning of section 10. If the Program as you
413 received it, or any part of it, contains a notice stating that it is
411 received it, or any part of it, contains a notice stating that it is
414 governed by this License along with a term that is a further
412 governed by this License along with a term that is a further
415 restriction, you may remove that term. If a license document contains
413 restriction, you may remove that term. If a license document contains
416 a further restriction but permits relicensing or conveying under this
414 a further restriction but permits relicensing or conveying under this
417 License, you may add to a covered work material governed by the terms
415 License, you may add to a covered work material governed by the terms
418 of that license document, provided that the further restriction does
416 of that license document, provided that the further restriction does
419 not survive such relicensing or conveying.
417 not survive such relicensing or conveying.
420
418
421 If you add terms to a covered work in accord with this section, you
419 If you add terms to a covered work in accord with this section, you
422 must place, in the relevant source files, a statement of the
420 must place, in the relevant source files, a statement of the
423 additional terms that apply to those files, or a notice indicating
421 additional terms that apply to those files, or a notice indicating
424 where to find the applicable terms.
422 where to find the applicable terms.
425
423
426 Additional terms, permissive or non-permissive, may be stated in the
424 Additional terms, permissive or non-permissive, may be stated in the
427 form of a separately written license, or stated as exceptions;
425 form of a separately written license, or stated as exceptions;
428 the above requirements apply either way.
426 the above requirements apply either way.
429
427
430 8. Termination.
428 8. Termination.
431
429
432 You may not propagate or modify a covered work except as expressly
430 You may not propagate or modify a covered work except as expressly
433 provided under this License. Any attempt otherwise to propagate or
431 provided under this License. Any attempt otherwise to propagate or
434 modify it is void, and will automatically terminate your rights under
432 modify it is void, and will automatically terminate your rights under
435 this License (including any patent licenses granted under the third
433 this License (including any patent licenses granted under the third
436 paragraph of section 11).
434 paragraph of section 11).
437
435
438 However, if you cease all violation of this License, then your
436 However, if you cease all violation of this License, then your
439 license from a particular copyright holder is reinstated (a)
437 license from a particular copyright holder is reinstated (a)
440 provisionally, unless and until the copyright holder explicitly and
438 provisionally, unless and until the copyright holder explicitly and
441 finally terminates your license, and (b) permanently, if the copyright
439 finally terminates your license, and (b) permanently, if the copyright
442 holder fails to notify you of the violation by some reasonable means
440 holder fails to notify you of the violation by some reasonable means
443 prior to 60 days after the cessation.
441 prior to 60 days after the cessation.
444
442
445 Moreover, your license from a particular copyright holder is
443 Moreover, your license from a particular copyright holder is
446 reinstated permanently if the copyright holder notifies you of the
444 reinstated permanently if the copyright holder notifies you of the
447 violation by some reasonable means, this is the first time you have
445 violation by some reasonable means, this is the first time you have
448 received notice of violation of this License (for any work) from that
446 received notice of violation of this License (for any work) from that
449 copyright holder, and you cure the violation prior to 30 days after
447 copyright holder, and you cure the violation prior to 30 days after
450 your receipt of the notice.
448 your receipt of the notice.
451
449
452 Termination of your rights under this section does not terminate the
450 Termination of your rights under this section does not terminate the
453 licenses of parties who have received copies or rights from you under
451 licenses of parties who have received copies or rights from you under
454 this License. If your rights have been terminated and not permanently
452 this License. If your rights have been terminated and not permanently
455 reinstated, you do not qualify to receive new licenses for the same
453 reinstated, you do not qualify to receive new licenses for the same
456 material under section 10.
454 material under section 10.
457
455
458 9. Acceptance Not Required for Having Copies.
456 9. Acceptance Not Required for Having Copies.
459
457
460 You are not required to accept this License in order to receive or
458 You are not required to accept this License in order to receive or
461 run a copy of the Program. Ancillary propagation of a covered work
459 run a copy of the Program. Ancillary propagation of a covered work
462 occurring solely as a consequence of using peer-to-peer transmission
460 occurring solely as a consequence of using peer-to-peer transmission
463 to receive a copy likewise does not require acceptance. However,
461 to receive a copy likewise does not require acceptance. However,
464 nothing other than this License grants you permission to propagate or
462 nothing other than this License grants you permission to propagate or
465 modify any covered work. These actions infringe copyright if you do
463 modify any covered work. These actions infringe copyright if you do
466 not accept this License. Therefore, by modifying or propagating a
464 not accept this License. Therefore, by modifying or propagating a
467 covered work, you indicate your acceptance of this License to do so.
465 covered work, you indicate your acceptance of this License to do so.
468
466
469 10. Automatic Licensing of Downstream Recipients.
467 10. Automatic Licensing of Downstream Recipients.
470
468
471 Each time you convey a covered work, the recipient automatically
469 Each time you convey a covered work, the recipient automatically
472 receives a license from the original licensors, to run, modify and
470 receives a license from the original licensors, to run, modify and
473 propagate that work, subject to this License. You are not responsible
471 propagate that work, subject to this License. You are not responsible
474 for enforcing compliance by third parties with this License.
472 for enforcing compliance by third parties with this License.
475
473
476 An "entity transaction" is a transaction transferring control of an
474 An "entity transaction" is a transaction transferring control of an
477 organization, or substantially all assets of one, or subdividing an
475 organization, or substantially all assets of one, or subdividing an
478 organization, or merging organizations. If propagation of a covered
476 organization, or merging organizations. If propagation of a covered
479 work results from an entity transaction, each party to that
477 work results from an entity transaction, each party to that
480 transaction who receives a copy of the work also receives whatever
478 transaction who receives a copy of the work also receives whatever
481 licenses to the work the party's predecessor in interest had or could
479 licenses to the work the party's predecessor in interest had or could
482 give under the previous paragraph, plus a right to possession of the
480 give under the previous paragraph, plus a right to possession of the
483 Corresponding Source of the work from the predecessor in interest, if
481 Corresponding Source of the work from the predecessor in interest, if
484 the predecessor has it or can get it with reasonable efforts.
482 the predecessor has it or can get it with reasonable efforts.
485
483
486 You may not impose any further restrictions on the exercise of the
484 You may not impose any further restrictions on the exercise of the
487 rights granted or affirmed under this License. For example, you may
485 rights granted or affirmed under this License. For example, you may
488 not impose a license fee, royalty, or other charge for exercise of
486 not impose a license fee, royalty, or other charge for exercise of
489 rights granted under this License, and you may not initiate litigation
487 rights granted under this License, and you may not initiate litigation
490 (including a cross-claim or counterclaim in a lawsuit) alleging that
488 (including a cross-claim or counterclaim in a lawsuit) alleging that
491 any patent claim is infringed by making, using, selling, offering for
489 any patent claim is infringed by making, using, selling, offering for
492 sale, or importing the Program or any portion of it.
490 sale, or importing the Program or any portion of it.
493
491
494 11. Patents.
492 11. Patents.
495
493
496 A "contributor" is a copyright holder who authorizes use under this
494 A "contributor" is a copyright holder who authorizes use under this
497 License of the Program or a work on which the Program is based. The
495 License of the Program or a work on which the Program is based. The
498 work thus licensed is called the contributor's "contributor version".
496 work thus licensed is called the contributor's "contributor version".
499
497
500 A contributor's "essential patent claims" are all patent claims
498 A contributor's "essential patent claims" are all patent claims
501 owned or controlled by the contributor, whether already acquired or
499 owned or controlled by the contributor, whether already acquired or
502 hereafter acquired, that would be infringed by some manner, permitted
500 hereafter acquired, that would be infringed by some manner, permitted
503 by this License, of making, using, or selling its contributor version,
501 by this License, of making, using, or selling its contributor version,
504 but do not include claims that would be infringed only as a
502 but do not include claims that would be infringed only as a
505 consequence of further modification of the contributor version. For
503 consequence of further modification of the contributor version. For
506 purposes of this definition, "control" includes the right to grant
504 purposes of this definition, "control" includes the right to grant
507 patent sublicenses in a manner consistent with the requirements of
505 patent sublicenses in a manner consistent with the requirements of
508 this License.
506 this License.
509
507
510 Each contributor grants you a non-exclusive, worldwide, royalty-free
508 Each contributor grants you a non-exclusive, worldwide, royalty-free
511 patent license under the contributor's essential patent claims, to
509 patent license under the contributor's essential patent claims, to
512 make, use, sell, offer for sale, import and otherwise run, modify and
510 make, use, sell, offer for sale, import and otherwise run, modify and
513 propagate the contents of its contributor version.
511 propagate the contents of its contributor version.
514
512
515 In the following three paragraphs, a "patent license" is any express
513 In the following three paragraphs, a "patent license" is any express
516 agreement or commitment, however denominated, not to enforce a patent
514 agreement or commitment, however denominated, not to enforce a patent
517 (such as an express permission to practice a patent or covenant not to
515 (such as an express permission to practice a patent or covenant not to
518 sue for patent infringement). To "grant" such a patent license to a
516 sue for patent infringement). To "grant" such a patent license to a
519 party means to make such an agreement or commitment not to enforce a
517 party means to make such an agreement or commitment not to enforce a
520 patent against the party.
518 patent against the party.
521
519
522 If you convey a covered work, knowingly relying on a patent license,
520 If you convey a covered work, knowingly relying on a patent license,
523 and the Corresponding Source of the work is not available for anyone
521 and the Corresponding Source of the work is not available for anyone
524 to copy, free of charge and under the terms of this License, through a
522 to copy, free of charge and under the terms of this License, through a
525 publicly available network server or other readily accessible means,
523 publicly available network server or other readily accessible means,
526 then you must either (1) cause the Corresponding Source to be so
524 then you must either (1) cause the Corresponding Source to be so
527 available, or (2) arrange to deprive yourself of the benefit of the
525 available, or (2) arrange to deprive yourself of the benefit of the
528 patent license for this particular work, or (3) arrange, in a manner
526 patent license for this particular work, or (3) arrange, in a manner
529 consistent with the requirements of this License, to extend the patent
527 consistent with the requirements of this License, to extend the patent
530 license to downstream recipients. "Knowingly relying" means you have
528 license to downstream recipients. "Knowingly relying" means you have
531 actual knowledge that, but for the patent license, your conveying the
529 actual knowledge that, but for the patent license, your conveying the
532 covered work in a country, or your recipient's use of the covered work
530 covered work in a country, or your recipient's use of the covered work
533 in a country, would infringe one or more identifiable patents in that
531 in a country, would infringe one or more identifiable patents in that
534 country that you have reason to believe are valid.
532 country that you have reason to believe are valid.
535
533
536 If, pursuant to or in connection with a single transaction or
534 If, pursuant to or in connection with a single transaction or
537 arrangement, you convey, or propagate by procuring conveyance of, a
535 arrangement, you convey, or propagate by procuring conveyance of, a
538 covered work, and grant a patent license to some of the parties
536 covered work, and grant a patent license to some of the parties
539 receiving the covered work authorizing them to use, propagate, modify
537 receiving the covered work authorizing them to use, propagate, modify
540 or convey a specific copy of the covered work, then the patent license
538 or convey a specific copy of the covered work, then the patent license
541 you grant is automatically extended to all recipients of the covered
539 you grant is automatically extended to all recipients of the covered
542 work and works based on it.
540 work and works based on it.
543
541
544 A patent license is "discriminatory" if it does not include within
542 A patent license is "discriminatory" if it does not include within
545 the scope of its coverage, prohibits the exercise of, or is
543 the scope of its coverage, prohibits the exercise of, or is
546 conditioned on the non-exercise of one or more of the rights that are
544 conditioned on the non-exercise of one or more of the rights that are
547 specifically granted under this License. You may not convey a covered
545 specifically granted under this License. You may not convey a covered
548 work if you are a party to an arrangement with a third party that is
546 work if you are a party to an arrangement with a third party that is
549 in the business of distributing software, under which you make payment
547 in the business of distributing software, under which you make payment
550 to the third party based on the extent of your activity of conveying
548 to the third party based on the extent of your activity of conveying
551 the work, and under which the third party grants, to any of the
549 the work, and under which the third party grants, to any of the
552 parties who would receive the covered work from you, a discriminatory
550 parties who would receive the covered work from you, a discriminatory
553 patent license (a) in connection with copies of the covered work
551 patent license (a) in connection with copies of the covered work
554 conveyed by you (or copies made from those copies), or (b) primarily
552 conveyed by you (or copies made from those copies), or (b) primarily
555 for and in connection with specific products or compilations that
553 for and in connection with specific products or compilations that
556 contain the covered work, unless you entered into that arrangement,
554 contain the covered work, unless you entered into that arrangement,
557 or that patent license was granted, prior to 28 March 2007.
555 or that patent license was granted, prior to 28 March 2007.
558
556
559 Nothing in this License shall be construed as excluding or limiting
557 Nothing in this License shall be construed as excluding or limiting
560 any implied license or other defenses to infringement that may
558 any implied license or other defenses to infringement that may
561 otherwise be available to you under applicable patent law.
559 otherwise be available to you under applicable patent law.
562
560
563 12. No Surrender of Others' Freedom.
561 12. No Surrender of Others' Freedom.
564
562
565 If conditions are imposed on you (whether by court order, agreement or
563 If conditions are imposed on you (whether by court order, agreement or
566 otherwise) that contradict the conditions of this License, they do not
564 otherwise) that contradict the conditions of this License, they do not
567 excuse you from the conditions of this License. If you cannot convey a
565 excuse you from the conditions of this License. If you cannot convey a
568 covered work so as to satisfy simultaneously your obligations under this
566 covered work so as to satisfy simultaneously your obligations under this
569 License and any other pertinent obligations, then as a consequence you may
567 License and any other pertinent obligations, then as a consequence you may
570 not convey it at all. For example, if you agree to terms that obligate you
568 not convey it at all. For example, if you agree to terms that obligate you
571 to collect a royalty for further conveying from those to whom you convey
569 to collect a royalty for further conveying from those to whom you convey
572 the Program, the only way you could satisfy both those terms and this
570 the Program, the only way you could satisfy both those terms and this
573 License would be to refrain entirely from conveying the Program.
571 License would be to refrain entirely from conveying the Program.
574
572
575 13. Remote Network Interaction; Use with the GNU General Public License.
573 13. Remote Network Interaction; Use with the GNU General Public License.
576
574
577 Notwithstanding any other provision of this License, if you modify the
575 Notwithstanding any other provision of this License, if you modify the
578 Program, your modified version must prominently offer all users
576 Program, your modified version must prominently offer all users
579 interacting with it remotely through a computer network (if your version
577 interacting with it remotely through a computer network (if your version
580 supports such interaction) an opportunity to receive the Corresponding
578 supports such interaction) an opportunity to receive the Corresponding
581 Source of your version by providing access to the Corresponding Source
579 Source of your version by providing access to the Corresponding Source
582 from a network server at no charge, through some standard or customary
580 from a network server at no charge, through some standard or customary
583 means of facilitating copying of software. This Corresponding Source
581 means of facilitating copying of software. This Corresponding Source
584 shall include the Corresponding Source for any work covered by version 3
582 shall include the Corresponding Source for any work covered by version 3
585 of the GNU General Public License that is incorporated pursuant to the
583 of the GNU General Public License that is incorporated pursuant to the
586 following paragraph.
584 following paragraph.
587
585
588 Notwithstanding any other provision of this License, you have
586 Notwithstanding any other provision of this License, you have
589 permission to link or combine any covered work with a work licensed
587 permission to link or combine any covered work with a work licensed
590 under version 3 of the GNU General Public License into a single
588 under version 3 of the GNU General Public License into a single
591 combined work, and to convey the resulting work. The terms of this
589 combined work, and to convey the resulting work. The terms of this
592 License will continue to apply to the part which is the covered work,
590 License will continue to apply to the part which is the covered work,
593 but the work with which it is combined will remain governed by version
591 but the work with which it is combined will remain governed by version
594 3 of the GNU General Public License.
592 3 of the GNU General Public License.
595
593
596 14. Revised Versions of this License.
594 14. Revised Versions of this License.
597
595
598 The Free Software Foundation may publish revised and/or new versions of
596 The Free Software Foundation may publish revised and/or new versions of
599 the GNU Affero General Public License from time to time. Such new versions
597 the GNU Affero General Public License from time to time. Such new versions
600 will be similar in spirit to the present version, but may differ in detail to
598 will be similar in spirit to the present version, but may differ in detail to
601 address new problems or concerns.
599 address new problems or concerns.
602
600
603 Each version is given a distinguishing version number. If the
601 Each version is given a distinguishing version number. If the
604 Program specifies that a certain numbered version of the GNU Affero General
602 Program specifies that a certain numbered version of the GNU Affero General
605 Public License "or any later version" applies to it, you have the
603 Public License "or any later version" applies to it, you have the
606 option of following the terms and conditions either of that numbered
604 option of following the terms and conditions either of that numbered
607 version or of any later version published by the Free Software
605 version or of any later version published by the Free Software
608 Foundation. If the Program does not specify a version number of the
606 Foundation. If the Program does not specify a version number of the
609 GNU Affero General Public License, you may choose any version ever published
607 GNU Affero General Public License, you may choose any version ever published
610 by the Free Software Foundation.
608 by the Free Software Foundation.
611
609
612 If the Program specifies that a proxy can decide which future
610 If the Program specifies that a proxy can decide which future
613 versions of the GNU Affero General Public License can be used, that proxy's
611 versions of the GNU Affero General Public License can be used, that proxy's
614 public statement of acceptance of a version permanently authorizes you
612 public statement of acceptance of a version permanently authorizes you
615 to choose that version for the Program.
613 to choose that version for the Program.
616
614
617 Later license versions may give you additional or different
615 Later license versions may give you additional or different
618 permissions. However, no additional obligations are imposed on any
616 permissions. However, no additional obligations are imposed on any
619 author or copyright holder as a result of your choosing to follow a
617 author or copyright holder as a result of your choosing to follow a
620 later version.
618 later version.
621
619
622 15. Disclaimer of Warranty.
620 15. Disclaimer of Warranty.
623
621
624 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
622 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
625 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
623 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
626 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
624 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
627 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
625 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
628 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
626 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
629 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
627 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
630 IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
628 IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
631 ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
629 ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
632
630
633 16. Limitation of Liability.
631 16. Limitation of Liability.
634
632
635 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
633 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
636 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
634 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
637 THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
635 THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
638 GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
636 GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
639 USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
637 USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
640 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
638 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
641 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
639 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
642 EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
640 EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
643 SUCH DAMAGES.
641 SUCH DAMAGES.
644
642
645 17. Interpretation of Sections 15 and 16.
643 17. Interpretation of Sections 15 and 16.
646
644
647 If the disclaimer of warranty and limitation of liability provided
645 If the disclaimer of warranty and limitation of liability provided
648 above cannot be given local legal effect according to their terms,
646 above cannot be given local legal effect according to their terms,
649 reviewing courts shall apply local law that most closely approximates
647 reviewing courts shall apply local law that most closely approximates
650 an absolute waiver of all civil liability in connection with the
648 an absolute waiver of all civil liability in connection with the
651 Program, unless a warranty or assumption of liability accompanies a
649 Program, unless a warranty or assumption of liability accompanies a
652 copy of the Program in return for a fee.
650 copy of the Program in return for a fee.
653
651
654 END OF TERMS AND CONDITIONS
652 END OF TERMS AND CONDITIONS
655
653
656 How to Apply These Terms to Your New Programs
654 How to Apply These Terms to Your New Programs
657
655
658 If you develop a new program, and you want it to be of the greatest
656 If you develop a new program, and you want it to be of the greatest
659 possible use to the public, the best way to achieve this is to make it
657 possible use to the public, the best way to achieve this is to make it
660 free software which everyone can redistribute and change under these terms.
658 free software which everyone can redistribute and change under these terms.
661
659
662 To do so, attach the following notices to the program. It is safest
660 To do so, attach the following notices to the program. It is safest
663 to attach them to the start of each source file to most effectively
661 to attach them to the start of each source file to most effectively
664 state the exclusion of warranty; and each file should have at least
662 state the exclusion of warranty; and each file should have at least
665 the "copyright" line and a pointer to where the full notice is found.
663 the "copyright" line and a pointer to where the full notice is found.
666
664
667 <one line to give the program's name and a brief idea of what it does.>
665 <one line to give the program's name and a brief idea of what it does.>
668 Copyright (C) <year> <name of author>
666 Copyright (C) <year> <name of author>
669
667
670 This program is free software: you can redistribute it and/or modify
668 This program is free software: you can redistribute it and/or modify
671 it under the terms of the GNU Affero General Public License as published by
669 it under the terms of the GNU Affero General Public License as published by
672 the Free Software Foundation, either version 3 of the License, or
670 the Free Software Foundation, either version 3 of the License, or
673 (at your option) any later version.
671 (at your option) any later version.
674
672
675 This program is distributed in the hope that it will be useful,
673 This program is distributed in the hope that it will be useful,
676 but WITHOUT ANY WARRANTY; without even the implied warranty of
674 but WITHOUT ANY WARRANTY; without even the implied warranty of
677 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
675 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
678 GNU Affero General Public License for more details.
676 GNU Affero General Public License for more details.
679
677
680 You should have received a copy of the GNU Affero General Public License
678 You should have received a copy of the GNU Affero General Public License
681 along with this program. If not, see <http://www.gnu.org/licenses/>.
679 along with this program. If not, see <http://www.gnu.org/licenses/>.
682
680
683 Also add information on how to contact you by electronic and paper mail.
681 Also add information on how to contact you by electronic and paper mail.
684
682
685 If your software can interact with users remotely through a computer
683 If your software can interact with users remotely through a computer
686 network, you should also make sure that it provides a way for users to
684 network, you should also make sure that it provides a way for users to
687 get its source. For example, if your program is a web application, its
685 get its source. For example, if your program is a web application, its
688 interface could display a "Source" link that leads users to an archive
686 interface could display a "Source" link that leads users to an archive
689 of the code. There are many ways you could offer source, and different
687 of the code. There are many ways you could offer source, and different
690 solutions will be better for different programs; see section 13 for the
688 solutions will be better for different programs; see section 13 for the
691 specific requirements.
689 specific requirements.
692
690
693 You should also get your employer (if you work as a programmer) or school,
691 You should also get your employer (if you work as a programmer) or school,
694 if any, to sign a "copyright disclaimer" for the program, if necessary.
692 if any, to sign a "copyright disclaimer" for the program, if necessary.
695 For more information on this, and how to apply and follow the GNU AGPL, see
693 For more information on this, and how to apply and follow the GNU AGPL, see
696 <http://www.gnu.org/licenses/>.
694 <http://www.gnu.org/licenses/>.
@@ -1,53 +1,55 b''
1
1
2 .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build
2 .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build generate-pkgs
3
3
4 NODE_PATH=./node_modules
4 NODE_PATH=./node_modules
5 WEBPACK=./node_binaries/webpack
5 WEBPACK=./node_binaries/webpack
6 GRUNT=./node_binaries/grunt
6 GRUNT=./node_binaries/grunt
7
7
8
8
9 clean:
9 clean:
10 make test-clean
10 make test-clean
11 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' \) -exec rm '{}' ';'
11 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' -o -iname '*.orig' \) -exec rm '{}' ';'
12
12
13 test:
13 test:
14 make test-clean
14 make test-clean
15 make test-only
15 make test-only
16
16
17 test-clean:
17 test-clean:
18 rm -rf coverage.xml htmlcov junit.xml pylint.log result
18 rm -rf coverage.xml htmlcov junit.xml pylint.log result
19 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
19 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
20
20
21 test-only:
21 test-only:
22 PYTHONHASHSEED=random \
22 PYTHONHASHSEED=random \
23 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
23 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
24 --cov-report=term-missing --cov-report=html \
24 --cov-report=term-missing --cov-report=html \
25 rhodecode
25 rhodecode
26
26
27 test-only-mysql:
27 test-only-mysql:
28 PYTHONHASHSEED=random \
28 PYTHONHASHSEED=random \
29 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
29 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
30 --cov-report=term-missing --cov-report=html \
30 --cov-report=term-missing --cov-report=html \
31 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test"}}' \
31 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test"}}' \
32 rhodecode
32 rhodecode
33
33
34 test-only-postgres:
34 test-only-postgres:
35 PYTHONHASHSEED=random \
35 PYTHONHASHSEED=random \
36 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
36 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
37 --cov-report=term-missing --cov-report=html \
37 --cov-report=term-missing --cov-report=html \
38 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
38 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
39 rhodecode
39 rhodecode
40
40
41
41
42 docs:
42 docs:
43 (cd docs; nix-build default.nix -o result; make clean html)
43 (cd docs; nix-build default.nix -o result; make clean html)
44
44
45 docs-clean:
45 docs-clean:
46 (cd docs; make clean)
46 (cd docs; make clean)
47
47
48 docs-cleanup:
48 docs-cleanup:
49 (cd docs; make cleanup)
49 (cd docs; make cleanup)
50
50
51 web-build:
51 web-build:
52 NODE_PATH=$(NODE_PATH) $(GRUNT)
52 NODE_PATH=$(NODE_PATH) $(GRUNT)
53
53
54 generate-pkgs:
55 nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses"
@@ -1,718 +1,732 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 ################################################################################
5 ################################################################################
6
6
7 [DEFAULT]
7 [DEFAULT]
8 ## Debug flag sets all loggers to debug, and enables request tracking
8 ## Debug flag sets all loggers to debug, and enables request tracking
9 debug = true
9 debug = true
10
10
11 ################################################################################
11 ################################################################################
12 ## EMAIL CONFIGURATION ##
12 ## EMAIL CONFIGURATION ##
13 ## Uncomment and replace with the email address which should receive ##
13 ## Uncomment and replace with the email address which should receive ##
14 ## any error reports after an application crash ##
14 ## any error reports after an application crash ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 ################################################################################
16 ################################################################################
17
17
18 ## prefix all emails subjects with given prefix, helps filtering out emails
18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 #email_prefix = [RhodeCode]
19 #email_prefix = [RhodeCode]
20
20
21 ## email FROM address all mails will be sent
21 ## email FROM address all mails will be sent
22 #app_email_from = rhodecode-noreply@localhost
22 #app_email_from = rhodecode-noreply@localhost
23
23
24 #smtp_server = mail.server.com
24 #smtp_server = mail.server.com
25 #smtp_username =
25 #smtp_username =
26 #smtp_password =
26 #smtp_password =
27 #smtp_port =
27 #smtp_port =
28 #smtp_use_tls = false
28 #smtp_use_tls = false
29 #smtp_use_ssl = true
29 #smtp_use_ssl = true
30
30
31 [server:main]
31 [server:main]
32 ## COMMON ##
32 ## COMMON ##
33 host = 127.0.0.1
33 host = 127.0.0.1
34 port = 5000
34 port = 5000
35
35
36 ###########################################################
36 ###########################################################
37 ## WAITRESS WSGI SERVER - Recommended for Development ####
37 ## WAITRESS WSGI SERVER - Recommended for Development ####
38 ###########################################################
38 ###########################################################
39
39
40 use = egg:waitress#main
40 use = egg:waitress#main
41 ## number of worker threads
41 ## number of worker threads
42 threads = 5
42 threads = 5
43 ## MAX BODY SIZE 100GB
43 ## MAX BODY SIZE 100GB
44 max_request_body_size = 107374182400
44 max_request_body_size = 107374182400
45 ## Use poll instead of select, fixes file descriptors limits problems.
45 ## Use poll instead of select, fixes file descriptors limits problems.
46 ## May not work on old windows systems.
46 ## May not work on old windows systems.
47 asyncore_use_poll = true
47 asyncore_use_poll = true
48
48
49
49
50 ##########################
50 ##########################
51 ## GUNICORN WSGI SERVER ##
51 ## GUNICORN WSGI SERVER ##
52 ##########################
52 ##########################
53 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
53 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
54
54
55 #use = egg:gunicorn#main
55 #use = egg:gunicorn#main
56 ## Sets the number of process workers. More workers means more concurent connections
56 ## Sets the number of process workers. More workers means more concurrent connections
57 ## RhodeCode can handle at the same time. Each additional worker also it increases
57 ## RhodeCode can handle at the same time. Each additional worker also it increases
58 ## memory usage as each has it's own set of caches.
58 ## memory usage as each has it's own set of caches.
59 ## Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
59 ## Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
60 ## than 8-10 unless for really big deployments .e.g 700-1000 users.
60 ## than 8-10 unless for really big deployments .e.g 700-1000 users.
61 ## `instance_id = *` must be set in the [app:main] section below (which is the default)
61 ## `instance_id = *` must be set in the [app:main] section below (which is the default)
62 ## when using more than 1 worker.
62 ## when using more than 1 worker.
63 #workers = 2
63 #workers = 2
64 ## process name visible in process list
64 ## process name visible in process list
65 #proc_name = rhodecode
65 #proc_name = rhodecode
66 ## type of worker class, one of sync, gevent
66 ## type of worker class, one of sync, gevent
67 ## recommended for bigger setup is using of of other than sync one
67 ## recommended for bigger setup is using of of other than sync one
68 #worker_class = gevent
68 #worker_class = gevent
69 ## The maximum number of simultaneous clients. Valid only for Gevent
69 ## The maximum number of simultaneous clients. Valid only for Gevent
70 #worker_connections = 10
70 #worker_connections = 10
71 ## max number of requests that worker will handle before being gracefully
71 ## max number of requests that worker will handle before being gracefully
72 ## restarted, could prevent memory leaks
72 ## restarted, could prevent memory leaks
73 #max_requests = 1000
73 #max_requests = 1000
74 #max_requests_jitter = 30
74 #max_requests_jitter = 30
75 ## amount of time a worker can spend with handling a request before it
75 ## amount of time a worker can spend with handling a request before it
76 ## gets killed and restarted. Set to 6hrs
76 ## gets killed and restarted. Set to 6hrs
77 #timeout = 21600
77 #timeout = 21600
78
78
79
79
80 ## prefix middleware for RhodeCode.
80 ## prefix middleware for RhodeCode.
81 ## recommended when using proxy setup.
81 ## recommended when using proxy setup.
82 ## allows to set RhodeCode under a prefix in server.
82 ## allows to set RhodeCode under a prefix in server.
83 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
83 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
84 ## And set your prefix like: `prefix = /custom_prefix`
84 ## And set your prefix like: `prefix = /custom_prefix`
85 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
85 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
86 ## to make your cookies only work on prefix url
86 ## to make your cookies only work on prefix url
87 [filter:proxy-prefix]
87 [filter:proxy-prefix]
88 use = egg:PasteDeploy#prefix
88 use = egg:PasteDeploy#prefix
89 prefix = /
89 prefix = /
90
90
91 [app:main]
91 [app:main]
92 ## The %(here)s variable will be replaced with the absolute path of parent directory
92 ## The %(here)s variable will be replaced with the absolute path of parent directory
93 ## of this file
93 ## of this file
94 ## In addition ENVIRONMENT variables usage is possible, e.g
94 ## In addition ENVIRONMENT variables usage is possible, e.g
95 ## sqlalchemy.db1.url = {ENV_RC_DB_URL}
95 ## sqlalchemy.db1.url = {ENV_RC_DB_URL}
96
96
97 use = egg:rhodecode-enterprise-ce
97 use = egg:rhodecode-enterprise-ce
98
98
99 ## enable proxy prefix middleware, defined above
99 ## enable proxy prefix middleware, defined above
100 #filter-with = proxy-prefix
100 #filter-with = proxy-prefix
101
101
102 # During development the we want to have the debug toolbar enabled
102 # During development the we want to have the debug toolbar enabled
103 pyramid.includes =
103 pyramid.includes =
104 pyramid_debugtoolbar
104 pyramid_debugtoolbar
105 rhodecode.lib.middleware.request_wrapper
105 rhodecode.lib.middleware.request_wrapper
106
106
107 pyramid.reload_templates = true
107 pyramid.reload_templates = true
108
108
109 debugtoolbar.hosts = 0.0.0.0/0
109 debugtoolbar.hosts = 0.0.0.0/0
110 debugtoolbar.exclude_prefixes =
110 debugtoolbar.exclude_prefixes =
111 /css
111 /css
112 /fonts
112 /fonts
113 /images
113 /images
114 /js
114 /js
115
115
116 ## RHODECODE PLUGINS ##
116 ## RHODECODE PLUGINS ##
117 rhodecode.includes =
117 rhodecode.includes =
118 rhodecode.api
118 rhodecode.api
119
119
120
120
121 # api prefix url
121 # api prefix url
122 rhodecode.api.url = /_admin/api
122 rhodecode.api.url = /_admin/api
123
123
124
124
125 ## END RHODECODE PLUGINS ##
125 ## END RHODECODE PLUGINS ##
126
126
127 ## encryption key used to encrypt social plugin tokens,
127 ## encryption key used to encrypt social plugin tokens,
128 ## remote_urls with credentials etc, if not set it defaults to
128 ## remote_urls with credentials etc, if not set it defaults to
129 ## `beaker.session.secret`
129 ## `beaker.session.secret`
130 #rhodecode.encrypted_values.secret =
130 #rhodecode.encrypted_values.secret =
131
131
132 ## decryption strict mode (enabled by default). It controls if decryption raises
132 ## decryption strict mode (enabled by default). It controls if decryption raises
133 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
133 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
134 #rhodecode.encrypted_values.strict = false
134 #rhodecode.encrypted_values.strict = false
135
135
136 ## return gzipped responses from Rhodecode (static files/application)
136 ## return gzipped responses from RhodeCode (static files/application)
137 gzip_responses = false
137 gzip_responses = false
138
138
139 ## autogenerate javascript routes file on startup
139 ## auto-generate javascript routes file on startup
140 generate_js_files = false
140 generate_js_files = false
141
141
142 ## System global default language.
142 ## System global default language.
143 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
143 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
144 lang = en
144 lang = en
145
145
146 ## Perform a full repository scan and import on each server start.
146 ## Perform a full repository scan and import on each server start.
147 ## Settings this to true could lead to very long startup time.
147 ## Settings this to true could lead to very long startup time.
148 startup.import_repos = false
148 startup.import_repos = false
149
149
150 ## Uncomment and set this path to use archive download cache.
150 ## Uncomment and set this path to use archive download cache.
151 ## Once enabled, generated archives will be cached at this location
151 ## Once enabled, generated archives will be cached at this location
152 ## and served from the cache during subsequent requests for the same archive of
152 ## and served from the cache during subsequent requests for the same archive of
153 ## the repository.
153 ## the repository.
154 #archive_cache_dir = /tmp/tarballcache
154 #archive_cache_dir = /tmp/tarballcache
155
155
156 ## URL at which the application is running. This is used for bootstraping
156 ## URL at which the application is running. This is used for Bootstrapping
157 ## requests in context when no web request is available. Used in ishell, or
157 ## requests in context when no web request is available. Used in ishell, or
158 ## SSH calls. Set this for events to receive proper url for SSH calls.
158 ## SSH calls. Set this for events to receive proper url for SSH calls.
159 app.base_url = http://rhodecode.local
159 app.base_url = http://rhodecode.local
160
160
161 ## Unique application ID. Should be a random unique string for security.
161 ## Unique application ID. Should be a random unique string for security.
162 app_instance_uuid = rc-production
162 app_instance_uuid = rc-production
163
163
164 ## Cut off limit for large diffs (size in bytes). If overall diff size on
164 ## Cut off limit for large diffs (size in bytes). If overall diff size on
165 ## commit, or pull request exceeds this limit this diff will be displayed
165 ## commit, or pull request exceeds this limit this diff will be displayed
166 ## partially. E.g 512000 == 512Kb
166 ## partially. E.g 512000 == 512Kb
167 cut_off_limit_diff = 512000
167 cut_off_limit_diff = 512000
168
168
169 ## Cut off limit for large files inside diffs (size in bytes). Each individual
169 ## Cut off limit for large files inside diffs (size in bytes). Each individual
170 ## file inside diff which exceeds this limit will be displayed partially.
170 ## file inside diff which exceeds this limit will be displayed partially.
171 ## E.g 128000 == 128Kb
171 ## E.g 128000 == 128Kb
172 cut_off_limit_file = 128000
172 cut_off_limit_file = 128000
173
173
174 ## use cached version of vcs repositories everywhere. Recommended to be `true`
174 ## use cached version of vcs repositories everywhere. Recommended to be `true`
175 vcs_full_cache = true
175 vcs_full_cache = true
176
176
177 ## Force https in RhodeCode, fixes https redirects, assumes it's always https.
177 ## Force https in RhodeCode, fixes https redirects, assumes it's always https.
178 ## Normally this is controlled by proper http flags sent from http server
178 ## Normally this is controlled by proper http flags sent from http server
179 force_https = false
179 force_https = false
180
180
181 ## use Strict-Transport-Security headers
181 ## use Strict-Transport-Security headers
182 use_htsts = false
182 use_htsts = false
183
183
184 ## git rev filter option, --all is the default filter, if you need to
184 ## git rev filter option, --all is the default filter, if you need to
185 ## hide all refs in changelog switch this to --branches --tags
185 ## hide all refs in changelog switch this to --branches --tags
186 git_rev_filter = --branches --tags
186 git_rev_filter = --branches --tags
187
187
188 # Set to true if your repos are exposed using the dumb protocol
188 # Set to true if your repos are exposed using the dumb protocol
189 git_update_server_info = false
189 git_update_server_info = false
190
190
191 ## RSS/ATOM feed options
191 ## RSS/ATOM feed options
192 rss_cut_off_limit = 256000
192 rss_cut_off_limit = 256000
193 rss_items_per_page = 10
193 rss_items_per_page = 10
194 rss_include_diff = false
194 rss_include_diff = false
195
195
196 ## gist URL alias, used to create nicer urls for gist. This should be an
196 ## gist URL alias, used to create nicer urls for gist. This should be an
197 ## url that does rewrites to _admin/gists/{gistid}.
197 ## url that does rewrites to _admin/gists/{gistid}.
198 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
198 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
199 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
199 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
200 gist_alias_url =
200 gist_alias_url =
201
201
202 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
202 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
203 ## used for access.
203 ## used for access.
204 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
204 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
205 ## came from the the logged in user who own this authentication token.
205 ## came from the the logged in user who own this authentication token.
206 ## Additionally @TOKEN syntaxt can be used to bound the view to specific
206 ## Additionally @TOKEN syntax can be used to bound the view to specific
207 ## authentication token. Such view would be only accessible when used together
207 ## authentication token. Such view would be only accessible when used together
208 ## with this authentication token
208 ## with this authentication token
209 ##
209 ##
210 ## list of all views can be found under `/_admin/permissions/auth_token_access`
210 ## list of all views can be found under `/_admin/permissions/auth_token_access`
211 ## The list should be "," separated and on a single line.
211 ## The list should be "," separated and on a single line.
212 ##
212 ##
213 ## Most common views to enable:
213 ## Most common views to enable:
214 # RepoCommitsView:repo_commit_download
214 # RepoCommitsView:repo_commit_download
215 # RepoCommitsView:repo_commit_patch
215 # RepoCommitsView:repo_commit_patch
216 # RepoCommitsView:repo_commit_raw
216 # RepoCommitsView:repo_commit_raw
217 # RepoCommitsView:repo_commit_raw@TOKEN
217 # RepoCommitsView:repo_commit_raw@TOKEN
218 # RepoFilesView:repo_files_diff
218 # RepoFilesView:repo_files_diff
219 # RepoFilesView:repo_archivefile
219 # RepoFilesView:repo_archivefile
220 # RepoFilesView:repo_file_raw
220 # RepoFilesView:repo_file_raw
221 # GistView:*
221 # GistView:*
222 api_access_controllers_whitelist =
222 api_access_controllers_whitelist =
223
223
224 ## Default encoding used to convert from and to unicode
224 ## Default encoding used to convert from and to unicode
225 ## can be also a comma separated list of encoding in case of mixed encodings
225 ## can be also a comma separated list of encoding in case of mixed encodings
226 default_encoding = UTF-8
226 default_encoding = UTF-8
227
227
228 ## instance-id prefix
228 ## instance-id prefix
229 ## a prefix key for this instance used for cache invalidation when running
229 ## a prefix key for this instance used for cache invalidation when running
230 ## multiple instances of rhodecode, make sure it's globally unique for
230 ## multiple instances of RhodeCode, make sure it's globally unique for
231 ## all running rhodecode instances. Leave empty if you don't use it
231 ## all running RhodeCode instances. Leave empty if you don't use it
232 instance_id =
232 instance_id =
233
233
234 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
234 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
235 ## of an authentication plugin also if it is disabled by it's settings.
235 ## of an authentication plugin also if it is disabled by it's settings.
236 ## This could be useful if you are unable to log in to the system due to broken
236 ## This could be useful if you are unable to log in to the system due to broken
237 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
237 ## authentication settings. Then you can enable e.g. the internal RhodeCode auth
238 ## module to log in again and fix the settings.
238 ## module to log in again and fix the settings.
239 ##
239 ##
240 ## Available builtin plugin IDs (hash is part of the ID):
240 ## Available builtin plugin IDs (hash is part of the ID):
241 ## egg:rhodecode-enterprise-ce#rhodecode
241 ## egg:rhodecode-enterprise-ce#rhodecode
242 ## egg:rhodecode-enterprise-ce#pam
242 ## egg:rhodecode-enterprise-ce#pam
243 ## egg:rhodecode-enterprise-ce#ldap
243 ## egg:rhodecode-enterprise-ce#ldap
244 ## egg:rhodecode-enterprise-ce#jasig_cas
244 ## egg:rhodecode-enterprise-ce#jasig_cas
245 ## egg:rhodecode-enterprise-ce#headers
245 ## egg:rhodecode-enterprise-ce#headers
246 ## egg:rhodecode-enterprise-ce#crowd
246 ## egg:rhodecode-enterprise-ce#crowd
247 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
247 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
248
248
249 ## alternative return HTTP header for failed authentication. Default HTTP
249 ## alternative return HTTP header for failed authentication. Default HTTP
250 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
250 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
251 ## handling that causing a series of failed authentication calls.
251 ## handling that causing a series of failed authentication calls.
252 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
252 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
253 ## This will be served instead of default 401 on bad authnetication
253 ## This will be served instead of default 401 on bad authentication
254 auth_ret_code =
254 auth_ret_code =
255
255
256 ## use special detection method when serving auth_ret_code, instead of serving
256 ## use special detection method when serving auth_ret_code, instead of serving
257 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
257 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
258 ## and then serve auth_ret_code to clients
258 ## and then serve auth_ret_code to clients
259 auth_ret_code_detection = false
259 auth_ret_code_detection = false
260
260
261 ## locking return code. When repository is locked return this HTTP code. 2XX
261 ## locking return code. When repository is locked return this HTTP code. 2XX
262 ## codes don't break the transactions while 4XX codes do
262 ## codes don't break the transactions while 4XX codes do
263 lock_ret_code = 423
263 lock_ret_code = 423
264
264
265 ## allows to change the repository location in settings page
265 ## allows to change the repository location in settings page
266 allow_repo_location_change = true
266 allow_repo_location_change = true
267
267
268 ## allows to setup custom hooks in settings page
268 ## allows to setup custom hooks in settings page
269 allow_custom_hooks_settings = true
269 allow_custom_hooks_settings = true
270
270
271 ## Generated license token required for EE edition license.
271 ## Generated license token required for EE edition license.
272 ## New generated token value can be found in Admin > settings > license page.
272 ## New generated token value can be found in Admin > settings > license page.
273 license_token =
273 license_token =
274
274
275 ## supervisor connection uri, for managing supervisor and logs.
275 ## supervisor connection uri, for managing supervisor and logs.
276 supervisor.uri =
276 supervisor.uri =
277 ## supervisord group name/id we only want this RC instance to handle
277 ## supervisord group name/id we only want this RC instance to handle
278 supervisor.group_id = dev
278 supervisor.group_id = dev
279
279
280 ## Display extended labs settings
280 ## Display extended labs settings
281 labs_settings_active = true
281 labs_settings_active = true
282
282
283 ## Custom exception store path, defaults to TMPDIR
283 ## Custom exception store path, defaults to TMPDIR
284 ## This is used to store exception from RhodeCode in shared directory
284 ## This is used to store exception from RhodeCode in shared directory
285 #exception_tracker.store_path =
285 #exception_tracker.store_path =
286
286
287 ## File store configuration. This is used to store and serve uploaded files
288 file_store.enabled = true
289 ## Storage backend, available options are: local
290 file_store.backend = local
291 ## path to store the uploaded binaries
292 file_store.storage_path = %(here)s/data/file_store
293
287
294
288 ####################################
295 ####################################
289 ### CELERY CONFIG ####
296 ### CELERY CONFIG ####
290 ####################################
297 ####################################
291 ## run: /path/to/celery worker \
298 ## run: /path/to/celery worker \
292 ## -E --beat --app rhodecode.lib.celerylib.loader \
299 ## -E --beat --app rhodecode.lib.celerylib.loader \
293 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
300 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
294 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
301 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
295
302
296 use_celery = false
303 use_celery = false
297
304
298 ## connection url to the message broker (default rabbitmq)
305 ## connection url to the message broker (default rabbitmq)
299 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
306 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
300
307
301 ## maximum tasks to execute before worker restart
308 ## maximum tasks to execute before worker restart
302 celery.max_tasks_per_child = 100
309 celery.max_tasks_per_child = 100
303
310
304 ## tasks will never be sent to the queue, but executed locally instead.
311 ## tasks will never be sent to the queue, but executed locally instead.
305 celery.task_always_eager = false
312 celery.task_always_eager = false
306
313
307 #####################################
314 #####################################
308 ### DOGPILE CACHE ####
315 ### DOGPILE CACHE ####
309 #####################################
316 #####################################
310 ## Default cache dir for caches. Putting this into a ramdisk
317 ## Default cache dir for caches. Putting this into a ramdisk
311 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
318 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
312 ## large amount of space
319 ## large amount of space
313 cache_dir = %(here)s/data
320 cache_dir = %(here)s/data
314
321
315 ## `cache_perms` cache settings for permission tree, auth TTL.
322 ## `cache_perms` cache settings for permission tree, auth TTL.
316 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
323 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
317 rc_cache.cache_perms.expiration_time = 300
324 rc_cache.cache_perms.expiration_time = 300
318
325
319 ## alternative `cache_perms` redis backend with distributed lock
326 ## alternative `cache_perms` redis backend with distributed lock
320 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
327 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
321 #rc_cache.cache_perms.expiration_time = 300
328 #rc_cache.cache_perms.expiration_time = 300
322 ## redis_expiration_time needs to be greater then expiration_time
329 ## redis_expiration_time needs to be greater then expiration_time
323 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
330 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
324 #rc_cache.cache_perms.arguments.socket_timeout = 30
331 #rc_cache.cache_perms.arguments.socket_timeout = 30
325 #rc_cache.cache_perms.arguments.host = localhost
332 #rc_cache.cache_perms.arguments.host = localhost
326 #rc_cache.cache_perms.arguments.port = 6379
333 #rc_cache.cache_perms.arguments.port = 6379
327 #rc_cache.cache_perms.arguments.db = 0
334 #rc_cache.cache_perms.arguments.db = 0
335 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
328 #rc_cache.cache_perms.arguments.distributed_lock = true
336 #rc_cache.cache_perms.arguments.distributed_lock = true
329
337
330 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
338 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
331 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
339 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
332 rc_cache.cache_repo.expiration_time = 2592000
340 rc_cache.cache_repo.expiration_time = 2592000
333
341
334 ## alternative `cache_repo` redis backend with distributed lock
342 ## alternative `cache_repo` redis backend with distributed lock
335 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
343 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
336 #rc_cache.cache_repo.expiration_time = 2592000
344 #rc_cache.cache_repo.expiration_time = 2592000
337 ## redis_expiration_time needs to be greater then expiration_time
345 ## redis_expiration_time needs to be greater then expiration_time
338 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
346 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
339 #rc_cache.cache_repo.arguments.socket_timeout = 30
347 #rc_cache.cache_repo.arguments.socket_timeout = 30
340 #rc_cache.cache_repo.arguments.host = localhost
348 #rc_cache.cache_repo.arguments.host = localhost
341 #rc_cache.cache_repo.arguments.port = 6379
349 #rc_cache.cache_repo.arguments.port = 6379
342 #rc_cache.cache_repo.arguments.db = 1
350 #rc_cache.cache_repo.arguments.db = 1
351 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
343 #rc_cache.cache_repo.arguments.distributed_lock = true
352 #rc_cache.cache_repo.arguments.distributed_lock = true
344
353
345 ## cache settings for SQL queries, this needs to use memory type backend
354 ## cache settings for SQL queries, this needs to use memory type backend
346 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
355 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
347 rc_cache.sql_cache_short.expiration_time = 30
356 rc_cache.sql_cache_short.expiration_time = 30
348
357
349 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
358 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
350 ## type backend as the objects kept are not pickle serializable
359 ## type backend as the objects kept are not pickle serializable
351 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
360 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
352 ## by default we use 96H, this is using invalidation on push anyway
361 ## by default we use 96H, this is using invalidation on push anyway
353 rc_cache.cache_repo_longterm.expiration_time = 345600
362 rc_cache.cache_repo_longterm.expiration_time = 345600
354 ## max items in LRU cache, reduce this number to save memory, and expire last used
363 ## max items in LRU cache, reduce this number to save memory, and expire last used
355 ## cached objects
364 ## cached objects
356 rc_cache.cache_repo_longterm.max_size = 10000
365 rc_cache.cache_repo_longterm.max_size = 10000
357
366
358
367
359 ####################################
368 ####################################
360 ### BEAKER SESSION ####
369 ### BEAKER SESSION ####
361 ####################################
370 ####################################
362
371
363 ## .session.type is type of storage options for the session, current allowed
372 ## .session.type is type of storage options for the session, current allowed
364 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
373 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
365 beaker.session.type = file
374 beaker.session.type = file
366 beaker.session.data_dir = %(here)s/data/sessions
375 beaker.session.data_dir = %(here)s/data/sessions
367
376
368 ## db based session, fast, and allows easy management over logged in users
377 ## db based session, fast, and allows easy management over logged in users
369 #beaker.session.type = ext:database
378 #beaker.session.type = ext:database
370 #beaker.session.table_name = db_session
379 #beaker.session.table_name = db_session
371 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
380 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
372 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
381 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
373 #beaker.session.sa.pool_recycle = 3600
382 #beaker.session.sa.pool_recycle = 3600
374 #beaker.session.sa.echo = false
383 #beaker.session.sa.echo = false
375
384
376 beaker.session.key = rhodecode
385 beaker.session.key = rhodecode
377 beaker.session.secret = develop-rc-uytcxaz
386 beaker.session.secret = develop-rc-uytcxaz
378 beaker.session.lock_dir = %(here)s/data/sessions/lock
387 beaker.session.lock_dir = %(here)s/data/sessions/lock
379
388
380 ## Secure encrypted cookie. Requires AES and AES python libraries
389 ## Secure encrypted cookie. Requires AES and AES python libraries
381 ## you must disable beaker.session.secret to use this
390 ## you must disable beaker.session.secret to use this
382 #beaker.session.encrypt_key = key_for_encryption
391 #beaker.session.encrypt_key = key_for_encryption
383 #beaker.session.validate_key = validation_key
392 #beaker.session.validate_key = validation_key
384
393
385 ## sets session as invalid(also logging out user) if it haven not been
394 ## sets session as invalid(also logging out user) if it haven not been
386 ## accessed for given amount of time in seconds
395 ## accessed for given amount of time in seconds
387 beaker.session.timeout = 2592000
396 beaker.session.timeout = 2592000
388 beaker.session.httponly = true
397 beaker.session.httponly = true
389 ## Path to use for the cookie. Set to prefix if you use prefix middleware
398 ## Path to use for the cookie. Set to prefix if you use prefix middleware
390 #beaker.session.cookie_path = /custom_prefix
399 #beaker.session.cookie_path = /custom_prefix
391
400
392 ## uncomment for https secure cookie
401 ## uncomment for https secure cookie
393 beaker.session.secure = false
402 beaker.session.secure = false
394
403
395 ## auto save the session to not to use .save()
404 ## auto save the session to not to use .save()
396 beaker.session.auto = false
405 beaker.session.auto = false
397
406
398 ## default cookie expiration time in seconds, set to `true` to set expire
407 ## default cookie expiration time in seconds, set to `true` to set expire
399 ## at browser close
408 ## at browser close
400 #beaker.session.cookie_expires = 3600
409 #beaker.session.cookie_expires = 3600
401
410
402 ###################################
411 ###################################
403 ## SEARCH INDEXING CONFIGURATION ##
412 ## SEARCH INDEXING CONFIGURATION ##
404 ###################################
413 ###################################
405 ## Full text search indexer is available in rhodecode-tools under
414 ## Full text search indexer is available in rhodecode-tools under
406 ## `rhodecode-tools index` command
415 ## `rhodecode-tools index` command
407
416
408 ## WHOOSH Backend, doesn't require additional services to run
417 ## WHOOSH Backend, doesn't require additional services to run
409 ## it works good with few dozen repos
418 ## it works good with few dozen repos
410 search.module = rhodecode.lib.index.whoosh
419 search.module = rhodecode.lib.index.whoosh
411 search.location = %(here)s/data/index
420 search.location = %(here)s/data/index
412
421
413 ########################################
422 ########################################
414 ### CHANNELSTREAM CONFIG ####
423 ### CHANNELSTREAM CONFIG ####
415 ########################################
424 ########################################
416 ## channelstream enables persistent connections and live notification
425 ## channelstream enables persistent connections and live notification
417 ## in the system. It's also used by the chat system
426 ## in the system. It's also used by the chat system
418
427
419 channelstream.enabled = false
428 channelstream.enabled = false
420
429
421 ## server address for channelstream server on the backend
430 ## server address for channelstream server on the backend
422 channelstream.server = 127.0.0.1:9800
431 channelstream.server = 127.0.0.1:9800
423
432
424 ## location of the channelstream server from outside world
433 ## location of the channelstream server from outside world
425 ## use ws:// for http or wss:// for https. This address needs to be handled
434 ## use ws:// for http or wss:// for https. This address needs to be handled
426 ## by external HTTP server such as Nginx or Apache
435 ## by external HTTP server such as Nginx or Apache
427 ## see nginx/apache configuration examples in our docs
436 ## see Nginx/Apache configuration examples in our docs
428 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
437 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
429 channelstream.secret = secret
438 channelstream.secret = secret
430 channelstream.history.location = %(here)s/channelstream_history
439 channelstream.history.location = %(here)s/channelstream_history
431
440
432 ## Internal application path that Javascript uses to connect into.
441 ## Internal application path that Javascript uses to connect into.
433 ## If you use proxy-prefix the prefix should be added before /_channelstream
442 ## If you use proxy-prefix the prefix should be added before /_channelstream
434 channelstream.proxy_path = /_channelstream
443 channelstream.proxy_path = /_channelstream
435
444
436
445
437 ###################################
446 ###################################
438 ## APPENLIGHT CONFIG ##
447 ## APPENLIGHT CONFIG ##
439 ###################################
448 ###################################
440
449
441 ## Appenlight is tailored to work with RhodeCode, see
450 ## Appenlight is tailored to work with RhodeCode, see
442 ## http://appenlight.com for details how to obtain an account
451 ## http://appenlight.com for details how to obtain an account
443
452
444 ## appenlight integration enabled
453 ## Appenlight integration enabled
445 appenlight = false
454 appenlight = false
446
455
447 appenlight.server_url = https://api.appenlight.com
456 appenlight.server_url = https://api.appenlight.com
448 appenlight.api_key = YOUR_API_KEY
457 appenlight.api_key = YOUR_API_KEY
449 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
458 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
450
459
451 # used for JS client
460 ## used for JS client
452 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
461 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
453
462
454 ## TWEAK AMOUNT OF INFO SENT HERE
463 ## TWEAK AMOUNT OF INFO SENT HERE
455
464
456 ## enables 404 error logging (default False)
465 ## enables 404 error logging (default False)
457 appenlight.report_404 = false
466 appenlight.report_404 = false
458
467
459 ## time in seconds after request is considered being slow (default 1)
468 ## time in seconds after request is considered being slow (default 1)
460 appenlight.slow_request_time = 1
469 appenlight.slow_request_time = 1
461
470
462 ## record slow requests in application
471 ## record slow requests in application
463 ## (needs to be enabled for slow datastore recording and time tracking)
472 ## (needs to be enabled for slow datastore recording and time tracking)
464 appenlight.slow_requests = true
473 appenlight.slow_requests = true
465
474
466 ## enable hooking to application loggers
475 ## enable hooking to application loggers
467 appenlight.logging = true
476 appenlight.logging = true
468
477
469 ## minimum log level for log capture
478 ## minimum log level for log capture
470 appenlight.logging.level = WARNING
479 appenlight.logging.level = WARNING
471
480
472 ## send logs only from erroneous/slow requests
481 ## send logs only from erroneous/slow requests
473 ## (saves API quota for intensive logging)
482 ## (saves API quota for intensive logging)
474 appenlight.logging_on_error = false
483 appenlight.logging_on_error = false
475
484
476 ## list of additonal keywords that should be grabbed from environ object
485 ## list of additional keywords that should be grabbed from environ object
477 ## can be string with comma separated list of words in lowercase
486 ## can be string with comma separated list of words in lowercase
478 ## (by default client will always send following info:
487 ## (by default client will always send following info:
479 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
488 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
480 ## start with HTTP* this list be extended with additional keywords here
489 ## start with HTTP* this list be extended with additional keywords here
481 appenlight.environ_keys_whitelist =
490 appenlight.environ_keys_whitelist =
482
491
483 ## list of keywords that should be blanked from request object
492 ## list of keywords that should be blanked from request object
484 ## can be string with comma separated list of words in lowercase
493 ## can be string with comma separated list of words in lowercase
485 ## (by default client will always blank keys that contain following words
494 ## (by default client will always blank keys that contain following words
486 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
495 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
487 ## this list be extended with additional keywords set here
496 ## this list be extended with additional keywords set here
488 appenlight.request_keys_blacklist =
497 appenlight.request_keys_blacklist =
489
498
490 ## list of namespaces that should be ignores when gathering log entries
499 ## list of namespaces that should be ignores when gathering log entries
491 ## can be string with comma separated list of namespaces
500 ## can be string with comma separated list of namespaces
492 ## (by default the client ignores own entries: appenlight_client.client)
501 ## (by default the client ignores own entries: appenlight_client.client)
493 appenlight.log_namespace_blacklist =
502 appenlight.log_namespace_blacklist =
494
503
495 # enable debug style page
504 # enable debug style page
496 debug_style = true
505 debug_style = true
497
506
498 ###########################################
507 ###########################################
499 ### MAIN RHODECODE DATABASE CONFIG ###
508 ### MAIN RHODECODE DATABASE CONFIG ###
500 ###########################################
509 ###########################################
501 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
510 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
502 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
511 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
503 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
512 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
504 # pymysql is an alternative driver for MySQL, use in case of problems with default one
513 # pymysql is an alternative driver for MySQL, use in case of problems with default one
505 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
514 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
506
515
507 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
516 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
508
517
509 # see sqlalchemy docs for other advanced settings
518 # see sqlalchemy docs for other advanced settings
510
519
511 ## print the sql statements to output
520 ## print the sql statements to output
512 sqlalchemy.db1.echo = false
521 sqlalchemy.db1.echo = false
513 ## recycle the connections after this amount of seconds
522 ## recycle the connections after this amount of seconds
514 sqlalchemy.db1.pool_recycle = 3600
523 sqlalchemy.db1.pool_recycle = 3600
515 sqlalchemy.db1.convert_unicode = true
524 sqlalchemy.db1.convert_unicode = true
516
525
517 ## the number of connections to keep open inside the connection pool.
526 ## the number of connections to keep open inside the connection pool.
518 ## 0 indicates no limit
527 ## 0 indicates no limit
519 #sqlalchemy.db1.pool_size = 5
528 #sqlalchemy.db1.pool_size = 5
520
529
521 ## the number of connections to allow in connection pool "overflow", that is
530 ## the number of connections to allow in connection pool "overflow", that is
522 ## connections that can be opened above and beyond the pool_size setting,
531 ## connections that can be opened above and beyond the pool_size setting,
523 ## which defaults to five.
532 ## which defaults to five.
524 #sqlalchemy.db1.max_overflow = 10
533 #sqlalchemy.db1.max_overflow = 10
525
534
526 ## Connection check ping, used to detect broken database connections
535 ## Connection check ping, used to detect broken database connections
527 ## could be enabled to better handle cases if MySQL has gone away errors
536 ## could be enabled to better handle cases if MySQL has gone away errors
528 #sqlalchemy.db1.ping_connection = true
537 #sqlalchemy.db1.ping_connection = true
529
538
530 ##################
539 ##################
531 ### VCS CONFIG ###
540 ### VCS CONFIG ###
532 ##################
541 ##################
533 vcs.server.enable = true
542 vcs.server.enable = true
534 vcs.server = localhost:9900
543 vcs.server = localhost:9900
535
544
536 ## Web server connectivity protocol, responsible for web based VCS operatations
545 ## Web server connectivity protocol, responsible for web based VCS operations
537 ## Available protocols are:
546 ## Available protocols are:
538 ## `http` - use http-rpc backend (default)
547 ## `http` - use http-rpc backend (default)
539 vcs.server.protocol = http
548 vcs.server.protocol = http
540
549
541 ## Push/Pull operations protocol, available options are:
550 ## Push/Pull operations protocol, available options are:
542 ## `http` - use http-rpc backend (default)
551 ## `http` - use http-rpc backend (default)
543 vcs.scm_app_implementation = http
552 vcs.scm_app_implementation = http
544
553
545 ## Push/Pull operations hooks protocol, available options are:
554 ## Push/Pull operations hooks protocol, available options are:
546 ## `http` - use http-rpc backend (default)
555 ## `http` - use http-rpc backend (default)
547 vcs.hooks.protocol = http
556 vcs.hooks.protocol = http
548
557
549 ## Host on which this instance is listening for hooks. If vcsserver is in other location
558 ## Host on which this instance is listening for hooks. If vcsserver is in other location
550 ## this should be adjusted.
559 ## this should be adjusted.
551 vcs.hooks.host = 127.0.0.1
560 vcs.hooks.host = 127.0.0.1
552
561
553 vcs.server.log_level = debug
562 vcs.server.log_level = debug
554 ## Start VCSServer with this instance as a subprocess, useful for development
563 ## Start VCSServer with this instance as a subprocess, useful for development
555 vcs.start_server = false
564 vcs.start_server = false
556
565
557 ## List of enabled VCS backends, available options are:
566 ## List of enabled VCS backends, available options are:
558 ## `hg` - mercurial
567 ## `hg` - mercurial
559 ## `git` - git
568 ## `git` - git
560 ## `svn` - subversion
569 ## `svn` - subversion
561 vcs.backends = hg, git, svn
570 vcs.backends = hg, git, svn
562
571
563 vcs.connection_timeout = 3600
572 vcs.connection_timeout = 3600
564 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
573 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
565 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
574 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
566 #vcs.svn.compatible_version = pre-1.8-compatible
575 #vcs.svn.compatible_version = pre-1.8-compatible
567
576
568
577
569 ############################################################
578 ############################################################
570 ### Subversion proxy support (mod_dav_svn) ###
579 ### Subversion proxy support (mod_dav_svn) ###
571 ### Maps RhodeCode repo groups into SVN paths for Apache ###
580 ### Maps RhodeCode repo groups into SVN paths for Apache ###
572 ############################################################
581 ############################################################
573 ## Enable or disable the config file generation.
582 ## Enable or disable the config file generation.
574 svn.proxy.generate_config = false
583 svn.proxy.generate_config = false
575 ## Generate config file with `SVNListParentPath` set to `On`.
584 ## Generate config file with `SVNListParentPath` set to `On`.
576 svn.proxy.list_parent_path = true
585 svn.proxy.list_parent_path = true
577 ## Set location and file name of generated config file.
586 ## Set location and file name of generated config file.
578 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
587 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
579 ## alternative mod_dav config template. This needs to be a mako template
588 ## alternative mod_dav config template. This needs to be a mako template
580 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
589 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
581 ## Used as a prefix to the `Location` block in the generated config file.
590 ## Used as a prefix to the `Location` block in the generated config file.
582 ## In most cases it should be set to `/`.
591 ## In most cases it should be set to `/`.
583 svn.proxy.location_root = /
592 svn.proxy.location_root = /
584 ## Command to reload the mod dav svn configuration on change.
593 ## Command to reload the mod dav svn configuration on change.
585 ## Example: `/etc/init.d/apache2 reload`
594 ## Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
595 ## Make sure user who runs RhodeCode process is allowed to reload Apache
586 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
596 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
587 ## If the timeout expires before the reload command finishes, the command will
597 ## If the timeout expires before the reload command finishes, the command will
588 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
598 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
589 #svn.proxy.reload_timeout = 10
599 #svn.proxy.reload_timeout = 10
590
600
591 ############################################################
601 ############################################################
592 ### SSH Support Settings ###
602 ### SSH Support Settings ###
593 ############################################################
603 ############################################################
594
604
595 ## Defines if a custom authorized_keys file should be created and written on
605 ## Defines if a custom authorized_keys file should be created and written on
596 ## any change user ssh keys. Setting this to false also disables posibility
606 ## any change user ssh keys. Setting this to false also disables possibility
597 ## of adding SSH keys by users from web interface. Super admins can still
607 ## of adding SSH keys by users from web interface. Super admins can still
598 ## manage SSH Keys.
608 ## manage SSH Keys.
599 ssh.generate_authorized_keyfile = false
609 ssh.generate_authorized_keyfile = false
600
610
601 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
611 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
602 # ssh.authorized_keys_ssh_opts =
612 # ssh.authorized_keys_ssh_opts =
603
613
604 ## Path to the authrozied_keys file where the generate entries are placed.
614 ## Path to the authorized_keys file where the generate entries are placed.
605 ## It is possible to have multiple key files specified in `sshd_config` e.g.
615 ## It is possible to have multiple key files specified in `sshd_config` e.g.
606 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
616 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
607 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
617 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
608
618
609 ## Command to execute the SSH wrapper. The binary is available in the
619 ## Command to execute the SSH wrapper. The binary is available in the
610 ## rhodecode installation directory.
620 ## RhodeCode installation directory.
611 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
621 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
612 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
622 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
613
623
614 ## Allow shell when executing the ssh-wrapper command
624 ## Allow shell when executing the ssh-wrapper command
615 ssh.wrapper_cmd_allow_shell = false
625 ssh.wrapper_cmd_allow_shell = false
616
626
617 ## Enables logging, and detailed output send back to the client during SSH
627 ## Enables logging, and detailed output send back to the client during SSH
618 ## operations. Usefull for debugging, shouldn't be used in production.
628 ## operations. Useful for debugging, shouldn't be used in production.
619 ssh.enable_debug_logging = true
629 ssh.enable_debug_logging = true
620
630
621 ## Paths to binary executable, by default they are the names, but we can
631 ## Paths to binary executable, by default they are the names, but we can
622 ## override them if we want to use a custom one
632 ## override them if we want to use a custom one
623 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
633 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
624 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
634 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
625 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
635 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
626
636
637 ## Enables SSH key generator web interface. Disabling this still allows users
638 ## to add their own keys.
639 ssh.enable_ui_key_generator = true
640
627
641
628 ## Dummy marker to add new entries after.
642 ## Dummy marker to add new entries after.
629 ## Add any custom entries below. Please don't remove.
643 ## Add any custom entries below. Please don't remove.
630 custom.conf = 1
644 custom.conf = 1
631
645
632
646
633 ################################
647 ################################
634 ### LOGGING CONFIGURATION ####
648 ### LOGGING CONFIGURATION ####
635 ################################
649 ################################
636 [loggers]
650 [loggers]
637 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
651 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
638
652
639 [handlers]
653 [handlers]
640 keys = console, console_sql
654 keys = console, console_sql
641
655
642 [formatters]
656 [formatters]
643 keys = generic, color_formatter, color_formatter_sql
657 keys = generic, color_formatter, color_formatter_sql
644
658
645 #############
659 #############
646 ## LOGGERS ##
660 ## LOGGERS ##
647 #############
661 #############
648 [logger_root]
662 [logger_root]
649 level = NOTSET
663 level = NOTSET
650 handlers = console
664 handlers = console
651
665
652 [logger_sqlalchemy]
666 [logger_sqlalchemy]
653 level = INFO
667 level = INFO
654 handlers = console_sql
668 handlers = console_sql
655 qualname = sqlalchemy.engine
669 qualname = sqlalchemy.engine
656 propagate = 0
670 propagate = 0
657
671
658 [logger_beaker]
672 [logger_beaker]
659 level = DEBUG
673 level = DEBUG
660 handlers =
674 handlers =
661 qualname = beaker.container
675 qualname = beaker.container
662 propagate = 1
676 propagate = 1
663
677
664 [logger_rhodecode]
678 [logger_rhodecode]
665 level = DEBUG
679 level = DEBUG
666 handlers =
680 handlers =
667 qualname = rhodecode
681 qualname = rhodecode
668 propagate = 1
682 propagate = 1
669
683
670 [logger_ssh_wrapper]
684 [logger_ssh_wrapper]
671 level = DEBUG
685 level = DEBUG
672 handlers =
686 handlers =
673 qualname = ssh_wrapper
687 qualname = ssh_wrapper
674 propagate = 1
688 propagate = 1
675
689
676 [logger_celery]
690 [logger_celery]
677 level = DEBUG
691 level = DEBUG
678 handlers =
692 handlers =
679 qualname = celery
693 qualname = celery
680
694
681
695
682 ##############
696 ##############
683 ## HANDLERS ##
697 ## HANDLERS ##
684 ##############
698 ##############
685
699
686 [handler_console]
700 [handler_console]
687 class = StreamHandler
701 class = StreamHandler
688 args = (sys.stderr, )
702 args = (sys.stderr, )
689 level = DEBUG
703 level = DEBUG
690 formatter = color_formatter
704 formatter = color_formatter
691
705
692 [handler_console_sql]
706 [handler_console_sql]
693 # "level = DEBUG" logs SQL queries and results.
707 # "level = DEBUG" logs SQL queries and results.
694 # "level = INFO" logs SQL queries.
708 # "level = INFO" logs SQL queries.
695 # "level = WARN" logs neither. (Recommended for production systems.)
709 # "level = WARN" logs neither. (Recommended for production systems.)
696 class = StreamHandler
710 class = StreamHandler
697 args = (sys.stderr, )
711 args = (sys.stderr, )
698 level = WARN
712 level = WARN
699 formatter = color_formatter_sql
713 formatter = color_formatter_sql
700
714
701 ################
715 ################
702 ## FORMATTERS ##
716 ## FORMATTERS ##
703 ################
717 ################
704
718
705 [formatter_generic]
719 [formatter_generic]
706 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
720 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
707 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
721 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
708 datefmt = %Y-%m-%d %H:%M:%S
722 datefmt = %Y-%m-%d %H:%M:%S
709
723
710 [formatter_color_formatter]
724 [formatter_color_formatter]
711 class = rhodecode.lib.logging_formatter.ColorFormatter
725 class = rhodecode.lib.logging_formatter.ColorFormatter
712 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
726 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
713 datefmt = %Y-%m-%d %H:%M:%S
727 datefmt = %Y-%m-%d %H:%M:%S
714
728
715 [formatter_color_formatter_sql]
729 [formatter_color_formatter_sql]
716 class = rhodecode.lib.logging_formatter.ColorFormatterSql
730 class = rhodecode.lib.logging_formatter.ColorFormatterSql
717 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
731 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
718 datefmt = %Y-%m-%d %H:%M:%S
732 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,691 +1,705 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 ################################################################################
5 ################################################################################
6
6
7 [DEFAULT]
7 [DEFAULT]
8 ## Debug flag sets all loggers to debug, and enables request tracking
8 ## Debug flag sets all loggers to debug, and enables request tracking
9 debug = false
9 debug = false
10
10
11 ################################################################################
11 ################################################################################
12 ## EMAIL CONFIGURATION ##
12 ## EMAIL CONFIGURATION ##
13 ## Uncomment and replace with the email address which should receive ##
13 ## Uncomment and replace with the email address which should receive ##
14 ## any error reports after an application crash ##
14 ## any error reports after an application crash ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 ################################################################################
16 ################################################################################
17
17
18 ## prefix all emails subjects with given prefix, helps filtering out emails
18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 #email_prefix = [RhodeCode]
19 #email_prefix = [RhodeCode]
20
20
21 ## email FROM address all mails will be sent
21 ## email FROM address all mails will be sent
22 #app_email_from = rhodecode-noreply@localhost
22 #app_email_from = rhodecode-noreply@localhost
23
23
24 #smtp_server = mail.server.com
24 #smtp_server = mail.server.com
25 #smtp_username =
25 #smtp_username =
26 #smtp_password =
26 #smtp_password =
27 #smtp_port =
27 #smtp_port =
28 #smtp_use_tls = false
28 #smtp_use_tls = false
29 #smtp_use_ssl = true
29 #smtp_use_ssl = true
30
30
31 [server:main]
31 [server:main]
32 ## COMMON ##
32 ## COMMON ##
33 host = 127.0.0.1
33 host = 127.0.0.1
34 port = 5000
34 port = 5000
35
35
36 ###########################################################
36 ###########################################################
37 ## WAITRESS WSGI SERVER - Recommended for Development ####
37 ## WAITRESS WSGI SERVER - Recommended for Development ####
38 ###########################################################
38 ###########################################################
39
39
40 #use = egg:waitress#main
40 #use = egg:waitress#main
41 ## number of worker threads
41 ## number of worker threads
42 #threads = 5
42 #threads = 5
43 ## MAX BODY SIZE 100GB
43 ## MAX BODY SIZE 100GB
44 #max_request_body_size = 107374182400
44 #max_request_body_size = 107374182400
45 ## Use poll instead of select, fixes file descriptors limits problems.
45 ## Use poll instead of select, fixes file descriptors limits problems.
46 ## May not work on old windows systems.
46 ## May not work on old windows systems.
47 #asyncore_use_poll = true
47 #asyncore_use_poll = true
48
48
49
49
50 ##########################
50 ##########################
51 ## GUNICORN WSGI SERVER ##
51 ## GUNICORN WSGI SERVER ##
52 ##########################
52 ##########################
53 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
53 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
54
54
55 use = egg:gunicorn#main
55 use = egg:gunicorn#main
56 ## Sets the number of process workers. More workers means more concurent connections
56 ## Sets the number of process workers. More workers means more concurrent connections
57 ## RhodeCode can handle at the same time. Each additional worker also it increases
57 ## RhodeCode can handle at the same time. Each additional worker also it increases
58 ## memory usage as each has it's own set of caches.
58 ## memory usage as each has it's own set of caches.
59 ## Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
59 ## Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
60 ## than 8-10 unless for really big deployments .e.g 700-1000 users.
60 ## than 8-10 unless for really big deployments .e.g 700-1000 users.
61 ## `instance_id = *` must be set in the [app:main] section below (which is the default)
61 ## `instance_id = *` must be set in the [app:main] section below (which is the default)
62 ## when using more than 1 worker.
62 ## when using more than 1 worker.
63 workers = 2
63 workers = 2
64 ## process name visible in process list
64 ## process name visible in process list
65 proc_name = rhodecode
65 proc_name = rhodecode
66 ## type of worker class, one of sync, gevent
66 ## type of worker class, one of sync, gevent
67 ## recommended for bigger setup is using of of other than sync one
67 ## recommended for bigger setup is using of of other than sync one
68 worker_class = gevent
68 worker_class = gevent
69 ## The maximum number of simultaneous clients. Valid only for Gevent
69 ## The maximum number of simultaneous clients. Valid only for Gevent
70 worker_connections = 10
70 worker_connections = 10
71 ## max number of requests that worker will handle before being gracefully
71 ## max number of requests that worker will handle before being gracefully
72 ## restarted, could prevent memory leaks
72 ## restarted, could prevent memory leaks
73 max_requests = 1000
73 max_requests = 1000
74 max_requests_jitter = 30
74 max_requests_jitter = 30
75 ## amount of time a worker can spend with handling a request before it
75 ## amount of time a worker can spend with handling a request before it
76 ## gets killed and restarted. Set to 6hrs
76 ## gets killed and restarted. Set to 6hrs
77 timeout = 21600
77 timeout = 21600
78
78
79
79
80 ## prefix middleware for RhodeCode.
80 ## prefix middleware for RhodeCode.
81 ## recommended when using proxy setup.
81 ## recommended when using proxy setup.
82 ## allows to set RhodeCode under a prefix in server.
82 ## allows to set RhodeCode under a prefix in server.
83 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
83 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
84 ## And set your prefix like: `prefix = /custom_prefix`
84 ## And set your prefix like: `prefix = /custom_prefix`
85 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
85 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
86 ## to make your cookies only work on prefix url
86 ## to make your cookies only work on prefix url
87 [filter:proxy-prefix]
87 [filter:proxy-prefix]
88 use = egg:PasteDeploy#prefix
88 use = egg:PasteDeploy#prefix
89 prefix = /
89 prefix = /
90
90
91 [app:main]
91 [app:main]
92 ## The %(here)s variable will be replaced with the absolute path of parent directory
92 ## The %(here)s variable will be replaced with the absolute path of parent directory
93 ## of this file
93 ## of this file
94 ## In addition ENVIRONMENT variables usage is possible, e.g
94 ## In addition ENVIRONMENT variables usage is possible, e.g
95 ## sqlalchemy.db1.url = {ENV_RC_DB_URL}
95 ## sqlalchemy.db1.url = {ENV_RC_DB_URL}
96
96
97 use = egg:rhodecode-enterprise-ce
97 use = egg:rhodecode-enterprise-ce
98
98
99 ## enable proxy prefix middleware, defined above
99 ## enable proxy prefix middleware, defined above
100 #filter-with = proxy-prefix
100 #filter-with = proxy-prefix
101
101
102 ## encryption key used to encrypt social plugin tokens,
102 ## encryption key used to encrypt social plugin tokens,
103 ## remote_urls with credentials etc, if not set it defaults to
103 ## remote_urls with credentials etc, if not set it defaults to
104 ## `beaker.session.secret`
104 ## `beaker.session.secret`
105 #rhodecode.encrypted_values.secret =
105 #rhodecode.encrypted_values.secret =
106
106
107 ## decryption strict mode (enabled by default). It controls if decryption raises
107 ## decryption strict mode (enabled by default). It controls if decryption raises
108 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
108 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
109 #rhodecode.encrypted_values.strict = false
109 #rhodecode.encrypted_values.strict = false
110
110
111 ## return gzipped responses from Rhodecode (static files/application)
111 ## return gzipped responses from RhodeCode (static files/application)
112 gzip_responses = false
112 gzip_responses = false
113
113
114 ## autogenerate javascript routes file on startup
114 ## auto-generate javascript routes file on startup
115 generate_js_files = false
115 generate_js_files = false
116
116
117 ## System global default language.
117 ## System global default language.
118 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
118 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
119 lang = en
119 lang = en
120
120
121 ## Perform a full repository scan and import on each server start.
121 ## Perform a full repository scan and import on each server start.
122 ## Settings this to true could lead to very long startup time.
122 ## Settings this to true could lead to very long startup time.
123 startup.import_repos = false
123 startup.import_repos = false
124
124
125 ## Uncomment and set this path to use archive download cache.
125 ## Uncomment and set this path to use archive download cache.
126 ## Once enabled, generated archives will be cached at this location
126 ## Once enabled, generated archives will be cached at this location
127 ## and served from the cache during subsequent requests for the same archive of
127 ## and served from the cache during subsequent requests for the same archive of
128 ## the repository.
128 ## the repository.
129 #archive_cache_dir = /tmp/tarballcache
129 #archive_cache_dir = /tmp/tarballcache
130
130
131 ## URL at which the application is running. This is used for bootstraping
131 ## URL at which the application is running. This is used for Bootstrapping
132 ## requests in context when no web request is available. Used in ishell, or
132 ## requests in context when no web request is available. Used in ishell, or
133 ## SSH calls. Set this for events to receive proper url for SSH calls.
133 ## SSH calls. Set this for events to receive proper url for SSH calls.
134 app.base_url = http://rhodecode.local
134 app.base_url = http://rhodecode.local
135
135
136 ## Unique application ID. Should be a random unique string for security.
136 ## Unique application ID. Should be a random unique string for security.
137 app_instance_uuid = rc-production
137 app_instance_uuid = rc-production
138
138
139 ## Cut off limit for large diffs (size in bytes). If overall diff size on
139 ## Cut off limit for large diffs (size in bytes). If overall diff size on
140 ## commit, or pull request exceeds this limit this diff will be displayed
140 ## commit, or pull request exceeds this limit this diff will be displayed
141 ## partially. E.g 512000 == 512Kb
141 ## partially. E.g 512000 == 512Kb
142 cut_off_limit_diff = 512000
142 cut_off_limit_diff = 512000
143
143
144 ## Cut off limit for large files inside diffs (size in bytes). Each individual
144 ## Cut off limit for large files inside diffs (size in bytes). Each individual
145 ## file inside diff which exceeds this limit will be displayed partially.
145 ## file inside diff which exceeds this limit will be displayed partially.
146 ## E.g 128000 == 128Kb
146 ## E.g 128000 == 128Kb
147 cut_off_limit_file = 128000
147 cut_off_limit_file = 128000
148
148
149 ## use cached version of vcs repositories everywhere. Recommended to be `true`
149 ## use cached version of vcs repositories everywhere. Recommended to be `true`
150 vcs_full_cache = true
150 vcs_full_cache = true
151
151
152 ## Force https in RhodeCode, fixes https redirects, assumes it's always https.
152 ## Force https in RhodeCode, fixes https redirects, assumes it's always https.
153 ## Normally this is controlled by proper http flags sent from http server
153 ## Normally this is controlled by proper http flags sent from http server
154 force_https = false
154 force_https = false
155
155
156 ## use Strict-Transport-Security headers
156 ## use Strict-Transport-Security headers
157 use_htsts = false
157 use_htsts = false
158
158
159 ## git rev filter option, --all is the default filter, if you need to
159 ## git rev filter option, --all is the default filter, if you need to
160 ## hide all refs in changelog switch this to --branches --tags
160 ## hide all refs in changelog switch this to --branches --tags
161 git_rev_filter = --branches --tags
161 git_rev_filter = --branches --tags
162
162
163 # Set to true if your repos are exposed using the dumb protocol
163 # Set to true if your repos are exposed using the dumb protocol
164 git_update_server_info = false
164 git_update_server_info = false
165
165
166 ## RSS/ATOM feed options
166 ## RSS/ATOM feed options
167 rss_cut_off_limit = 256000
167 rss_cut_off_limit = 256000
168 rss_items_per_page = 10
168 rss_items_per_page = 10
169 rss_include_diff = false
169 rss_include_diff = false
170
170
171 ## gist URL alias, used to create nicer urls for gist. This should be an
171 ## gist URL alias, used to create nicer urls for gist. This should be an
172 ## url that does rewrites to _admin/gists/{gistid}.
172 ## url that does rewrites to _admin/gists/{gistid}.
173 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
173 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
174 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
174 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
175 gist_alias_url =
175 gist_alias_url =
176
176
177 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
177 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
178 ## used for access.
178 ## used for access.
179 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
179 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
180 ## came from the the logged in user who own this authentication token.
180 ## came from the the logged in user who own this authentication token.
181 ## Additionally @TOKEN syntaxt can be used to bound the view to specific
181 ## Additionally @TOKEN syntax can be used to bound the view to specific
182 ## authentication token. Such view would be only accessible when used together
182 ## authentication token. Such view would be only accessible when used together
183 ## with this authentication token
183 ## with this authentication token
184 ##
184 ##
185 ## list of all views can be found under `/_admin/permissions/auth_token_access`
185 ## list of all views can be found under `/_admin/permissions/auth_token_access`
186 ## The list should be "," separated and on a single line.
186 ## The list should be "," separated and on a single line.
187 ##
187 ##
188 ## Most common views to enable:
188 ## Most common views to enable:
189 # RepoCommitsView:repo_commit_download
189 # RepoCommitsView:repo_commit_download
190 # RepoCommitsView:repo_commit_patch
190 # RepoCommitsView:repo_commit_patch
191 # RepoCommitsView:repo_commit_raw
191 # RepoCommitsView:repo_commit_raw
192 # RepoCommitsView:repo_commit_raw@TOKEN
192 # RepoCommitsView:repo_commit_raw@TOKEN
193 # RepoFilesView:repo_files_diff
193 # RepoFilesView:repo_files_diff
194 # RepoFilesView:repo_archivefile
194 # RepoFilesView:repo_archivefile
195 # RepoFilesView:repo_file_raw
195 # RepoFilesView:repo_file_raw
196 # GistView:*
196 # GistView:*
197 api_access_controllers_whitelist =
197 api_access_controllers_whitelist =
198
198
199 ## Default encoding used to convert from and to unicode
199 ## Default encoding used to convert from and to unicode
200 ## can be also a comma separated list of encoding in case of mixed encodings
200 ## can be also a comma separated list of encoding in case of mixed encodings
201 default_encoding = UTF-8
201 default_encoding = UTF-8
202
202
203 ## instance-id prefix
203 ## instance-id prefix
204 ## a prefix key for this instance used for cache invalidation when running
204 ## a prefix key for this instance used for cache invalidation when running
205 ## multiple instances of rhodecode, make sure it's globally unique for
205 ## multiple instances of RhodeCode, make sure it's globally unique for
206 ## all running rhodecode instances. Leave empty if you don't use it
206 ## all running RhodeCode instances. Leave empty if you don't use it
207 instance_id =
207 instance_id =
208
208
209 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
209 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
210 ## of an authentication plugin also if it is disabled by it's settings.
210 ## of an authentication plugin also if it is disabled by it's settings.
211 ## This could be useful if you are unable to log in to the system due to broken
211 ## This could be useful if you are unable to log in to the system due to broken
212 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
212 ## authentication settings. Then you can enable e.g. the internal RhodeCode auth
213 ## module to log in again and fix the settings.
213 ## module to log in again and fix the settings.
214 ##
214 ##
215 ## Available builtin plugin IDs (hash is part of the ID):
215 ## Available builtin plugin IDs (hash is part of the ID):
216 ## egg:rhodecode-enterprise-ce#rhodecode
216 ## egg:rhodecode-enterprise-ce#rhodecode
217 ## egg:rhodecode-enterprise-ce#pam
217 ## egg:rhodecode-enterprise-ce#pam
218 ## egg:rhodecode-enterprise-ce#ldap
218 ## egg:rhodecode-enterprise-ce#ldap
219 ## egg:rhodecode-enterprise-ce#jasig_cas
219 ## egg:rhodecode-enterprise-ce#jasig_cas
220 ## egg:rhodecode-enterprise-ce#headers
220 ## egg:rhodecode-enterprise-ce#headers
221 ## egg:rhodecode-enterprise-ce#crowd
221 ## egg:rhodecode-enterprise-ce#crowd
222 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
222 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
223
223
224 ## alternative return HTTP header for failed authentication. Default HTTP
224 ## alternative return HTTP header for failed authentication. Default HTTP
225 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
225 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
226 ## handling that causing a series of failed authentication calls.
226 ## handling that causing a series of failed authentication calls.
227 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
227 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
228 ## This will be served instead of default 401 on bad authnetication
228 ## This will be served instead of default 401 on bad authentication
229 auth_ret_code =
229 auth_ret_code =
230
230
231 ## use special detection method when serving auth_ret_code, instead of serving
231 ## use special detection method when serving auth_ret_code, instead of serving
232 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
232 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
233 ## and then serve auth_ret_code to clients
233 ## and then serve auth_ret_code to clients
234 auth_ret_code_detection = false
234 auth_ret_code_detection = false
235
235
236 ## locking return code. When repository is locked return this HTTP code. 2XX
236 ## locking return code. When repository is locked return this HTTP code. 2XX
237 ## codes don't break the transactions while 4XX codes do
237 ## codes don't break the transactions while 4XX codes do
238 lock_ret_code = 423
238 lock_ret_code = 423
239
239
240 ## allows to change the repository location in settings page
240 ## allows to change the repository location in settings page
241 allow_repo_location_change = true
241 allow_repo_location_change = true
242
242
243 ## allows to setup custom hooks in settings page
243 ## allows to setup custom hooks in settings page
244 allow_custom_hooks_settings = true
244 allow_custom_hooks_settings = true
245
245
246 ## Generated license token required for EE edition license.
246 ## Generated license token required for EE edition license.
247 ## New generated token value can be found in Admin > settings > license page.
247 ## New generated token value can be found in Admin > settings > license page.
248 license_token =
248 license_token =
249
249
250 ## supervisor connection uri, for managing supervisor and logs.
250 ## supervisor connection uri, for managing supervisor and logs.
251 supervisor.uri =
251 supervisor.uri =
252 ## supervisord group name/id we only want this RC instance to handle
252 ## supervisord group name/id we only want this RC instance to handle
253 supervisor.group_id = prod
253 supervisor.group_id = prod
254
254
255 ## Display extended labs settings
255 ## Display extended labs settings
256 labs_settings_active = true
256 labs_settings_active = true
257
257
258 ## Custom exception store path, defaults to TMPDIR
258 ## Custom exception store path, defaults to TMPDIR
259 ## This is used to store exception from RhodeCode in shared directory
259 ## This is used to store exception from RhodeCode in shared directory
260 #exception_tracker.store_path =
260 #exception_tracker.store_path =
261
261
262 ## File store configuration. This is used to store and serve uploaded files
263 file_store.enabled = true
264 ## Storage backend, available options are: local
265 file_store.backend = local
266 ## path to store the uploaded binaries
267 file_store.storage_path = %(here)s/data/file_store
268
262
269
263 ####################################
270 ####################################
264 ### CELERY CONFIG ####
271 ### CELERY CONFIG ####
265 ####################################
272 ####################################
266 ## run: /path/to/celery worker \
273 ## run: /path/to/celery worker \
267 ## -E --beat --app rhodecode.lib.celerylib.loader \
274 ## -E --beat --app rhodecode.lib.celerylib.loader \
268 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
275 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
269 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
276 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
270
277
271 use_celery = false
278 use_celery = false
272
279
273 ## connection url to the message broker (default rabbitmq)
280 ## connection url to the message broker (default rabbitmq)
274 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
281 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
275
282
276 ## maximum tasks to execute before worker restart
283 ## maximum tasks to execute before worker restart
277 celery.max_tasks_per_child = 100
284 celery.max_tasks_per_child = 100
278
285
279 ## tasks will never be sent to the queue, but executed locally instead.
286 ## tasks will never be sent to the queue, but executed locally instead.
280 celery.task_always_eager = false
287 celery.task_always_eager = false
281
288
282 #####################################
289 #####################################
283 ### DOGPILE CACHE ####
290 ### DOGPILE CACHE ####
284 #####################################
291 #####################################
285 ## Default cache dir for caches. Putting this into a ramdisk
292 ## Default cache dir for caches. Putting this into a ramdisk
286 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
293 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
287 ## large amount of space
294 ## large amount of space
288 cache_dir = %(here)s/data
295 cache_dir = %(here)s/data
289
296
290 ## `cache_perms` cache settings for permission tree, auth TTL.
297 ## `cache_perms` cache settings for permission tree, auth TTL.
291 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
298 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
292 rc_cache.cache_perms.expiration_time = 300
299 rc_cache.cache_perms.expiration_time = 300
293
300
294 ## alternative `cache_perms` redis backend with distributed lock
301 ## alternative `cache_perms` redis backend with distributed lock
295 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
302 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
296 #rc_cache.cache_perms.expiration_time = 300
303 #rc_cache.cache_perms.expiration_time = 300
297 ## redis_expiration_time needs to be greater then expiration_time
304 ## redis_expiration_time needs to be greater then expiration_time
298 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
305 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
299 #rc_cache.cache_perms.arguments.socket_timeout = 30
306 #rc_cache.cache_perms.arguments.socket_timeout = 30
300 #rc_cache.cache_perms.arguments.host = localhost
307 #rc_cache.cache_perms.arguments.host = localhost
301 #rc_cache.cache_perms.arguments.port = 6379
308 #rc_cache.cache_perms.arguments.port = 6379
302 #rc_cache.cache_perms.arguments.db = 0
309 #rc_cache.cache_perms.arguments.db = 0
310 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
303 #rc_cache.cache_perms.arguments.distributed_lock = true
311 #rc_cache.cache_perms.arguments.distributed_lock = true
304
312
305 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
313 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
306 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
314 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
307 rc_cache.cache_repo.expiration_time = 2592000
315 rc_cache.cache_repo.expiration_time = 2592000
308
316
309 ## alternative `cache_repo` redis backend with distributed lock
317 ## alternative `cache_repo` redis backend with distributed lock
310 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
318 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
311 #rc_cache.cache_repo.expiration_time = 2592000
319 #rc_cache.cache_repo.expiration_time = 2592000
312 ## redis_expiration_time needs to be greater then expiration_time
320 ## redis_expiration_time needs to be greater then expiration_time
313 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
321 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
314 #rc_cache.cache_repo.arguments.socket_timeout = 30
322 #rc_cache.cache_repo.arguments.socket_timeout = 30
315 #rc_cache.cache_repo.arguments.host = localhost
323 #rc_cache.cache_repo.arguments.host = localhost
316 #rc_cache.cache_repo.arguments.port = 6379
324 #rc_cache.cache_repo.arguments.port = 6379
317 #rc_cache.cache_repo.arguments.db = 1
325 #rc_cache.cache_repo.arguments.db = 1
326 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
318 #rc_cache.cache_repo.arguments.distributed_lock = true
327 #rc_cache.cache_repo.arguments.distributed_lock = true
319
328
320 ## cache settings for SQL queries, this needs to use memory type backend
329 ## cache settings for SQL queries, this needs to use memory type backend
321 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
330 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
322 rc_cache.sql_cache_short.expiration_time = 30
331 rc_cache.sql_cache_short.expiration_time = 30
323
332
324 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
333 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
325 ## type backend as the objects kept are not pickle serializable
334 ## type backend as the objects kept are not pickle serializable
326 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
335 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
327 ## by default we use 96H, this is using invalidation on push anyway
336 ## by default we use 96H, this is using invalidation on push anyway
328 rc_cache.cache_repo_longterm.expiration_time = 345600
337 rc_cache.cache_repo_longterm.expiration_time = 345600
329 ## max items in LRU cache, reduce this number to save memory, and expire last used
338 ## max items in LRU cache, reduce this number to save memory, and expire last used
330 ## cached objects
339 ## cached objects
331 rc_cache.cache_repo_longterm.max_size = 10000
340 rc_cache.cache_repo_longterm.max_size = 10000
332
341
333
342
334 ####################################
343 ####################################
335 ### BEAKER SESSION ####
344 ### BEAKER SESSION ####
336 ####################################
345 ####################################
337
346
338 ## .session.type is type of storage options for the session, current allowed
347 ## .session.type is type of storage options for the session, current allowed
339 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
348 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
340 beaker.session.type = file
349 beaker.session.type = file
341 beaker.session.data_dir = %(here)s/data/sessions
350 beaker.session.data_dir = %(here)s/data/sessions
342
351
343 ## db based session, fast, and allows easy management over logged in users
352 ## db based session, fast, and allows easy management over logged in users
344 #beaker.session.type = ext:database
353 #beaker.session.type = ext:database
345 #beaker.session.table_name = db_session
354 #beaker.session.table_name = db_session
346 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
355 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
347 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
356 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
348 #beaker.session.sa.pool_recycle = 3600
357 #beaker.session.sa.pool_recycle = 3600
349 #beaker.session.sa.echo = false
358 #beaker.session.sa.echo = false
350
359
351 beaker.session.key = rhodecode
360 beaker.session.key = rhodecode
352 beaker.session.secret = production-rc-uytcxaz
361 beaker.session.secret = production-rc-uytcxaz
353 beaker.session.lock_dir = %(here)s/data/sessions/lock
362 beaker.session.lock_dir = %(here)s/data/sessions/lock
354
363
355 ## Secure encrypted cookie. Requires AES and AES python libraries
364 ## Secure encrypted cookie. Requires AES and AES python libraries
356 ## you must disable beaker.session.secret to use this
365 ## you must disable beaker.session.secret to use this
357 #beaker.session.encrypt_key = key_for_encryption
366 #beaker.session.encrypt_key = key_for_encryption
358 #beaker.session.validate_key = validation_key
367 #beaker.session.validate_key = validation_key
359
368
360 ## sets session as invalid(also logging out user) if it haven not been
369 ## sets session as invalid(also logging out user) if it haven not been
361 ## accessed for given amount of time in seconds
370 ## accessed for given amount of time in seconds
362 beaker.session.timeout = 2592000
371 beaker.session.timeout = 2592000
363 beaker.session.httponly = true
372 beaker.session.httponly = true
364 ## Path to use for the cookie. Set to prefix if you use prefix middleware
373 ## Path to use for the cookie. Set to prefix if you use prefix middleware
365 #beaker.session.cookie_path = /custom_prefix
374 #beaker.session.cookie_path = /custom_prefix
366
375
367 ## uncomment for https secure cookie
376 ## uncomment for https secure cookie
368 beaker.session.secure = false
377 beaker.session.secure = false
369
378
370 ## auto save the session to not to use .save()
379 ## auto save the session to not to use .save()
371 beaker.session.auto = false
380 beaker.session.auto = false
372
381
373 ## default cookie expiration time in seconds, set to `true` to set expire
382 ## default cookie expiration time in seconds, set to `true` to set expire
374 ## at browser close
383 ## at browser close
375 #beaker.session.cookie_expires = 3600
384 #beaker.session.cookie_expires = 3600
376
385
377 ###################################
386 ###################################
378 ## SEARCH INDEXING CONFIGURATION ##
387 ## SEARCH INDEXING CONFIGURATION ##
379 ###################################
388 ###################################
380 ## Full text search indexer is available in rhodecode-tools under
389 ## Full text search indexer is available in rhodecode-tools under
381 ## `rhodecode-tools index` command
390 ## `rhodecode-tools index` command
382
391
383 ## WHOOSH Backend, doesn't require additional services to run
392 ## WHOOSH Backend, doesn't require additional services to run
384 ## it works good with few dozen repos
393 ## it works good with few dozen repos
385 search.module = rhodecode.lib.index.whoosh
394 search.module = rhodecode.lib.index.whoosh
386 search.location = %(here)s/data/index
395 search.location = %(here)s/data/index
387
396
388 ########################################
397 ########################################
389 ### CHANNELSTREAM CONFIG ####
398 ### CHANNELSTREAM CONFIG ####
390 ########################################
399 ########################################
391 ## channelstream enables persistent connections and live notification
400 ## channelstream enables persistent connections and live notification
392 ## in the system. It's also used by the chat system
401 ## in the system. It's also used by the chat system
393
402
394 channelstream.enabled = false
403 channelstream.enabled = false
395
404
396 ## server address for channelstream server on the backend
405 ## server address for channelstream server on the backend
397 channelstream.server = 127.0.0.1:9800
406 channelstream.server = 127.0.0.1:9800
398
407
399 ## location of the channelstream server from outside world
408 ## location of the channelstream server from outside world
400 ## use ws:// for http or wss:// for https. This address needs to be handled
409 ## use ws:// for http or wss:// for https. This address needs to be handled
401 ## by external HTTP server such as Nginx or Apache
410 ## by external HTTP server such as Nginx or Apache
402 ## see nginx/apache configuration examples in our docs
411 ## see Nginx/Apache configuration examples in our docs
403 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
412 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
404 channelstream.secret = secret
413 channelstream.secret = secret
405 channelstream.history.location = %(here)s/channelstream_history
414 channelstream.history.location = %(here)s/channelstream_history
406
415
407 ## Internal application path that Javascript uses to connect into.
416 ## Internal application path that Javascript uses to connect into.
408 ## If you use proxy-prefix the prefix should be added before /_channelstream
417 ## If you use proxy-prefix the prefix should be added before /_channelstream
409 channelstream.proxy_path = /_channelstream
418 channelstream.proxy_path = /_channelstream
410
419
411
420
412 ###################################
421 ###################################
413 ## APPENLIGHT CONFIG ##
422 ## APPENLIGHT CONFIG ##
414 ###################################
423 ###################################
415
424
416 ## Appenlight is tailored to work with RhodeCode, see
425 ## Appenlight is tailored to work with RhodeCode, see
417 ## http://appenlight.com for details how to obtain an account
426 ## http://appenlight.com for details how to obtain an account
418
427
419 ## appenlight integration enabled
428 ## Appenlight integration enabled
420 appenlight = false
429 appenlight = false
421
430
422 appenlight.server_url = https://api.appenlight.com
431 appenlight.server_url = https://api.appenlight.com
423 appenlight.api_key = YOUR_API_KEY
432 appenlight.api_key = YOUR_API_KEY
424 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
433 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
425
434
426 # used for JS client
435 ## used for JS client
427 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
436 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
428
437
429 ## TWEAK AMOUNT OF INFO SENT HERE
438 ## TWEAK AMOUNT OF INFO SENT HERE
430
439
431 ## enables 404 error logging (default False)
440 ## enables 404 error logging (default False)
432 appenlight.report_404 = false
441 appenlight.report_404 = false
433
442
434 ## time in seconds after request is considered being slow (default 1)
443 ## time in seconds after request is considered being slow (default 1)
435 appenlight.slow_request_time = 1
444 appenlight.slow_request_time = 1
436
445
437 ## record slow requests in application
446 ## record slow requests in application
438 ## (needs to be enabled for slow datastore recording and time tracking)
447 ## (needs to be enabled for slow datastore recording and time tracking)
439 appenlight.slow_requests = true
448 appenlight.slow_requests = true
440
449
441 ## enable hooking to application loggers
450 ## enable hooking to application loggers
442 appenlight.logging = true
451 appenlight.logging = true
443
452
444 ## minimum log level for log capture
453 ## minimum log level for log capture
445 appenlight.logging.level = WARNING
454 appenlight.logging.level = WARNING
446
455
447 ## send logs only from erroneous/slow requests
456 ## send logs only from erroneous/slow requests
448 ## (saves API quota for intensive logging)
457 ## (saves API quota for intensive logging)
449 appenlight.logging_on_error = false
458 appenlight.logging_on_error = false
450
459
451 ## list of additonal keywords that should be grabbed from environ object
460 ## list of additional keywords that should be grabbed from environ object
452 ## can be string with comma separated list of words in lowercase
461 ## can be string with comma separated list of words in lowercase
453 ## (by default client will always send following info:
462 ## (by default client will always send following info:
454 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
463 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
455 ## start with HTTP* this list be extended with additional keywords here
464 ## start with HTTP* this list be extended with additional keywords here
456 appenlight.environ_keys_whitelist =
465 appenlight.environ_keys_whitelist =
457
466
458 ## list of keywords that should be blanked from request object
467 ## list of keywords that should be blanked from request object
459 ## can be string with comma separated list of words in lowercase
468 ## can be string with comma separated list of words in lowercase
460 ## (by default client will always blank keys that contain following words
469 ## (by default client will always blank keys that contain following words
461 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
470 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
462 ## this list be extended with additional keywords set here
471 ## this list be extended with additional keywords set here
463 appenlight.request_keys_blacklist =
472 appenlight.request_keys_blacklist =
464
473
465 ## list of namespaces that should be ignores when gathering log entries
474 ## list of namespaces that should be ignores when gathering log entries
466 ## can be string with comma separated list of namespaces
475 ## can be string with comma separated list of namespaces
467 ## (by default the client ignores own entries: appenlight_client.client)
476 ## (by default the client ignores own entries: appenlight_client.client)
468 appenlight.log_namespace_blacklist =
477 appenlight.log_namespace_blacklist =
469
478
470
479
471 ###########################################
480 ###########################################
472 ### MAIN RHODECODE DATABASE CONFIG ###
481 ### MAIN RHODECODE DATABASE CONFIG ###
473 ###########################################
482 ###########################################
474 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
483 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
475 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
484 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
476 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
485 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
477 # pymysql is an alternative driver for MySQL, use in case of problems with default one
486 # pymysql is an alternative driver for MySQL, use in case of problems with default one
478 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
487 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
479
488
480 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
489 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
481
490
482 # see sqlalchemy docs for other advanced settings
491 # see sqlalchemy docs for other advanced settings
483
492
484 ## print the sql statements to output
493 ## print the sql statements to output
485 sqlalchemy.db1.echo = false
494 sqlalchemy.db1.echo = false
486 ## recycle the connections after this amount of seconds
495 ## recycle the connections after this amount of seconds
487 sqlalchemy.db1.pool_recycle = 3600
496 sqlalchemy.db1.pool_recycle = 3600
488 sqlalchemy.db1.convert_unicode = true
497 sqlalchemy.db1.convert_unicode = true
489
498
490 ## the number of connections to keep open inside the connection pool.
499 ## the number of connections to keep open inside the connection pool.
491 ## 0 indicates no limit
500 ## 0 indicates no limit
492 #sqlalchemy.db1.pool_size = 5
501 #sqlalchemy.db1.pool_size = 5
493
502
494 ## the number of connections to allow in connection pool "overflow", that is
503 ## the number of connections to allow in connection pool "overflow", that is
495 ## connections that can be opened above and beyond the pool_size setting,
504 ## connections that can be opened above and beyond the pool_size setting,
496 ## which defaults to five.
505 ## which defaults to five.
497 #sqlalchemy.db1.max_overflow = 10
506 #sqlalchemy.db1.max_overflow = 10
498
507
499 ## Connection check ping, used to detect broken database connections
508 ## Connection check ping, used to detect broken database connections
500 ## could be enabled to better handle cases if MySQL has gone away errors
509 ## could be enabled to better handle cases if MySQL has gone away errors
501 #sqlalchemy.db1.ping_connection = true
510 #sqlalchemy.db1.ping_connection = true
502
511
503 ##################
512 ##################
504 ### VCS CONFIG ###
513 ### VCS CONFIG ###
505 ##################
514 ##################
506 vcs.server.enable = true
515 vcs.server.enable = true
507 vcs.server = localhost:9900
516 vcs.server = localhost:9900
508
517
509 ## Web server connectivity protocol, responsible for web based VCS operatations
518 ## Web server connectivity protocol, responsible for web based VCS operations
510 ## Available protocols are:
519 ## Available protocols are:
511 ## `http` - use http-rpc backend (default)
520 ## `http` - use http-rpc backend (default)
512 vcs.server.protocol = http
521 vcs.server.protocol = http
513
522
514 ## Push/Pull operations protocol, available options are:
523 ## Push/Pull operations protocol, available options are:
515 ## `http` - use http-rpc backend (default)
524 ## `http` - use http-rpc backend (default)
516 vcs.scm_app_implementation = http
525 vcs.scm_app_implementation = http
517
526
518 ## Push/Pull operations hooks protocol, available options are:
527 ## Push/Pull operations hooks protocol, available options are:
519 ## `http` - use http-rpc backend (default)
528 ## `http` - use http-rpc backend (default)
520 vcs.hooks.protocol = http
529 vcs.hooks.protocol = http
521
530
522 ## Host on which this instance is listening for hooks. If vcsserver is in other location
531 ## Host on which this instance is listening for hooks. If vcsserver is in other location
523 ## this should be adjusted.
532 ## this should be adjusted.
524 vcs.hooks.host = 127.0.0.1
533 vcs.hooks.host = 127.0.0.1
525
534
526 vcs.server.log_level = info
535 vcs.server.log_level = info
527 ## Start VCSServer with this instance as a subprocess, useful for development
536 ## Start VCSServer with this instance as a subprocess, useful for development
528 vcs.start_server = false
537 vcs.start_server = false
529
538
530 ## List of enabled VCS backends, available options are:
539 ## List of enabled VCS backends, available options are:
531 ## `hg` - mercurial
540 ## `hg` - mercurial
532 ## `git` - git
541 ## `git` - git
533 ## `svn` - subversion
542 ## `svn` - subversion
534 vcs.backends = hg, git, svn
543 vcs.backends = hg, git, svn
535
544
536 vcs.connection_timeout = 3600
545 vcs.connection_timeout = 3600
537 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
546 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
538 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
547 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
539 #vcs.svn.compatible_version = pre-1.8-compatible
548 #vcs.svn.compatible_version = pre-1.8-compatible
540
549
541
550
542 ############################################################
551 ############################################################
543 ### Subversion proxy support (mod_dav_svn) ###
552 ### Subversion proxy support (mod_dav_svn) ###
544 ### Maps RhodeCode repo groups into SVN paths for Apache ###
553 ### Maps RhodeCode repo groups into SVN paths for Apache ###
545 ############################################################
554 ############################################################
546 ## Enable or disable the config file generation.
555 ## Enable or disable the config file generation.
547 svn.proxy.generate_config = false
556 svn.proxy.generate_config = false
548 ## Generate config file with `SVNListParentPath` set to `On`.
557 ## Generate config file with `SVNListParentPath` set to `On`.
549 svn.proxy.list_parent_path = true
558 svn.proxy.list_parent_path = true
550 ## Set location and file name of generated config file.
559 ## Set location and file name of generated config file.
551 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
560 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
552 ## alternative mod_dav config template. This needs to be a mako template
561 ## alternative mod_dav config template. This needs to be a mako template
553 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
562 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
554 ## Used as a prefix to the `Location` block in the generated config file.
563 ## Used as a prefix to the `Location` block in the generated config file.
555 ## In most cases it should be set to `/`.
564 ## In most cases it should be set to `/`.
556 svn.proxy.location_root = /
565 svn.proxy.location_root = /
557 ## Command to reload the mod dav svn configuration on change.
566 ## Command to reload the mod dav svn configuration on change.
558 ## Example: `/etc/init.d/apache2 reload`
567 ## Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
568 ## Make sure user who runs RhodeCode process is allowed to reload Apache
559 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
569 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
560 ## If the timeout expires before the reload command finishes, the command will
570 ## If the timeout expires before the reload command finishes, the command will
561 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
571 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
562 #svn.proxy.reload_timeout = 10
572 #svn.proxy.reload_timeout = 10
563
573
564 ############################################################
574 ############################################################
565 ### SSH Support Settings ###
575 ### SSH Support Settings ###
566 ############################################################
576 ############################################################
567
577
568 ## Defines if a custom authorized_keys file should be created and written on
578 ## Defines if a custom authorized_keys file should be created and written on
569 ## any change user ssh keys. Setting this to false also disables posibility
579 ## any change user ssh keys. Setting this to false also disables possibility
570 ## of adding SSH keys by users from web interface. Super admins can still
580 ## of adding SSH keys by users from web interface. Super admins can still
571 ## manage SSH Keys.
581 ## manage SSH Keys.
572 ssh.generate_authorized_keyfile = false
582 ssh.generate_authorized_keyfile = false
573
583
574 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
584 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
575 # ssh.authorized_keys_ssh_opts =
585 # ssh.authorized_keys_ssh_opts =
576
586
577 ## Path to the authrozied_keys file where the generate entries are placed.
587 ## Path to the authorized_keys file where the generate entries are placed.
578 ## It is possible to have multiple key files specified in `sshd_config` e.g.
588 ## It is possible to have multiple key files specified in `sshd_config` e.g.
579 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
589 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
580 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
590 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
581
591
582 ## Command to execute the SSH wrapper. The binary is available in the
592 ## Command to execute the SSH wrapper. The binary is available in the
583 ## rhodecode installation directory.
593 ## RhodeCode installation directory.
584 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
594 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
585 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
595 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
586
596
587 ## Allow shell when executing the ssh-wrapper command
597 ## Allow shell when executing the ssh-wrapper command
588 ssh.wrapper_cmd_allow_shell = false
598 ssh.wrapper_cmd_allow_shell = false
589
599
590 ## Enables logging, and detailed output send back to the client during SSH
600 ## Enables logging, and detailed output send back to the client during SSH
591 ## operations. Usefull for debugging, shouldn't be used in production.
601 ## operations. Useful for debugging, shouldn't be used in production.
592 ssh.enable_debug_logging = false
602 ssh.enable_debug_logging = false
593
603
594 ## Paths to binary executable, by default they are the names, but we can
604 ## Paths to binary executable, by default they are the names, but we can
595 ## override them if we want to use a custom one
605 ## override them if we want to use a custom one
596 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
606 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
597 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
607 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
598 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
608 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
599
609
610 ## Enables SSH key generator web interface. Disabling this still allows users
611 ## to add their own keys.
612 ssh.enable_ui_key_generator = true
613
600
614
601 ## Dummy marker to add new entries after.
615 ## Dummy marker to add new entries after.
602 ## Add any custom entries below. Please don't remove.
616 ## Add any custom entries below. Please don't remove.
603 custom.conf = 1
617 custom.conf = 1
604
618
605
619
606 ################################
620 ################################
607 ### LOGGING CONFIGURATION ####
621 ### LOGGING CONFIGURATION ####
608 ################################
622 ################################
609 [loggers]
623 [loggers]
610 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
624 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
611
625
612 [handlers]
626 [handlers]
613 keys = console, console_sql
627 keys = console, console_sql
614
628
615 [formatters]
629 [formatters]
616 keys = generic, color_formatter, color_formatter_sql
630 keys = generic, color_formatter, color_formatter_sql
617
631
618 #############
632 #############
619 ## LOGGERS ##
633 ## LOGGERS ##
620 #############
634 #############
621 [logger_root]
635 [logger_root]
622 level = NOTSET
636 level = NOTSET
623 handlers = console
637 handlers = console
624
638
625 [logger_sqlalchemy]
639 [logger_sqlalchemy]
626 level = INFO
640 level = INFO
627 handlers = console_sql
641 handlers = console_sql
628 qualname = sqlalchemy.engine
642 qualname = sqlalchemy.engine
629 propagate = 0
643 propagate = 0
630
644
631 [logger_beaker]
645 [logger_beaker]
632 level = DEBUG
646 level = DEBUG
633 handlers =
647 handlers =
634 qualname = beaker.container
648 qualname = beaker.container
635 propagate = 1
649 propagate = 1
636
650
637 [logger_rhodecode]
651 [logger_rhodecode]
638 level = DEBUG
652 level = DEBUG
639 handlers =
653 handlers =
640 qualname = rhodecode
654 qualname = rhodecode
641 propagate = 1
655 propagate = 1
642
656
643 [logger_ssh_wrapper]
657 [logger_ssh_wrapper]
644 level = DEBUG
658 level = DEBUG
645 handlers =
659 handlers =
646 qualname = ssh_wrapper
660 qualname = ssh_wrapper
647 propagate = 1
661 propagate = 1
648
662
649 [logger_celery]
663 [logger_celery]
650 level = DEBUG
664 level = DEBUG
651 handlers =
665 handlers =
652 qualname = celery
666 qualname = celery
653
667
654
668
655 ##############
669 ##############
656 ## HANDLERS ##
670 ## HANDLERS ##
657 ##############
671 ##############
658
672
659 [handler_console]
673 [handler_console]
660 class = StreamHandler
674 class = StreamHandler
661 args = (sys.stderr, )
675 args = (sys.stderr, )
662 level = INFO
676 level = INFO
663 formatter = generic
677 formatter = generic
664
678
665 [handler_console_sql]
679 [handler_console_sql]
666 # "level = DEBUG" logs SQL queries and results.
680 # "level = DEBUG" logs SQL queries and results.
667 # "level = INFO" logs SQL queries.
681 # "level = INFO" logs SQL queries.
668 # "level = WARN" logs neither. (Recommended for production systems.)
682 # "level = WARN" logs neither. (Recommended for production systems.)
669 class = StreamHandler
683 class = StreamHandler
670 args = (sys.stderr, )
684 args = (sys.stderr, )
671 level = WARN
685 level = WARN
672 formatter = generic
686 formatter = generic
673
687
674 ################
688 ################
675 ## FORMATTERS ##
689 ## FORMATTERS ##
676 ################
690 ################
677
691
678 [formatter_generic]
692 [formatter_generic]
679 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
693 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
680 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
694 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
681 datefmt = %Y-%m-%d %H:%M:%S
695 datefmt = %Y-%m-%d %H:%M:%S
682
696
683 [formatter_color_formatter]
697 [formatter_color_formatter]
684 class = rhodecode.lib.logging_formatter.ColorFormatter
698 class = rhodecode.lib.logging_formatter.ColorFormatter
685 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
699 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
686 datefmt = %Y-%m-%d %H:%M:%S
700 datefmt = %Y-%m-%d %H:%M:%S
687
701
688 [formatter_color_formatter_sql]
702 [formatter_color_formatter_sql]
689 class = rhodecode.lib.logging_formatter.ColorFormatterSql
703 class = rhodecode.lib.logging_formatter.ColorFormatterSql
690 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
704 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
691 datefmt = %Y-%m-%d %H:%M:%S
705 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,294 +1,296 b''
1 # Nix environment for the community edition
1 # Nix environment for the community edition
2 #
2 #
3 # This shall be as lean as possible, just producing the enterprise-ce
3 # This shall be as lean as possible, just producing the enterprise-ce
4 # derivation. For advanced tweaks to pimp up the development environment we use
4 # derivation. For advanced tweaks to pimp up the development environment we use
5 # "shell.nix" so that it does not have to clutter this file.
5 # "shell.nix" so that it does not have to clutter this file.
6 #
6 #
7 # Configuration, set values in "~/.nixpkgs/config.nix".
7 # Configuration, set values in "~/.nixpkgs/config.nix".
8 # example
8 # example
9 # {
9 # {
10 # # Thoughts on how to configure the dev environment
10 # # Thoughts on how to configure the dev environment
11 # rc = {
11 # rc = {
12 # codeInternalUrl = "https://usr:token@code.rhodecode.com/internal";
12 # codeInternalUrl = "https://usr:token@code.rhodecode.com/internal";
13 # sources = {
13 # sources = {
14 # rhodecode-vcsserver = "/home/user/work/rhodecode-vcsserver";
14 # rhodecode-vcsserver = "/home/user/work/rhodecode-vcsserver";
15 # rhodecode-enterprise-ce = "/home/user/work/rhodecode-enterprise-ce";
15 # rhodecode-enterprise-ce = "/home/user/work/rhodecode-enterprise-ce";
16 # rhodecode-enterprise-ee = "/home/user/work/rhodecode-enterprise-ee";
16 # rhodecode-enterprise-ee = "/home/user/work/rhodecode-enterprise-ee";
17 # };
17 # };
18 # };
18 # };
19 # }
19 # }
20
20
21 args@
21 args@
22 { pythonPackages ? "python27Packages"
22 { system ? builtins.currentSystem
23 , pythonPackages ? "python27Packages"
23 , pythonExternalOverrides ? self: super: {}
24 , pythonExternalOverrides ? self: super: {}
24 , doCheck ? false
25 , doCheck ? false
25 , ...
26 , ...
26 }:
27 }:
27
28
28 let
29 let
29 pkgs_ = (import <nixpkgs> {});
30 pkgs_ = args.pkgs or (import <nixpkgs> { inherit system; });
30 in
31 in
31
32
32 let
33 let
33 pkgs = import <nixpkgs> {
34 pkgs = import <nixpkgs> {
34 overlays = [
35 overlays = [
35 (import ./pkgs/overlays.nix)
36 (import ./pkgs/overlays.nix)
36 ];
37 ];
37 inherit
38 inherit
38 (pkgs_)
39 (pkgs_)
39 system;
40 system;
40 };
41 };
41
42
42 # Works with the new python-packages, still can fallback to the old
43 # Works with the new python-packages, still can fallback to the old
43 # variant.
44 # variant.
44 basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
45 basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
45 self: basePythonPackages.override (a: { inherit self; }));
46 self: basePythonPackages.override (a: { inherit self; }));
46
47
47 # Evaluates to the last segment of a file system path.
48 # Evaluates to the last segment of a file system path.
48 basename = path: with pkgs.lib; last (splitString "/" path);
49 basename = path: with pkgs.lib; last (splitString "/" path);
49
50
50 # source code filter used as arugment to builtins.filterSource.
51 # source code filter used as arugment to builtins.filterSource.
51 src-filter = path: type: with pkgs.lib;
52 src-filter = path: type: with pkgs.lib;
52 let
53 let
53 ext = last (splitString "." path);
54 ext = last (splitString "." path);
54 in
55 in
55 !builtins.elem (basename path) [
56 !builtins.elem (basename path) [
56 ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev"
57 ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev"
57 "node_modules" "node_binaries"
58 "node_modules" "node_binaries"
58 "build" "data" "result" "tmp"] &&
59 "build" "data" "result" "tmp"] &&
59 !builtins.elem ext ["egg-info" "pyc"] &&
60 !builtins.elem ext ["egg-info" "pyc"] &&
60 # TODO: johbo: This check is wrong, since "path" contains an absolute path,
61 # TODO: johbo: This check is wrong, since "path" contains an absolute path,
61 # it would still be good to restore it since we want to ignore "result-*".
62 # it would still be good to restore it since we want to ignore "result-*".
62 !hasPrefix "result" path;
63 !hasPrefix "result" path;
63
64
64 sources =
65 sources =
65 let
66 let
66 inherit
67 inherit
67 (pkgs.lib)
68 (pkgs.lib)
68 all
69 all
69 isString
70 isString
70 attrValues;
71 attrValues;
71 sourcesConfig = pkgs.config.rc.sources or {};
72 sourcesConfig = pkgs.config.rc.sources or {};
72 in
73 in
73 # Ensure that sources are configured as strings. Using a path
74 # Ensure that sources are configured as strings. Using a path
74 # would result in a copy into the nix store.
75 # would result in a copy into the nix store.
75 assert all isString (attrValues sourcesConfig);
76 assert all isString (attrValues sourcesConfig);
76 sourcesConfig;
77 sourcesConfig;
77
78
78 version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION";
79 version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION";
79 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
80 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
80
81
81 nodeEnv = import ./pkgs/node-default.nix {
82 nodeEnv = import ./pkgs/node-default.nix {
82 inherit
83 inherit
83 pkgs;
84 pkgs
85 system;
84 };
86 };
85 nodeDependencies = nodeEnv.shell.nodeDependencies;
87 nodeDependencies = nodeEnv.shell.nodeDependencies;
86
88
87 rhodecode-testdata-src = sources.rhodecode-testdata or (
89 rhodecode-testdata-src = sources.rhodecode-testdata or (
88 pkgs.fetchhg {
90 pkgs.fetchhg {
89 url = "https://code.rhodecode.com/upstream/rc_testdata";
91 url = "https://code.rhodecode.com/upstream/rc_testdata";
90 rev = "v0.10.0";
92 rev = "v0.10.0";
91 sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0";
93 sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0";
92 });
94 });
93
95
94 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
96 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
95 inherit
97 inherit
96 doCheck
98 doCheck
97 pkgs
99 pkgs
98 pythonPackages;
100 pythonPackages;
99 };
101 };
100
102
101 pythonLocalOverrides = self: super: {
103 pythonLocalOverrides = self: super: {
102 rhodecode-enterprise-ce =
104 rhodecode-enterprise-ce =
103 let
105 let
104 linkNodePackages = ''
106 linkNodePackages = ''
105 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
107 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
106
108
107 echo "[BEGIN]: Link node packages and binaries"
109 echo "[BEGIN]: Link node packages and binaries"
108 # johbo: Linking individual packages allows us to run "npm install"
110 # johbo: Linking individual packages allows us to run "npm install"
109 # inside of a shell to try things out. Re-entering the shell will
111 # inside of a shell to try things out. Re-entering the shell will
110 # restore a clean environment.
112 # restore a clean environment.
111 rm -fr node_modules
113 rm -fr node_modules
112 mkdir node_modules
114 mkdir node_modules
113 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
115 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
114 export NODE_PATH=./node_modules
116 export NODE_PATH=./node_modules
115
117
116 rm -fr node_binaries
118 rm -fr node_binaries
117 mkdir node_binaries
119 mkdir node_binaries
118 ln -s ${nodeDependencies}/bin/* node_binaries/
120 ln -s ${nodeDependencies}/bin/* node_binaries/
119 echo "[DONE ]: Link node packages and binaries"
121 echo "[DONE ]: Link node packages and binaries"
120 '';
122 '';
121
123
122 releaseName = "RhodeCodeEnterpriseCE-${version}";
124 releaseName = "RhodeCodeEnterpriseCE-${version}";
123 in super.rhodecode-enterprise-ce.override (attrs: {
125 in super.rhodecode-enterprise-ce.override (attrs: {
124 inherit
126 inherit
125 doCheck
127 doCheck
126 version;
128 version;
127
129
128 name = "rhodecode-enterprise-ce-${version}";
130 name = "rhodecode-enterprise-ce-${version}";
129 releaseName = releaseName;
131 releaseName = releaseName;
130 src = rhodecode-enterprise-ce-src;
132 src = rhodecode-enterprise-ce-src;
131 dontStrip = true; # prevent strip, we don't need it.
133 dontStrip = true; # prevent strip, we don't need it.
132
134
133 # expose following attributed outside
135 # expose following attributed outside
134 passthru = {
136 passthru = {
135 inherit
137 inherit
136 rhodecode-testdata
138 rhodecode-testdata
137 linkNodePackages
139 linkNodePackages
138 myPythonPackagesUnfix
140 myPythonPackagesUnfix
139 pythonLocalOverrides
141 pythonLocalOverrides
140 pythonCommunityOverrides;
142 pythonCommunityOverrides;
141
143
142 pythonPackages = self;
144 pythonPackages = self;
143 };
145 };
144
146
145 buildInputs =
147 buildInputs =
146 attrs.buildInputs or [] ++ [
148 attrs.buildInputs or [] ++ [
147 rhodecode-testdata
149 rhodecode-testdata
148 ];
150 ];
149
151
150 #NOTE: option to inject additional propagatedBuildInputs
152 #NOTE: option to inject additional propagatedBuildInputs
151 propagatedBuildInputs =
153 propagatedBuildInputs =
152 attrs.propagatedBuildInputs or [] ++ [
154 attrs.propagatedBuildInputs or [] ++ [
153
155
154 ];
156 ];
155
157
156 LC_ALL = "en_US.UTF-8";
158 LC_ALL = "en_US.UTF-8";
157 LOCALE_ARCHIVE =
159 LOCALE_ARCHIVE =
158 if pkgs.stdenv.isLinux
160 if pkgs.stdenv.isLinux
159 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
161 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
160 else "";
162 else "";
161
163
162 # Add bin directory to path so that tests can find 'rhodecode'.
164 # Add bin directory to path so that tests can find 'rhodecode'.
163 preCheck = ''
165 preCheck = ''
164 export PATH="$out/bin:$PATH"
166 export PATH="$out/bin:$PATH"
165 '';
167 '';
166
168
167 # custom check phase for testing
169 # custom check phase for testing
168 checkPhase = ''
170 checkPhase = ''
169 runHook preCheck
171 runHook preCheck
170 PYTHONHASHSEED=random py.test -vv -p no:sugar -r xw --cov-config=.coveragerc --cov=rhodecode --cov-report=term-missing rhodecode
172 PYTHONHASHSEED=random py.test -vv -p no:sugar -r xw --cov-config=.coveragerc --cov=rhodecode --cov-report=term-missing rhodecode
171 runHook postCheck
173 runHook postCheck
172 '';
174 '';
173
175
174 postCheck = ''
176 postCheck = ''
175 echo "Cleanup of rhodecode/tests"
177 echo "Cleanup of rhodecode/tests"
176 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
178 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
177 '';
179 '';
178
180
179 preBuild = ''
181 preBuild = ''
180 echo "[BEGIN]: Building frontend assets"
182 echo "[BEGIN]: Building frontend assets"
181 ${linkNodePackages}
183 ${linkNodePackages}
182 make web-build
184 make web-build
183 rm -fr node_modules
185 rm -fr node_modules
184 rm -fr node_binaries
186 rm -fr node_binaries
185 echo "[DONE ]: Building frontend assets"
187 echo "[DONE ]: Building frontend assets"
186 '';
188 '';
187
189
188 postInstall = ''
190 postInstall = ''
189 # check required files
191 # check required files
190 STATIC_CHECK="/robots.txt /502.html
192 STATIC_CHECK="/robots.txt /502.html
191 /js/scripts.js /js/rhodecode-components.js
193 /js/scripts.js /js/rhodecode-components.js
192 /css/style.css /css/style-polymer.css"
194 /css/style.css /css/style-polymer.css"
193
195
194 for file in $STATIC_CHECK;
196 for file in $STATIC_CHECK;
195 do
197 do
196 if [ ! -f rhodecode/public/$file ]; then
198 if [ ! -f rhodecode/public/$file ]; then
197 echo "Missing $file"
199 echo "Missing $file"
198 exit 1
200 exit 1
199 fi
201 fi
200 done
202 done
201
203
202 echo "Writing enterprise-ce meta information for rccontrol to nix-support/rccontrol"
204 echo "Writing enterprise-ce meta information for rccontrol to nix-support/rccontrol"
203 mkdir -p $out/nix-support/rccontrol
205 mkdir -p $out/nix-support/rccontrol
204 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
206 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
205 echo "[DONE ]: enterprise-ce meta information for rccontrol written"
207 echo "[DONE ]: enterprise-ce meta information for rccontrol written"
206
208
207 mkdir -p $out/etc
209 mkdir -p $out/etc
208 cp configs/production.ini $out/etc
210 cp configs/production.ini $out/etc
209 echo "[DONE ]: saved enterprise-ce production.ini into $out/etc"
211 echo "[DONE ]: saved enterprise-ce production.ini into $out/etc"
210
212
211 cp -Rf rhodecode/config/rcextensions $out/etc/rcextensions.tmpl
213 cp -Rf rhodecode/config/rcextensions $out/etc/rcextensions.tmpl
212 echo "[DONE ]: saved enterprise-ce rcextensions into $out/etc/rcextensions.tmpl"
214 echo "[DONE ]: saved enterprise-ce rcextensions into $out/etc/rcextensions.tmpl"
213
215
214 # python based programs need to be wrapped
216 # python based programs need to be wrapped
215 mkdir -p $out/bin
217 mkdir -p $out/bin
216
218
217 # required binaries from dependencies
219 # required binaries from dependencies
218 ln -s ${self.supervisor}/bin/supervisorctl $out/bin/
220 ln -s ${self.supervisor}/bin/supervisorctl $out/bin/
219 ln -s ${self.supervisor}/bin/supervisord $out/bin/
221 ln -s ${self.supervisor}/bin/supervisord $out/bin/
220 ln -s ${self.pastescript}/bin/paster $out/bin/
222 ln -s ${self.pastescript}/bin/paster $out/bin/
221 ln -s ${self.channelstream}/bin/channelstream $out/bin/
223 ln -s ${self.channelstream}/bin/channelstream $out/bin/
222 ln -s ${self.celery}/bin/celery $out/bin/
224 ln -s ${self.celery}/bin/celery $out/bin/
223 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
225 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
224 ln -s ${self.pyramid}/bin/prequest $out/bin/
226 ln -s ${self.pyramid}/bin/prequest $out/bin/
225 ln -s ${self.pyramid}/bin/pserve $out/bin/
227 ln -s ${self.pyramid}/bin/pserve $out/bin/
226
228
227 echo "[DONE ]: created symlinks into $out/bin"
229 echo "[DONE ]: created symlinks into $out/bin"
228 DEPS="$out/bin/supervisorctl \
230 DEPS="$out/bin/supervisorctl \
229 $out/bin/supervisord \
231 $out/bin/supervisord \
230 $out/bin/paster \
232 $out/bin/paster \
231 $out/bin/channelstream \
233 $out/bin/channelstream \
232 $out/bin/celery \
234 $out/bin/celery \
233 $out/bin/gunicorn \
235 $out/bin/gunicorn \
234 $out/bin/prequest \
236 $out/bin/prequest \
235 $out/bin/pserve"
237 $out/bin/pserve"
236
238
237 # wrap only dependency scripts, they require to have full PYTHONPATH set
239 # wrap only dependency scripts, they require to have full PYTHONPATH set
238 # to be able to import all packages
240 # to be able to import all packages
239 for file in $DEPS;
241 for file in $DEPS;
240 do
242 do
241 wrapProgram $file \
243 wrapProgram $file \
242 --prefix PATH : $PATH \
244 --prefix PATH : $PATH \
243 --prefix PYTHONPATH : $PYTHONPATH \
245 --prefix PYTHONPATH : $PYTHONPATH \
244 --set PYTHONHASHSEED random
246 --set PYTHONHASHSEED random
245 done
247 done
246
248
247 echo "[DONE ]: enterprise-ce binary wrapping"
249 echo "[DONE ]: enterprise-ce binary wrapping"
248
250
249 # rhodecode-tools don't need wrapping
251 # rhodecode-tools don't need wrapping
250 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
252 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
251
253
252 # expose sources of CE
254 # expose sources of CE
253 ln -s $out $out/etc/rhodecode_enterprise_ce_source
255 ln -s $out $out/etc/rhodecode_enterprise_ce_source
254
256
255 # expose static files folder
257 # expose static files folder
256 cp -Rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/public/ $out/etc/static
258 cp -Rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/public/ $out/etc/static
257 chmod 755 -R $out/etc/static
259 chmod 755 -R $out/etc/static
258
260
259 '';
261 '';
260 });
262 });
261
263
262 };
264 };
263
265
264 basePythonPackages = with builtins;
266 basePythonPackages = with builtins;
265 if isAttrs pythonPackages then
267 if isAttrs pythonPackages then
266 pythonPackages
268 pythonPackages
267 else
269 else
268 getAttr pythonPackages pkgs;
270 getAttr pythonPackages pkgs;
269
271
270 pythonGeneratedPackages = import ./pkgs/python-packages.nix {
272 pythonGeneratedPackages = import ./pkgs/python-packages.nix {
271 inherit
273 inherit
272 pkgs;
274 pkgs;
273 inherit
275 inherit
274 (pkgs)
276 (pkgs)
275 fetchurl
277 fetchurl
276 fetchgit
278 fetchgit
277 fetchhg;
279 fetchhg;
278 };
280 };
279
281
280 pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix {
282 pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix {
281 inherit pkgs basePythonPackages;
283 inherit pkgs basePythonPackages;
282 };
284 };
283
285
284 # Apply all overrides and fix the final package set
286 # Apply all overrides and fix the final package set
285 myPythonPackagesUnfix = with pkgs.lib;
287 myPythonPackagesUnfix = with pkgs.lib;
286 (extends pythonExternalOverrides
288 (extends pythonExternalOverrides
287 (extends pythonLocalOverrides
289 (extends pythonLocalOverrides
288 (extends pythonCommunityOverrides
290 (extends pythonCommunityOverrides
289 (extends pythonGeneratedPackages
291 (extends pythonGeneratedPackages
290 basePythonPackagesUnfix))));
292 basePythonPackagesUnfix))));
291
293
292 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
294 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
293
295
294 in myPythonPackages.rhodecode-enterprise-ce
296 in myPythonPackages.rhodecode-enterprise-ce
@@ -1,151 +1,151 b''
1 .. _backup-ref:
1 .. _backup-ref:
2
2
3 Backup and Restore
3 Backup and Restore
4 ==================
4 ==================
5
5
6 *“The condition of any backup is unknown until a restore is attempted.”*
6 *“The condition of any backup is unknown until a restore is attempted.”*
7 `Schrödinger's Backup`_
7 `Schrödinger's Backup`_
8
8
9 To snapshot an instance of |RCE|, and save its settings, you need to backup the
9 To snapshot an instance of |RCE|, and save its settings, you need to backup the
10 following parts of the system at the same time.
10 following parts of the system at the same time.
11
11
12 * The |repos| managed by the instance together with the stored Gists.
12 * The |repos| managed by the instance together with the stored Gists.
13 * The |RCE| database.
13 * The |RCE| database.
14 * Any configuration files or extensions that you've configured. In most
14 * Any configuration files or extensions that you've configured. In most
15 cases it's only the :file:`rhodecode.ini` file.
15 cases it's only the :file:`rhodecode.ini` file.
16 * Installer files such as those in `/opt/rhodecode` can be backed-up, however
16 * Installer files such as those in `/opt/rhodecode` can be backed-up, however
17 it's not required since in case of a recovery installer simply
17 it's not required since in case of a recovery installer simply
18 re-creates those.
18 re-creates those.
19
19
20
20
21 .. important::
21 .. important::
22
22
23 Ideally you should script all of these functions so that it creates a
23 Ideally you should script all of these functions so that it creates a
24 backup snapshot of your system at a particular timestamp and then run that
24 backup snapshot of your system at a particular timestamp and then run that
25 script regularly.
25 script regularly.
26
26
27 Backup Details
27 Backup Details
28 --------------
28 --------------
29
29
30 To backup the relevant parts of |RCE| required to restore your system, use
30 To backup the relevant parts of |RCE| required to restore your system, use
31 the information in this section to identify what is important to you.
31 the information in this section to identify what is important to you.
32
32
33 Repository Backup
33 Repository Backup
34 ^^^^^^^^^^^^^^^^^
34 ^^^^^^^^^^^^^^^^^
35
35
36 To back up your |repos|, use the API to get a list of all |repos| managed,
36 To back up your |repos|, use the API to get a list of all |repos| managed,
37 and then clone them to your backup location. This is the most safe backup option.
37 and then clone them to your backup location. This is the most safe backup option.
38 Backing up the storage directory could potentially result in a backup of
38 Backing up the storage directory could potentially result in a backup of
39 partially committed files or commits. (Backup taking place during a big push)
39 partially committed files or commits. (Backup taking place during a big push)
40 As an alternative you could use a rsync or simple `cp` commands if you can
40 As an alternative you could use a rsync or simple `cp` commands if you can
41 ensure your instance is only in read-only mode or stopped at the moment.
41 ensure your instance is only in read-only mode or stopped at the moment.
42
42
43
43
44 Use the ``get_repos`` method to list all your managed |repos|,
44 Use the ``get_repos`` method to list all your managed |repos|,
45 and use the ``clone_uri`` information that is returned. See the :ref:`api`
45 and use the ``clone_uri`` information that is returned. See the :ref:`api`
46 for more information. Be sure to keep the structure or repositories with their
46 for more information. Be sure to keep the structure or repositories with their
47 repository groups.
47 repository groups.
48
48
49 .. important::
49 .. important::
50
50
51 This will not work for |svn| |repos|. Currently the only way to back up
51 This will not work for |svn| |repos|. Currently the only way to back up
52 your |svn| |repos| is to make a copy of them.
52 your |svn| |repos| is to make a copy of them.
53
53
54 It is also important to note, that you can only restore the |svn| |repos|
54 It is also important to note, that you can only restore the |svn| |repos|
55 using the same version as they were saved with.
55 using the same version as they were saved with.
56
56
57 Database Backup
57 Database Backup
58 ^^^^^^^^^^^^^^^
58 ^^^^^^^^^^^^^^^
59
59
60 The instance database contains all the |RCE| permissions settings,
60 The instance database contains all the |RCE| permissions settings,
61 and user management information. To backup your database,
61 and user management information. To backup your database,
62 export it using the following appropriate example, and then move it to your
62 export it using the following appropriate example, and then move it to your
63 backup location:
63 backup location:
64
64
65 .. code-block:: bash
65 .. code-block:: bash
66
66
67 # For MySQL DBs
67 # For MySQL DBs
68 $ mysqldump -u <uname> -p <pass> rhodecode_db_name > mysql-db-backup
68 $ mysqldump -u <uname> -p <pass> rhodecode_db_name > mysql-db-backup
69 # MySQL restore command
69 # MySQL restore command
70 $ mysql -u <uname> -p <pass> rhodecode_db_name < mysql-db-backup
70 $ mysql -u <uname> -p <pass> rhodecode_db_name < mysql-db-backup
71
71
72 # For PostgreSQL DBs
72 # For PostgreSQL DBs
73 $ PGPASSWORD=<pass> pg_dump --inserts -U <uname> -h localhost rhodecode_db_name > postgresql-db-backup
73 $ PGPASSWORD=<pass> pg_dump --inserts -U <uname> -h localhost rhodecode_db_name > postgresql-db-backup
74 # PosgreSQL restore
74 # PosgreSQL restore
75 $ PGPASSWORD=<pass> psql -U <uname> -h localhost -d rhodecode_db_name -1 -f postgresql-db-backup
75 $ PGPASSWORD=<pass> psql -U <uname> -h localhost -d rhodecode_db_name -1 -f postgresql-db-backup
76
76
77 # For SQLite
77 # For SQLite
78 $ sqlite3 rhodecode.db ‘.dump’ > sqlite-db-backup
78 $ sqlite3 rhodecode.db ‘.dump’ > sqlite-db-backup
79 # SQLite restore
79 # SQLite restore
80 $ copy sqlite-db-backup rhodecode.db
80 $ copy sqlite-db-backup rhodecode.db
81
81
82
82
83 The default |RCE| SQLite database location is
83 The default |RCE| SQLite database location is
84 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
84 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
85
85
86 If running MySQL or PostgreSQL databases, you will have configured these
86 If running MySQL or PostgreSQL databases, you will have configured these
87 separately, for more information see :ref:`rhodecode-database-ref`
87 separately, for more information see :ref:`rhodecode-database-ref`
88
88
89 Configuration File Backup
89 Configuration File Backup
90 ^^^^^^^^^^^^^^^^^^^^^^^^^
90 ^^^^^^^^^^^^^^^^^^^^^^^^^
91
91
92 Depending on your setup, you could have a number of configuration files that
92 Depending on your setup, you could have a number of configuration files that
93 should be backed up. You may have some, or all of the configuration files
93 should be backed up. You may have some, or all of the configuration files
94 listed in the :ref:`config-rce-files` section. Ideally you should back these
94 listed in the :ref:`config-rce-files` section. Ideally you should back these
95 up at the same time as the database and |repos|. It really depends on if you need
95 up at the same time as the database and |repos|. It really depends on if you need
96 the configuration file like logs, custom modules. We always recommend backing
96 the configuration file like logs, custom modules. We always recommend backing
97 those up.
97 those up.
98
98
99 Gist Backup
99 Gist Backup
100 ^^^^^^^^^^^
100 ^^^^^^^^^^^
101
101
102 To backup the gists on your |RCE| instance you usually have to backup the
102 To backup the gists on your |RCE| instance you usually have to backup the
103 gist storage path. If this haven't been changed it's located inside
103 gist storage path. If this haven't been changed it's located inside
104 :file:`.rc_gist_store` and the metadata in :file:`.rc_gist_metadata`.
104 :file:`.rc_gist_store` and the metadata in :file:`.rc_gist_metadata`.
105 You can use the ``get_users`` and ``get_gists`` API methods to fetch the
105 You can use the ``get_users`` and ``get_gists`` API methods to fetch the
106 gists for each user on the instance.
106 gists for each user on the instance.
107
107
108 Extension Backups
108 Extension Backups
109 ^^^^^^^^^^^^^^^^^
109 ^^^^^^^^^^^^^^^^^
110
110
111 You should also backup any extensions added in the
111 You should also backup any extensions added in the
112 :file:`home/{user}/.rccontrol/{instance-id}/rcextensions` directory.
112 :file:`home/{user}/.rccontrol/{instance-id}/rcextensions` directory.
113
113
114 Full-text Search Backup
114 Full-text Search Backup
115 ^^^^^^^^^^^^^^^^^^^^^^^
115 ^^^^^^^^^^^^^^^^^^^^^^^
116
116
117 You may also have full text search set up, but the index can be rebuild from
117 You may also have full text search set up, but the index can be rebuild from
118 re-imported |repos| if necessary. You will most likely want to backup your
118 re-imported |repos| if necessary. You will most likely want to backup your
119 :file:`mapping.ini` file if you've configured that. For more information, see
119 :file:`search_mapping.ini` file if you've configured that. For more information, see
120 the :ref:`indexing-ref` section.
120 the :ref:`indexing-ref` section.
121
121
122 Restoration Steps
122 Restoration Steps
123 -----------------
123 -----------------
124
124
125 To restore an instance of |RCE| from its backed up components, to a fresh
125 To restore an instance of |RCE| from its backed up components, to a fresh
126 system use the following steps.
126 system use the following steps.
127
127
128 1. Install a new instance of |RCE| using sqlite option as database.
128 1. Install a new instance of |RCE| using sqlite option as database.
129 2. Restore your database.
129 2. Restore your database.
130 3. Once installed, replace you backed up the :file:`rhodecode.ini` with your
130 3. Once installed, replace you backed up the :file:`rhodecode.ini` with your
131 backup version. Ensure this file points to the restored
131 backup version. Ensure this file points to the restored
132 database, see the :ref:`config-database` section.
132 database, see the :ref:`config-database` section.
133 4. Restart |RCE| and remap and rescan your |repos| to verify filesystem access,
133 4. Restart |RCE| and remap and rescan your |repos| to verify filesystem access,
134 see the :ref:`remap-rescan` section.
134 see the :ref:`remap-rescan` section.
135
135
136
136
137 Post Restoration Steps
137 Post Restoration Steps
138 ^^^^^^^^^^^^^^^^^^^^^^
138 ^^^^^^^^^^^^^^^^^^^^^^
139
139
140 Once you have restored your |RCE| instance to basic functionality, you can
140 Once you have restored your |RCE| instance to basic functionality, you can
141 then work on restoring any specific setup changes you had made.
141 then work on restoring any specific setup changes you had made.
142
142
143 * To recreate the |RCE| index, use the backed up :file:`mapping.ini` file if
143 * To recreate the |RCE| index, use the backed up :file:`search_mapping.ini` file if
144 you had made changes and rerun the indexer. See the
144 you had made changes and rerun the indexer. See the
145 :ref:`indexing-ref` section for details.
145 :ref:`indexing-ref` section for details.
146 * To reconfigure any extensions, copy the backed up extensions into the
146 * To reconfigure any extensions, copy the backed up extensions into the
147 :file:`/home/{user}/.rccontrol/{instance-id}/rcextensions` and also specify
147 :file:`/home/{user}/.rccontrol/{instance-id}/rcextensions` and also specify
148 any custom hooks if necessary. See the :ref:`extensions-hooks-ref` section for
148 any custom hooks if necessary. See the :ref:`extensions-hooks-ref` section for
149 details.
149 details.
150
150
151 .. _Schrödinger's Backup: http://novabackup.novastor.com/blog/schrodingers-backup-good-bad-backup/
151 .. _Schrödinger's Backup: http://novabackup.novastor.com/blog/schrodingers-backup-good-bad-backup/
@@ -1,74 +1,74 b''
1 .. _config-files:
1 .. _config-files:
2
2
3 Configuration Files Overview
3 Configuration Files Overview
4 ============================
4 ============================
5
5
6 |RCE| and |RCC| have a number of different configuration files. The following
6 |RCE| and |RCC| have a number of different configuration files. The following
7 is a brief explanation of each, and links to their associated configuration
7 is a brief explanation of each, and links to their associated configuration
8 sections.
8 sections.
9
9
10 .. rst-class:: dl-horizontal
10 .. rst-class:: dl-horizontal
11
11
12 \- **rhodecode.ini**
12 \- **rhodecode.ini**
13 Default location:
13 Default location:
14 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
14 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
15
15
16 This is the main |RCE| configuration file and controls much of its
16 This is the main |RCE| configuration file and controls much of its
17 default behaviour. It is also used to configure certain customer
17 default behaviour. It is also used to configure certain customer
18 settings. Here are some of the most common reasons to make changes to
18 settings. Here are some of the most common reasons to make changes to
19 this file.
19 this file.
20
20
21 * :ref:`config-database`
21 * :ref:`config-database`
22 * :ref:`set-up-mail`
22 * :ref:`set-up-mail`
23 * :ref:`increase-gunicorn`
23 * :ref:`increase-gunicorn`
24 * :ref:`x-frame`
24 * :ref:`x-frame`
25
25
26 \- **mapping.ini**
26 \- **search_mapping.ini**
27 Default location:
27 Default location:
28 :file:`/home/{user}/.rccontrol/{instance-id}/mapping.ini`
28 :file:`/home/{user}/.rccontrol/{instance-id}/search_mapping.ini`
29
29
30 This file is used to control the |RCE| indexer. It comes configured
30 This file is used to control the |RCE| indexer. It comes configured
31 to index your instance. To change the default configuration, see
31 to index your instance. To change the default configuration, see
32 :ref:`advanced-indexing`.
32 :ref:`advanced-indexing`.
33
33
34 \- **vcsserver.ini**
34 \- **vcsserver.ini**
35 Default location:
35 Default location:
36 :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`
36 :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`
37
37
38 The VCS Server handles the connection between your |repos| and |RCE|.
38 The VCS Server handles the connection between your |repos| and |RCE|.
39 See the :ref:`vcs-server` section for configuration options and more
39 See the :ref:`vcs-server` section for configuration options and more
40 detailed information.
40 detailed information.
41
41
42 \- **supervisord.ini**
42 \- **supervisord.ini**
43 Default location:
43 Default location:
44 :file:`/home/{user}/.rccontrol/supervisor/supervisord.ini`
44 :file:`/home/{user}/.rccontrol/supervisor/supervisord.ini`
45
45
46 |RCC| uses Supervisor to monitor and manage installed instances of
46 |RCC| uses Supervisor to monitor and manage installed instances of
47 |RCE| and the VCS Server. |RCC| will manage this file completely,
47 |RCE| and the VCS Server. |RCC| will manage this file completely,
48 unless you install |RCE| in self-managed mode. For more information,
48 unless you install |RCE| in self-managed mode. For more information,
49 see the :ref:`Supervisor Setup<control:supervisor-setup>` section.
49 see the :ref:`Supervisor Setup<control:supervisor-setup>` section.
50
50
51 \- **.rccontrol.ini**
51 \- **.rccontrol.ini**
52 Default location: :file:`/home/{user}/.rccontrol.ini`
52 Default location: :file:`/home/{user}/.rccontrol.ini`
53
53
54 This file contains the instances that |RCC| starts at boot, which is all
54 This file contains the instances that |RCC| starts at boot, which is all
55 by default, but for more information, see
55 by default, but for more information, see
56 the :ref:`Manually Start At Boot <control:set-start-boot>` section.
56 the :ref:`Manually Start At Boot <control:set-start-boot>` section.
57
57
58 \- **.rhoderc**
58 \- **.rhoderc**
59 Default location: :file:`/home/{user}/.rhoderc`
59 Default location: :file:`/home/{user}/.rhoderc`
60
60
61 This file is used by the |RCE| API when accessing an instance from a
61 This file is used by the |RCE| API when accessing an instance from a
62 remote machine. The API checks this file for connection and
62 remote machine. The API checks this file for connection and
63 authentication details. For more details, see the :ref:`config-rhoderc`
63 authentication details. For more details, see the :ref:`config-rhoderc`
64 section.
64 section.
65
65
66 \- **MANIFEST**
66 \- **MANIFEST**
67 Default location: :file:`/home/{user}/.rccontrol/cache/MANIFEST`
67 Default location: :file:`/home/{user}/.rccontrol/cache/MANIFEST`
68
68
69 |RCC| uses this file to source the latest available builds from the
69 |RCC| uses this file to source the latest available builds from the
70 secure RhodeCode download channels. The only reason to mess with this file
70 secure RhodeCode download channels. The only reason to mess with this file
71 is if you need to do an offline installation,
71 is if you need to do an offline installation,
72 see the :ref:`Offline Installation<control:offline-installer-ref>`
72 see the :ref:`Offline Installation<control:offline-installer-ref>`
73 instructions, otherwise |RCC| will completely manage this file.
73 instructions, otherwise |RCC| will completely manage this file.
74
74
@@ -1,276 +1,359 b''
1 .. _indexing-ref:
1 .. _indexing-ref:
2
2
3 Full-text Search
3 Full-text Search
4 ----------------
4 ----------------
5
5
6 By default RhodeCode is configured to use `Whoosh`_ to index |repos| and
6 RhodeCode provides a full text search capabilities to search inside file content,
7 provide full-text search.
7 commit message, and file paths. Indexing is not enabled by default and to use
8 full text search building an index is a pre-requisite.
8
9
9 |RCE| also provides support for `Elasticsearch`_ as a backend for scalable
10 By default RhodeCode is configured to use `Whoosh`_ to index |repos| and
10 search. See :ref:`enable-elasticsearch` for details.
11 provide full-text search. `Whoosh`_ works well for a small amount of data and
12 shouldn't be used in case of large code-bases and lots of repositories.
13
14 |RCE| also provides support for `ElasticSearch 6`_ as a backend more for advanced
15 and scalable search. See :ref:`enable-elasticsearch` for details.
11
16
12 Indexing
17 Indexing
13 ^^^^^^^^
18 ^^^^^^^^
14
19
15 To run the indexer you need to use an |authtoken| with admin rights to all
20 To run the indexer you need to have an |authtoken| with admin rights to all |repos|.
16 |repos|.
17
21
18 To index new content added, you have the option to set the indexer up in a
22 To index repositories stored in RhodeCode, you have the option to set the indexer up in a
19 number of ways, for example:
23 number of ways, for example:
20
24
21 * Call the indexer via a cron job. We recommend running this nightly,
25 * Call the indexer via a cron job. We recommend running this once at night.
22 unless you need everything indexed immediately.
26 In case you need everything indexed immediately it's possible to index few
23 * Set the indexer to infinitely loop and reindex as soon as it has run its
27 times during the day. Indexer has a special locking mechanism that won't allow
24 cycle.
28 two instances of indexer running at once. It's safe to run it even every 1hr.
29 * Set the indexer to infinitely loop and reindex as soon as it has run its previous cycle.
25 * Hook the indexer up with your CI server to reindex after each push.
30 * Hook the indexer up with your CI server to reindex after each push.
26
31
27 The indexer works by indexing new commits added since the last run. If you
32 The indexer works by indexing new commits added since the last run, and comparing
28 wish to build a brand new index from scratch each time,
33 file changes to index only new or modified files.
29 use the ``force`` option in the configuration file.
34 If you wish to build a brand new index from scratch each time, use the ``force``
35 option in the configuration file, or run it with --force flag.
30
36
31 .. important::
37 .. important::
32
38
33 You need to have |RCT| installed, see :ref:`install-tools`. Since |RCE|
39 You need to have |RCT| installed, see :ref:`install-tools`. Since |RCE|
34 3.5.0 they are installed by default.
40 3.5.0 they are installed by default and available with community/enterprise installations.
35
41
36 To set up indexing, use the following steps:
42 To set up indexing, use the following steps:
37
43
38 1. :ref:`config-rhoderc`, if running tools remotely.
44 1. :ref:`config-rhoderc`, if running tools remotely.
39 2. :ref:`run-index`
45 2. :ref:`run-index`
40 3. :ref:`set-index`
46 3. :ref:`set-index`
41 4. :ref:`advanced-indexing`
47 4. :ref:`advanced-indexing`
42
48
43 .. _config-rhoderc:
49 .. _config-rhoderc:
44
50
45 Configure the ``.rhoderc`` File
51 Configure the ``.rhoderc`` File
46 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
52 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
47
53
54 .. note::
55
56 Optionally it's possible to use indexer without the ``.rhoderc``. Simply instead of
57 executing with `--instance-name=enterprise-1` execute providing the host and token
58 directly: `--api-host=http://127.0.0.1:10000 --api-key=<auth-token-goes-here>`
59
60
48 |RCT| uses the :file:`/home/{user}/.rhoderc` file for connection details
61 |RCT| uses the :file:`/home/{user}/.rhoderc` file for connection details
49 to |RCE| instances. If this file is not automatically created,
62 to |RCE| instances. If this file is not automatically created,
50 you can configure it using the following example. You need to configure the
63 you can configure it using the following example. You need to configure the
51 details for each instance you want to index.
64 details for each instance you want to index.
52
65
53 .. code-block:: bash
66 .. code-block:: bash
54
67
55 # Check the instance details
68 # Check the instance details
56 # of the instance you want to index
69 # of the instance you want to index
57 $ rccontrol status
70 $ rccontrol status
58
71
59 - NAME: enterprise-1
72 - NAME: enterprise-1
60 - STATUS: RUNNING
73 - STATUS: RUNNING
61 - TYPE: Momentum
74 - TYPE: Enterprise
62 - VERSION: 1.5.0
75 - VERSION: 4.1.0
63 - URL: http://127.0.0.1:10000
76 - URL: http://127.0.0.1:10003
64
77
65 To get your API Token, on the |RCE| interface go to
78 To get your API Token, on the |RCE| interface go to
66 :menuselection:`username --> My Account --> Auth tokens`
79 :menuselection:`username --> My Account --> Auth tokens`
67
80
68 .. code-block:: ini
81 .. code-block:: ini
69
82
70 # Configure .rhoderc with matching details
83 # Configure .rhoderc with matching details
71 # This allows the indexer to connect to the instance
84 # This allows the indexer to connect to the instance
72 [instance:enterprise-1]
85 [instance:enterprise-1]
73 api_host = http://127.0.0.1:10000
86 api_host = http://127.0.0.1:10000
74 api_key = <auth token goes here>
87 api_key = <auth token goes here>
75 repo_dir = /home/<username>/repos
88
76
89
77 .. _run-index:
90 .. _run-index:
78
91
79 Run the Indexer
92 Run the Indexer
80 ^^^^^^^^^^^^^^^
93 ^^^^^^^^^^^^^^^
81
94
82 Run the indexer using the following command, and specify the instance you
95 Run the indexer using the following command, and specify the instance you want to index:
83 want to index:
84
96
85 .. code-block:: bash
97 .. code-block:: bash
86
98
87 # From inside a virtualevv
99 # Using default simples indexing of all repositories
88 (venv)$ rhodecode-index --instance-name=enterprise-1
89
90 # Using default installation
91 $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
100 $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
92 --instance-name=enterprise-1
101 --instance-name=enterprise-1
93
102
94 # Using a custom mapping file
103 # Using a custom mapping file with indexing rules, and using elasticsearch 6 backend
95 $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
104 $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
96 --instance-name=enterprise-1 \
105 --instance-name=enterprise-1 \
97 --mapping=/home/user/.rccontrol/enterprise-1/mapping.ini
106 --mapping=/home/user/.rccontrol/enterprise-1/search_mapping.ini \
107 --es-version=6 --engine-location=http://elasticsearch-host:9200
108
109 # Using a custom mapping file and invocation without ``.rhoderc``
110 $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
111 --api-host=http://rhodecodecode.myserver.com --api-key=xxxxx \
112 --mapping=/home/user/.rccontrol/enterprise-1/search_mapping.ini
113
114 # From inside a virtualev on your local machine or CI server.
115 (venv)$ rhodecode-index --instance-name=enterprise-1
116
98
117
99 .. note::
118 .. note::
100
119
101 In case of often indexing the index may become fragmented. Most often a result of that
120 In case of often indexing the index may become fragmented. Most often a result of that
102 is error about `too many open files`. To fix this indexer needs to be executed with
121 is error about `too many open files`. To fix this indexer needs to be executed with
103 --optimize flag. E.g `rhodecode-index --instance-name=enterprise-1 --optimize`
122 --optimize flag. E.g `rhodecode-index --instance-name=enterprise-1 --optimize`
104 This should be executed regularly, once a week is recommended.
123 This should be executed regularly, once a week is recommended.
105
124
106
125
107 .. _set-index:
126 .. _set-index:
108
127
109 Schedule the Indexer
128 Schedule the Indexer
110 ^^^^^^^^^^^^^^^^^^^^
129 ^^^^^^^^^^^^^^^^^^^^
111
130
112 To schedule the indexer, configure the crontab file to run the indexer inside
131 To schedule the indexer, configure the crontab file to run the indexer inside
113 your |RCT| virtualenv using the following steps.
132 your |RCT| virtualenv using the following steps.
114
133
115 1. Open the crontab file, using ``crontab -e``.
134 1. Open the crontab file, using ``crontab -e``.
116 2. Add the indexer to the crontab, and schedule it to run as regularly as you
135 2. Add the indexer to the crontab, and schedule it to run as regularly as you
117 wish.
136 wish.
118 3. Save the file.
137 3. Save the file.
119
138
120 .. code-block:: bash
139 .. code-block:: bash
121
140
122 $ crontab -e
141 $ crontab -e
123
142
124 # The virtualenv can be called using its full path, so for example you can
143 # The virtualenv can be called using its full path, so for example you can
125 # put this example into the crontab
144 # put this example into the crontab
126
145
127 # Run the indexer daily at 4am using the default mapping settings
146 # Run the indexer daily at 4am using the default mapping settings
128 * 4 * * * /home/ubuntu/.virtualenv/rhodecode-venv/bin/rhodecode-index \
147 * 4 * * * /home/ubuntu/.virtualenv/rhodecode-venv/bin/rhodecode-index \
129 --instance-name=enterprise-1
148 --instance-name=enterprise-1
130
149
131 # Run the indexer every Sunday at 3am using default mapping
150 # Run the indexer every Sunday at 3am using default mapping
132 * 3 * * 0 /home/ubuntu/.virtualenv/rhodecode-venv/bin/rhodecode-index \
151 * 3 * * 0 /home/ubuntu/.virtualenv/rhodecode-venv/bin/rhodecode-index \
133 --instance-name=enterprise-1
152 --instance-name=enterprise-1
134
153
135 # Run the indexer every 15 minutes
154 # Run the indexer every 15 minutes
136 # using a specially configured mapping file
155 # using a specially configured mapping file
137 */15 * * * * ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
156 */15 * * * * ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
138 --instance-name=enterprise-4 \
157 --instance-name=enterprise-4 \
139 --mapping=/home/user/.rccontrol/enterprise-4/mapping.ini
158 --mapping=/home/user/.rccontrol/enterprise-4/search_mapping.ini
140
159
141 .. _advanced-indexing:
160 .. _advanced-indexing:
142
161
143 Advanced Indexing
162 Advanced Indexing
144 ^^^^^^^^^^^^^^^^^
163 ^^^^^^^^^^^^^^^^^
145
164
146 |RCT| indexes based on the :file:`mapping.ini` file. To configure your index,
165
147 you can specify different options in this file. The default location is:
166 Force Re-Indexing single repository
167 +++++++++++++++++++++++++++++++++++
168
169 Often it's required to re-index whole repository because of some repository changes,
170 or to remove some indexed secrets, or files. There's a special `--repo-name=` flag
171 for the indexer that limits execution to a single repository. For example to force-reindex
172 single repository such call can be made::
173
174 rhodecode-index --instance-name=enterprise-1 --force --repo-name=rhodecode-vcsserver
175
176
177 Removing repositories from index
178 ++++++++++++++++++++++++++++++++
148
179
149 * :file:`/home/{user}/.rccontrol/{instance-id}/mapping.ini`, using default
180 The indexer automatically removes renamed repositories and builds index for new names.
150 |RCT|.
181 In the same way if a listed repository in mapping.ini is not reported existing by the
182 server it's removed from the index.
183 In case that you wish to remove indexed repository manually such call would allow that::
184
185 rhodecode-index --instance-name=enterprise-1 --remove-only --repo-name=rhodecode-vcsserver
186
187
188 Using search_mapping.ini file for advanced index rules
189 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
190
191 By default rhodecode-index runs for all repositories, all files with parsing limits
192 defined by the CLI default arguments. You can change those limits by calling with
193 different flags such as `--max-filesize=2048kb` or `--repo-limit=10`
194
195 For more advanced execution logic it's possible to use a configuration file that
196 would define detailed rules which repositories and how should be indexed.
197
198 |RCT| provides an example index configuration file called :file:`search_mapping.ini`.
199 This file is created by default during installation and is located at:
200
201 * :file:`/home/{user}/.rccontrol/{instance-id}/search_mapping.ini`, using default |RCT|.
151 * :file:`~/venv/lib/python2.7/site-packages/rhodecode_tools/templates/mapping.ini`,
202 * :file:`~/venv/lib/python2.7/site-packages/rhodecode_tools/templates/mapping.ini`,
152 when using ``virtualenv``.
203 when using ``virtualenv``.
153
204
154 .. note::
205 .. note::
155
206
156 If you need to create the :file:`mapping.ini` file, use the |RCT|
207 If you need to create the :file:`search_mapping.ini` file manually, use the |RCT|
157 ``rhodecode-index --create-mapping path/to/file`` API call. For details,
208 ``rhodecode-index --create-mapping path/to/search_mapping.ini`` API call.
158 see the :ref:`tools-cli` section.
209 For details, see the :ref:`tools-cli` section.
159
160 The indexer runs in a random order to prevent a failing |repo| from stopping
161 a build. To configure different indexing scenarios, set the following options
162 inside the :file:`mapping.ini` and specify the altered file using the
163 ``--mapping`` option.
164
210
165 * ``index_files`` : Index the specified file types.
211 To Run the indexer with mapping file provide it using `--mapping` flag::
166 * ``skip_files`` : Do not index the specified file types.
167 * ``index_files_content`` : Index the content of the specified file types.
168 * ``skip_files_content`` : Do not index the content of the specified files.
169 * ``force`` : Create a fresh index on each run.
170 * ``max_filesize`` : Files larger than the set size will not be indexed.
171 * ``commit_parse_limit`` : Set the batch size when indexing commit messages.
172 Set to a lower number to lessen memory load.
173 * ``repo_limit`` : Set the maximum number or |repos| indexed per run.
174 * ``[INCLUDE]`` : Set |repos| you want indexed. This takes precedent over
175 ``[EXCLUDE]``.
176 * ``[EXCLUDE]`` : Set |repos| you do not want indexed. Exclude can be used to
177 not index branches, forks, or log |repos|.
178
212
179 At the end of the file you can specify conditions for specific |repos| that
213 rhodecode-index --instance-name=enterprise-1 --mapping=/my/path/search_mapping.ini
180 will override the default values. To configure your indexer,
214
181 use the following example :file:`mapping.ini` file.
215
216 Here's a detailed example of using :file:`search_mapping.ini` file.
182
217
183 .. code-block:: ini
218 .. code-block:: ini
184
219
185 [__DEFAULT__]
220 [__DEFAULT__]
186 # default patterns for indexing files and content of files.
221 ; Create index on commits data, and files data in this order. Available options
187 # Binary files are skipped by default.
222 ; are `commits`, `files`
223 index_types = commits,files
224
225 ; Commit fetch limit. In what amount of chunks commits should be fetched
226 ; via api and parsed. This allows server to transfer smaller chunks and be less loaded
227 commit_fetch_limit = 1000
188
228
189 # Index python and markdown files
229 ; Commit process limit. Limit the number of commits indexer should fetch, and
190 index_files = *.py, *.md
230 ; store inside the full text search index. eg. if repo has 2000 commits, and
231 ; limit is 1000, on the first run it will process commits 0-1000 and on the
232 ; second 1000-2000 commits. Help reduce memory usage, default is 50000
233 ; (set -1 for unlimited)
234 commit_process_limit = 20000
191
235
192 # Do not index these file types
236 ; Limit of how many repositories each run can process, default is -1 (unlimited)
193 skip_files = *.svg, *.log, *.dump, *.txt
237 ; in case of 1000s of repositories it's better to execute in chunks to not overload
238 ; the server.
239 repo_limit = -1
194
240
195 # Index both file types and their content
241 ; Default patterns for indexing files and content of files. Binary files
196 index_files_content = *.cpp, *.ini, *.py
242 ; are skipped by default.
243
244 ; Add to index those comma separated files; globs syntax
245 ; e.g index_files = *.py, *.c, *.h, *.js
246 index_files = *,
247
248 ; Do not add to index those comma separated files, this excludes
249 ; both search by name and content; globs syntax
250 ; e.g index_files = *.key, *.sql, *.xml, *.pem, *.crt
251 skip_files = ,
197
252
198 # Index file names, but not file content
253 ; Add to index content of those comma separated files; globs syntax
199 skip_files_content = *.svg,
254 ; e.g index_files = *.h, *.obj
255 index_files_content = *,
200
256
201 # Force rebuilding an index from scratch. Each repository will be rebuild
257 ; Do not add to index content of those comma separated files; globs syntax
202 # from scratch with a global flag. Use local flag to rebuild single repos
258 ; Binary files are not indexed by default.
259 ; e.g index_files = *.min.js, *.xml, *.dump, *.log, *.dump
260 skip_files_content = ,
261
262 ; Force rebuilding an index from scratch. Each repository will be rebuild from
263 ; scratch with a global flag. Use --repo-name=NAME --force to rebuild single repo
203 force = false
264 force = false
204
265
205 # Do not index files larger than 385KB
266 ; maximum file size that indexer will use, files above that limit are not going
206 max_filesize = 385KB
267 ; to have they content indexed.
268 ; Possible options are KB (kilobytes), MB (megabytes), eg 1MB or 1024KB
269 max_filesize = 10MB
207
270
208 # Limit commit indexing to 500 per batch
209 commit_parse_limit = 500
210
211 # Limit each index run to 25 repos
212 repo_limit = 25
213
271
214 # __INCLUDE__ is more important that __EXCLUDE__.
272 [__INDEX_RULES__]
215
273 ; Ordered match rules for repositories. A list of all repositories will be fetched
216 [__INCLUDE__]
274 ; using API and this list will be filtered using those rules.
217 # Include all repos with these names
275 ; Syntax for entry: `glob_pattern_OR_full_repo_name = 0 OR 1` where 0=exclude, 1=include
276 ; When this ordered list is traversed first match will return the include/exclude marker
277 ; For example:
278 ; upstream/binary_repo = 0
279 ; upstream/subrepo/xml_files = 0
280 ; upstream/* = 1
281 ; special-repo = 1
282 ; * = 0
283 ; This will index all repositories under upstream/*, but skip upstream/binary_repo
284 ; and upstream/sub_repo/xml_files, last * = 0 means skip all other matches
218
285
219 docs/* = 1
220 lib/* = 1
221
222 [__EXCLUDE__]
223 # Do not include the following repo in index
224
286
225 dev-docs/* = 1
287 ; == EXPLICIT REPOSITORY INDEXING ==
226 legacy-repos/* = 1
288 ; If defined this will skip using __INDEX_RULES__, and will not use API to fetch
227 *-dev/* = 1
289 ; list of repositories, it will explicitly take names defined with [NAME] format and
228
290 ; try to build the index, to build index just for repo_name_1 and special-repo use:
229 # Each repo that needs special indexing is a separate section below.
291 ; [repo_name_1]
230 # In each section set the options to override the global configuration
292 ; [special-repo]
231 # parameters above.
232 # If special settings are not configured, the global configuration values
233 # above are inherited. If no special repositories are
234 # defined here RhodeCode will use the API to ask for all repositories
235
293
236 # For this repo use different settings
294 ; == PER REPOSITORY CONFIGURATION ==
237 [special-repo]
295 ; This allows overriding the global configuration per repository.
238 commit_parse_limit = 20,
296 ; example to set specific file limit, and skip certain files for repository special-repo
239 skip_files = *.idea, *.xml,
297 ; the CLI flags doesn't override the conf settings.
298 ; [conf:special-repo]
299 ; max_filesize = 5mb
300 ; skip_files = *.xml, *.sql
301
240
302
241 # For another repo use different settings
303
242 [another-special-repo]
304 In case of 1000s of repositories it can be tricky to write the include/exclude rules at first.
243 index_files = *,
305 There's a special flag to test the mapping file rules and list repositories that would
244 max_filesize = 800MB
306 be indexed. Run the indexer with `--show-matched-repos` to list only the
245 commit_parse_limit = 20000
307 match repositories defined in .ini file rules::
308
309 rhodecode-index --instance-name=enterprise-1 --show-matched-repos --mapping=/my/path/search_mapping.ini
310
246
311
247 .. _enable-elasticsearch:
312 .. _enable-elasticsearch:
248
313
249 Enabling Elasticsearch
314 Enabling ElasticSearch
250 ^^^^^^^^^^^^^^^^^^^^^^
315 ^^^^^^^^^^^^^^^^^^^^^^
251
316
317 ElasticSearch is available in EE edition only. It provides much scalable and more advanced
318 search capabilities. While Whoosh is fine for upto 1-2GB of data, beyond that amount it
319 starts slowing down, and can cause other problems.
320 New ElasticSearch 6 also provides much more advanced query language.
321 It allows advanced filtering by file paths, extensions, use OR statements, ranges etc.
322 Please check query language examples in the search field for some advanced query language usage.
323
324
252 1. Open the :file:`rhodecode.ini` file for the instance you wish to edit. The
325 1. Open the :file:`rhodecode.ini` file for the instance you wish to edit. The
253 default location is
326 default location is
254 :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
327 :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
255 2. Find the search configuration section:
328 2. Find the search configuration section:
256
329
257 .. code-block:: ini
330 .. code-block:: ini
258
331
259 ###################################
332 ###################################
260 ## SEARCH INDEXING CONFIGURATION ##
333 ## SEARCH INDEXING CONFIGURATION ##
261 ###################################
334 ###################################
262
335
263 search.module = rhodecode.lib.index.whoosh
336 search.module = rhodecode.lib.index.whoosh
264 search.location = %(here)s/data/index
337 search.location = %(here)s/data/index
265
338
266 and change it to:
339 and change it to:
267
340
268 .. code-block:: ini
341 .. code-block:: ini
269
342
270 search.module = rc_elasticsearch
343 search.module = rc_elasticsearch
271 search.location = http://localhost:9200/
344 search.location = http://localhost:9200
345 ## specify Elastic Search version, 6 for latest or 2 for legacy
346 search.es_version = 6
347
348 where ``search.location`` points to the ElasticSearch server
349 by default running on port 9200.
272
350
273 where ``search.location`` points to the elasticsearch server.
351 Index invocation also needs change. Please provide --es-version= and
352 --engine-location= parameters to define ElasticSearch server location and it's version.
353 For example::
354
355 rhodecode-index --instace-name=enterprise-1 --es-version=6 --engine-location=http://localhost:9200
356
274
357
275 .. _Whoosh: https://pypi.python.org/pypi/Whoosh/
358 .. _Whoosh: https://pypi.python.org/pypi/Whoosh/
276 .. _Elasticsearch: https://www.elastic.co/ No newline at end of file
359 .. _ElasticSearch 6: https://www.elastic.co/
@@ -1,161 +1,192 b''
1 Nginx Configuration Example
1 Nginx Configuration Example
2 ---------------------------
2 ---------------------------
3
3
4 Use the following example to configure Nginx as a your web server.
4 Use the following example to configure Nginx as a your web server.
5
5
6
6
7 .. code-block:: nginx
7 .. code-block:: nginx
8
8
9 ## Rate limiter for certain pages to prevent brute force attacks
9 ## Rate limiter for certain pages to prevent brute force attacks
10 limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
10 limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
11
11
12 ## cache zone
13 proxy_cache_path /etc/nginx/nginx_cache levels=1:2 use_temp_path=off keys_zone=cache_zone:10m inactive=720h max_size=10g;
14
12 ## Custom log format
15 ## Custom log format
13 log_format log_custom '$remote_addr - $remote_user [$time_local] '
16 log_format log_custom '$remote_addr - $remote_user [$time_local] '
14 '"$request" $status $body_bytes_sent '
17 '"$request" $status $body_bytes_sent '
15 '"$http_referer" "$http_user_agent" '
18 '"$http_referer" "$http_user_agent" '
16 '$request_time $upstream_response_time $pipe';
19 '$request_time $upstream_response_time $pipe';
17
20
18 ## Define one or more upstreams (local RhodeCode instance) to connect to
21 ## Define one or more upstreams (local RhodeCode instance) to connect to
19 upstream rc {
22 upstream rc {
20 # Url to running RhodeCode instance.
23 # Url to running RhodeCode instance.
21 # This is shown as `- URL: <host>` in output from rccontrol status.
24 # This is shown as `- URL: <host>` in output from rccontrol status.
22 server 127.0.0.1:10002;
25 server 127.0.0.1:10002;
23
26
24 # add more instances for load balancing
27 # add more instances for load balancing
25 # server 127.0.0.1:10003;
28 # server 127.0.0.1:10003;
26 # server 127.0.0.1:10004;
29 # server 127.0.0.1:10004;
27 }
30 }
28
31
29 ## HTTP to HTTPS rewrite
32 ## HTTP to HTTPS rewrite
30 server {
33 server {
31 listen 80;
34 listen 80;
32 server_name rhodecode.myserver.com;
35 server_name rhodecode.myserver.com;
33
36
34 if ($http_host = rhodecode.myserver.com) {
37 if ($http_host = rhodecode.myserver.com) {
35 rewrite (.*) https://rhodecode.myserver.com$1 permanent;
38 rewrite (.*) https://rhodecode.myserver.com$1 permanent;
36 }
39 }
37 }
40 }
38
41
39 ## Optional gist alias server, for serving nicer GIST urls.
42 ## Optional gist alias server, for serving nicer GIST urls.
40 server {
43 server {
41 listen 443;
44 listen 443;
42 server_name gist.myserver.com;
45 server_name gist.myserver.com;
43 access_log /var/log/nginx/gist.access.log log_custom;
46 access_log /var/log/nginx/gist.access.log log_custom;
44 error_log /var/log/nginx/gist.error.log;
47 error_log /var/log/nginx/gist.error.log;
45
48
46 ssl on;
49 ssl on;
47 ssl_certificate gist.rhodecode.myserver.com.crt;
50 ssl_certificate gist.rhodecode.myserver.com.crt;
48 ssl_certificate_key gist.rhodecode.myserver.com.key;
51 ssl_certificate_key gist.rhodecode.myserver.com.key;
49
52
50 ssl_session_timeout 5m;
53 ssl_session_timeout 5m;
51
54
52 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
55 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
53 ssl_prefer_server_ciphers on;
56 ssl_prefer_server_ciphers on;
54 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
57 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
55
58
56 ## Strict http prevents from https -> http downgrade
59 ## Strict http prevents from https -> http downgrade
57 add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
60 add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
58
61
59 ## Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
62 ## Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
60 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
63 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
61
64
62 rewrite ^/(.+)$ https://rhodecode.myserver.com/_admin/gists/$1;
65 rewrite ^/(.+)$ https://rhodecode.myserver.com/_admin/gists/$1;
63 rewrite (.*) https://rhodecode.myserver.com/_admin/gists;
66 rewrite (.*) https://rhodecode.myserver.com/_admin/gists;
64 }
67 }
65
68
66
69
67 ## MAIN SSL enabled server
70 ## MAIN SSL enabled server
68 server {
71 server {
69 listen 443 ssl http2;
72 listen 443 ssl http2;
70 server_name rhodecode.myserver.com;
73 server_name rhodecode.myserver.com;
71
74
72 access_log /var/log/nginx/rhodecode.access.log log_custom;
75 access_log /var/log/nginx/rhodecode.access.log log_custom;
73 error_log /var/log/nginx/rhodecode.error.log;
76 error_log /var/log/nginx/rhodecode.error.log;
74
77
75 ssl_certificate rhodecode.myserver.com.crt;
78 ssl_certificate rhodecode.myserver.com.crt;
76 ssl_certificate_key rhodecode.myserver.com.key;
79 ssl_certificate_key rhodecode.myserver.com.key;
77
80
78 # enable session resumption to improve https performance
81 # enable session resumption to improve https performance
79 # http://vincent.bernat.im/en/blog/2011-ssl-session-reuse-rfc5077.html
82 # http://vincent.bernat.im/en/blog/2011-ssl-session-reuse-rfc5077.html
80 ssl_session_cache shared:SSL:50m;
83 ssl_session_cache shared:SSL:50m;
81 ssl_session_timeout 5m;
84 ssl_session_timeout 5m;
82
85
83 ## Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
86 ## Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
84 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
87 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
85
88
86 # enables server-side protection from BEAST attacks
89 # enables server-side protection from BEAST attacks
87 # http://blog.ivanristic.com/2013/09/is-beast-still-a-threat.html
90 # http://blog.ivanristic.com/2013/09/is-beast-still-a-threat.html
88 ssl_prefer_server_ciphers on;
91 ssl_prefer_server_ciphers on;
89
92
90 # disable SSLv3(enabled by default since nginx 0.8.19) since it's less secure then TLS http://en.wikipedia.org/wiki/Secure_Sockets_Layer#SSL_3.0
93 # disable SSLv3(enabled by default since nginx 0.8.19) since it's less secure then TLS http://en.wikipedia.org/wiki/Secure_Sockets_Layer#SSL_3.0
91 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
94 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
92
95
93 # ciphers chosen for forward secrecy and compatibility
96 # ciphers chosen for forward secrecy and compatibility
94 # http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html
97 # http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html
95 ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
98 ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
96
99
97 client_body_buffer_size 128k;
100 client_body_buffer_size 128k;
98 # maximum number and size of buffers for large headers to read from client request
101 # maximum number and size of buffers for large headers to read from client request
99 large_client_header_buffers 16 256k;
102 large_client_header_buffers 16 256k;
100
103
101 ## uncomment to serve static files by Nginx, recommended for performance
104 ## uncomment to serve static files by Nginx, recommended for performance
102 # location /_static/rhodecode {
105 # location /_static/rhodecode {
103 # gzip on;
106 # gzip on;
104 # gzip_min_length 500;
107 # gzip_min_length 500;
105 # gzip_proxied any;
108 # gzip_proxied any;
106 # gzip_comp_level 4;
109 # gzip_comp_level 4;
107 # gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/json application/xml application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
110 # gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/json application/xml application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
108 # gzip_vary on;
111 # gzip_vary on;
109 # gzip_disable "msie6";
112 # gzip_disable "msie6";
110 # alias /path/to/.rccontrol/community-1/static;
113 # alias /path/to/.rccontrol/community-1/static;
111 # alias /path/to/.rccontrol/enterprise-1/static;
114 # alias /path/to/.rccontrol/enterprise-1/static;
112 # }
115 # }
113
116
114 ## channelstream location handler, if channelstream live chat and notifications
117 ## channelstream location handler, if channelstream live chat and notifications
115 ## are enable this will proxy the requests to channelstream websocket server
118 ## are enable this will proxy the requests to channelstream websocket server
116 location /_channelstream {
119 location /_channelstream {
117 rewrite /_channelstream/(.*) /$1 break;
120 rewrite /_channelstream/(.*) /$1 break;
118 gzip off;
121 gzip off;
119 tcp_nodelay off;
122 tcp_nodelay off;
120
123
121 proxy_connect_timeout 10;
124 proxy_connect_timeout 10;
122 proxy_send_timeout 10m;
125 proxy_send_timeout 10m;
123 proxy_read_timeout 10m;
126 proxy_read_timeout 10m;
124
127
125 proxy_set_header Host $host;
128 proxy_set_header Host $host;
126 proxy_set_header X-Real-IP $remote_addr;
129 proxy_set_header X-Real-IP $remote_addr;
127 proxy_set_header X-Url-Scheme $scheme;
130 proxy_set_header X-Url-Scheme $scheme;
128 proxy_set_header X-Forwarded-Proto $scheme;
131 proxy_set_header X-Forwarded-Proto $scheme;
129 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
132 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
130
133
131 proxy_http_version 1.1;
134 proxy_http_version 1.1;
132 proxy_set_header Upgrade $http_upgrade;
135 proxy_set_header Upgrade $http_upgrade;
133 proxy_set_header Connection "upgrade";
136 proxy_set_header Connection "upgrade";
134
137
135 proxy_pass http://127.0.0.1:9800;
138 proxy_pass http://127.0.0.1:9800;
136 }
139 }
137
140
138 ## rate limit this endpoint to prevent login page brute-force attacks
141 ## rate limit this endpoint to prevent login page brute-force attacks
139 location /_admin/login {
142 location /_admin/login {
140 limit_req zone=req_limit burst=10 nodelay;
143 limit_req zone=req_limit burst=10 nodelay;
141 try_files $uri @rhodecode_http;
144 try_files $uri @rhodecode_http;
142 }
145 }
143
146
147 ## Special Cache for file store, make sure you enable this intentionally as
148 ## it could bypass upload files permissions
149 # location /_file_store/download {
150 #
151 # proxy_cache cache_zone;
152 # # ignore Set-Cookie
153 # proxy_ignore_headers Set-Cookie;
154 # proxy_ignore_headers Cookie;
155 #
156 # proxy_cache_key $host$uri$is_args$args;
157 # proxy_cache_methods GET;
158 #
159 # proxy_cache_bypass $http_cache_control;
160 # proxy_cache_valid 200 302 720h;
161 #
162 # proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
163 #
164 # # returns cache status in headers
165 # add_header X-Proxy-Cache $upstream_cache_status;
166 # add_header Cache-Control "public";
167 #
168 # proxy_cache_lock on;
169 # proxy_cache_lock_age 5m;
170 #
171 # proxy_pass http://rc;
172 #
173 # }
174
144 location / {
175 location / {
145 try_files $uri @rhodecode_http;
176 try_files $uri @rhodecode_http;
146 }
177 }
147
178
148 location @rhodecode_http {
179 location @rhodecode_http {
149 # example of proxy.conf can be found in our docs.
180 # example of proxy.conf can be found in our docs.
150 include /etc/nginx/proxy.conf;
181 include /etc/nginx/proxy.conf;
151 proxy_pass http://rc;
182 proxy_pass http://rc;
152 }
183 }
153
184
154 ## Custom 502 error page.
185 ## Custom 502 error page.
155 ## Will be displayed while RhodeCode server is turned off
186 ## Will be displayed while RhodeCode server is turned off
156 error_page 502 /502.html;
187 error_page 502 /502.html;
157 location = /502.html {
188 location = /502.html {
158 #root /path/to/.rccontrol/community-1/static;
189 #root /path/to/.rccontrol/community-1/static;
159 root /path/to/.rccontrol/enterprise-1/static;
190 root /path/to/.rccontrol/enterprise-1/static;
160 }
191 }
161 } No newline at end of file
192 }
@@ -1,45 +1,45 b''
1 .. _set-repo-perms:
1 .. _set-repo-perms:
2
2
3 Setting Repository Permissions
3 Setting Repository Permissions
4 ------------------------------
4 ------------------------------
5
5
6 To set the permissions on an individual |repo|, use the following steps:
6 To set the permissions on an individual |repo|, use the following steps:
7
7
8 1. Open :menuselection:`Admin --> Repositories` and select
8 1. Open :menuselection:`Admin --> Repositories` and select
9 :guilabel:`edit` beside the |repo| you wish to configure.
9 :guilabel:`edit` beside the |repo| you wish to configure.
10 2. On the |repo| settings page you will see a number of tabs. Exploring these
10 2. On the |repo| settings page you will see a number of tabs. Exploring these
11 you will find the following main configuration options for a |repo|.
11 you will find the following main configuration options for a |repo|.
12 3. Once you make changes, select :guilabel:`Save`
12 3. Once you make changes, select :guilabel:`Save`
13
13
14 * :guilabel:`Repository group`: Lets you to add a |repo| to a |repo| group.
14 * :guilabel:`Repository group`: Lets you to add a |repo| to a |repo| group.
15 * :guilabel:`Owner`: Lets you change the |repo| owner. Useful when users are
15 * :guilabel:`Owner`: Lets you change the |repo| owner. Useful when users are
16 moving roles within an organisation.
16 moving roles within an organisation.
17 * :guilabel:`Enable automatic locking`: For more information,
17 * :guilabel:`Enable automatic locking`: For more information,
18 see :ref:`repo-locking`
18 see :ref:`repo-locking`
19 * :guilabel:`User Access`: On the permissions tab you can add users,
19 * :guilabel:`User Access`: On the permissions tab you can add users,
20 or user groups, and set the permissions each has for that |repo|.
20 or user groups, and set the permissions each has for that |repo|.
21 * :guilabel:`Invalidate repository cache`: On the Caches tab you can delete
21 * :guilabel:`Invalidate repository cache`: On the Caches tab you can delete
22 the |repo| cache, sometimes needed when mirroring.
22 the |repo| cache, sometimes needed when mirroring.
23
23
24 .. _set-repo-group-perms:
24 .. _set-repo-group-perms:
25
25
26 Setting Repository Group Permissions
26 Setting Repository Group Permissions
27 ------------------------------------
27 ------------------------------------
28
28
29 To set the permissions on a Repository Group, use the following steps:
29 To set the permissions on a Repository Group, use the following steps:
30
30
31 1. Open :menuselection:`Admin --> Repository groups` and select
31 1. Open :menuselection:`Admin --> Repository groups` and select
32 :guilabel:`edit` beside the |repo| you wish to configure.
32 :guilabel:`edit` beside the |repo| you wish to configure.
33 2. On the |repo| group settings page you will see a number of tabs. Exploring
33 2. On the |repo| group settings page you will see a number of tabs. Exploring
34 these you will find the following main configuration options:
34 these you will find the following main configuration options:
35
35
36 * :guilabel:`Owner`: Lets you change the group owner. Useful when users are
36 * :guilabel:`Owner`: Lets you change the group owner. Useful when users are
37 moving roles within an organisation.
37 moving roles within an organisation.
38 * :guilabel:`Group parent`: Lets you add the |repo| group as a sub-group
38 * :guilabel:`Repository group`: Lets you add the |repo| group as a sub-group
39 of a larger group, i.e. :guilabel:`QA-Repos >> QA-Repos-Berlin`
39 of a larger group, i.e. :guilabel:`QA-Repos >> QA-Repos-Berlin`
40 * :guilabel:`Enable automatic locking`: For more information,
40 * :guilabel:`Enable automatic locking`: For more information,
41 see :ref:`repo-locking`
41 see :ref:`repo-locking`
42 * :guilabel:`User Access`: On the permissions tab you can add users,
42 * :guilabel:`User Access`: On the permissions tab you can add users,
43 or user groups, and set the permissions each has for that |repo| group.
43 or user groups, and set the permissions each has for that |repo| group.
44 * :guilabel:`Add Child Group`: Allows you to add sub-repository-groups
44 * :guilabel:`Add Child Group`: Allows you to add sub-repository-groups
45 that will all share the same permissions.
45 that will all share the same permissions.
@@ -1,32 +1,34 b''
1 .. _rhodecode-admin-ref:
1 .. _rhodecode-admin-ref:
2
2
3 System Administration
3 System Administration
4 =====================
4 =====================
5
5
6 The following are the most common system administration tasks.
6 The following are the most common system administration tasks.
7
7
8 .. only:: latex
8 .. only:: latex
9
9
10 * :ref:`vcs-server`
10 * :ref:`vcs-server`
11 * :ref:`apache-ws-ref`
11 * :ref:`apache-ws-ref`
12 * :ref:`nginx-ws-ref`
12 * :ref:`nginx-ws-ref`
13 * :ref:`rhodecode-tuning-ref`
13 * :ref:`rhodecode-tuning-ref`
14 * :ref:`indexing-ref`
14 * :ref:`indexing-ref`
15 * :ref:`rhodecode-reset-ref`
15 * :ref:`rhodecode-reset-ref`
16
16
17 .. toctree::
17 .. toctree::
18
18
19 config-files-overview
19 config-files-overview
20 vcs-server
20 vcs-server
21 svn-http
21 svn-http
22 svn-path-permissions
22 svn-path-permissions
23 gunicorn-ssl-support
23 gunicorn-ssl-support
24 apache-config
24 apache-config
25 nginx-config
25 nginx-config
26 backup-restore
26 backup-restore
27 tuning-rhodecode
27 tuning-rhodecode
28 indexing
28 indexing
29 reset-information
29 reset-information
30 enable-debug
30 enable-debug
31 admin-tricks
31 admin-tricks
32 cleanup-cmds
32 cleanup-cmds
33 restore-deleted-repositories
34
@@ -1,171 +1,171 b''
1 .. _system-overview-ref:
1 .. _system-overview-ref:
2
2
3 System Overview
3 System Overview
4 ===============
4 ===============
5
5
6 Latest Version
6 Latest Version
7 --------------
7 --------------
8
8
9 * |release| on Unix and Windows systems.
9 * |release| on Unix and Windows systems.
10
10
11 System Architecture
11 System Architecture
12 -------------------
12 -------------------
13
13
14 The following diagram shows a typical production architecture.
14 The following diagram shows a typical production architecture.
15
15
16 .. image:: ../images/architecture-diagram.png
16 .. image:: ../images/architecture-diagram.png
17 :align: center
17 :align: center
18
18
19 Supported Operating Systems
19 Supported Operating Systems
20 ---------------------------
20 ---------------------------
21
21
22 Linux
22 Linux
23 ^^^^^
23 ^^^^^
24
24
25 * Ubuntu 14.04
25 * Ubuntu 14.04
26 * CentOS 6.2 and 7
26 * CentOS 6.2 and 7
27 * Debian 7.8
27 * Debian 7.8
28 * RedHat Fedora
28 * RedHat Fedora
29 * Arch Linux
29 * Arch Linux
30 * SUSE Linux
30 * SUSE Linux
31
31
32 Windows
32 Windows
33 ^^^^^^^
33 ^^^^^^^
34
34
35 * Windows Vista Ultimate 64bit
35 * Windows Vista Ultimate 64bit
36 * Windows 7 Ultimate 64bit
36 * Windows 7 Ultimate 64bit
37 * Windows 8 Professional 64bit
37 * Windows 8 Professional 64bit
38 * Windows 8.1 Enterprise 64bit
38 * Windows 8.1 Enterprise 64bit
39 * Windows Server 2008 64bit
39 * Windows Server 2008 64bit
40 * Windows Server 2008-R2 64bit
40 * Windows Server 2008-R2 64bit
41 * Windows Server 2012 64bit
41 * Windows Server 2012 64bit
42
42
43 Supported Databases
43 Supported Databases
44 -------------------
44 -------------------
45
45
46 * SQLite
46 * SQLite
47 * MySQL
47 * MySQL
48 * MariaDB
48 * MariaDB
49 * PostgreSQL
49 * PostgreSQL
50
50
51 Supported Browsers
51 Supported Browsers
52 ------------------
52 ------------------
53
53
54 * Chrome
54 * Chrome
55 * Safari
55 * Safari
56 * Firefox
56 * Firefox
57 * Internet Explorer 10 & 11
57 * Internet Explorer 10 & 11
58
58
59 System Requirements
59 System Requirements
60 -------------------
60 -------------------
61
61
62 |RCE| performs best on machines with ultra-fast hard disks. Generally disk
62 |RCE| performs best on machines with ultra-fast hard disks. Generally disk
63 performance is more important than CPU performance. In a corporate production
63 performance is more important than CPU performance. In a corporate production
64 environment handling 1000s of users and |repos| you should deploy on a 12+
64 environment handling 1000s of users and |repos| you should deploy on a 12+
65 core 64GB RAM server. In short, the more RAM the better.
65 core 64GB RAM server. In short, the more RAM the better.
66
66
67
67
68 For example:
68 For example:
69
69
70 - for team of 1 - 5 active users you can run on 1GB RAM machine with 1CPU
70 - for team of 1 - 5 active users you can run on 1GB RAM machine with 1CPU
71 - above 250 active users, |RCE| needs at least 8GB of memory.
71 - above 250 active users, |RCE| needs at least 8GB of memory.
72 Number of CPUs is less important, but recommended to have at least 2-3 CPUs
72 Number of CPUs is less important, but recommended to have at least 2-3 CPUs
73
73
74
74
75 .. _config-rce-files:
75 .. _config-rce-files:
76
76
77 Configuration Files
77 Configuration Files
78 -------------------
78 -------------------
79
79
80 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
80 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
81 * :file:`/home/{user}/.rccontrol/{instance-id}/mapping.ini`
81 * :file:`/home/{user}/.rccontrol/{instance-id}/search_mapping.ini`
82 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`
82 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`
83 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.ini`
83 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.ini`
84 * :file:`/home/{user}/.rccontrol.ini`
84 * :file:`/home/{user}/.rccontrol.ini`
85 * :file:`/home/{user}/.rhoderc`
85 * :file:`/home/{user}/.rhoderc`
86 * :file:`/home/{user}/.rccontrol/cache/MANIFEST`
86 * :file:`/home/{user}/.rccontrol/cache/MANIFEST`
87
87
88 For more information, see the :ref:`config-files` section.
88 For more information, see the :ref:`config-files` section.
89
89
90 Log Files
90 Log Files
91 ---------
91 ---------
92
92
93 * :file:`/home/{user}/.rccontrol/{instance-id}/enterprise.log`
93 * :file:`/home/{user}/.rccontrol/{instance-id}/enterprise.log`
94 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.log`
94 * :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.log`
95 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.log`
95 * :file:`/home/{user}/.rccontrol/supervisor/supervisord.log`
96 * :file:`/tmp/rccontrol.log`
96 * :file:`/tmp/rccontrol.log`
97 * :file:`/tmp/rhodecode_tools.log`
97 * :file:`/tmp/rhodecode_tools.log`
98
98
99 Storage Files
99 Storage Files
100 -------------
100 -------------
101
101
102 * :file:`/home/{user}/.rccontrol/{instance-id}/data/index/{index-file.toc}`
102 * :file:`/home/{user}/.rccontrol/{instance-id}/data/index/{index-file.toc}`
103 * :file:`/home/{user}/repos/.rc_gist_store`
103 * :file:`/home/{user}/repos/.rc_gist_store`
104 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
104 * :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
105 * :file:`/opt/rhodecode/store/{unique-hash}`
105 * :file:`/opt/rhodecode/store/{unique-hash}`
106
106
107 Default Repositories Location
107 Default Repositories Location
108 -----------------------------
108 -----------------------------
109
109
110 * :file:`/home/{user}/repos`
110 * :file:`/home/{user}/repos`
111
111
112 Connection Methods
112 Connection Methods
113 ------------------
113 ------------------
114
114
115 * HTTPS
115 * HTTPS
116 * SSH
116 * SSH
117 * |RCE| API
117 * |RCE| API
118
118
119 Internationalization Support
119 Internationalization Support
120 ----------------------------
120 ----------------------------
121
121
122 Currently available in the following languages, see `Transifex`_ for the
122 Currently available in the following languages, see `Transifex`_ for the
123 latest details. If you want a new language added, please contact us. To
123 latest details. If you want a new language added, please contact us. To
124 configure your language settings, see the :ref:`set-lang` section.
124 configure your language settings, see the :ref:`set-lang` section.
125
125
126 .. hlist::
126 .. hlist::
127
127
128 * Belorussian
128 * Belorussian
129 * Chinese
129 * Chinese
130 * French
130 * French
131 * German
131 * German
132 * Italian
132 * Italian
133 * Japanese
133 * Japanese
134 * Portuguese
134 * Portuguese
135 * Polish
135 * Polish
136 * Russian
136 * Russian
137 * Spanish
137 * Spanish
138
138
139 Licencing Information
139 Licencing Information
140 ---------------------
140 ---------------------
141
141
142 * See licencing information `here`_
142 * See licencing information `here`_
143
143
144 Peer-to-peer Failover Support
144 Peer-to-peer Failover Support
145 -----------------------------
145 -----------------------------
146
146
147 * Yes
147 * Yes
148
148
149 Additional Binaries
149 Additional Binaries
150 -------------------
150 -------------------
151
151
152 * Yes, see :ref:`rhodecode-nix-ref` for full details.
152 * Yes, see :ref:`rhodecode-nix-ref` for full details.
153
153
154 Remote Connectivity
154 Remote Connectivity
155 -------------------
155 -------------------
156
156
157 * Available
157 * Available
158
158
159 Executable Files
159 Executable Files
160 ----------------
160 ----------------
161
161
162 Windows: :file:`RhodeCode-installer-{version}.exe`
162 Windows: :file:`RhodeCode-installer-{version}.exe`
163
163
164 Deprecated Support
164 Deprecated Support
165 ------------------
165 ------------------
166
166
167 - Internet Explorer 8 support deprecated since version 3.7.0.
167 - Internet Explorer 8 support deprecated since version 3.7.0.
168 - Internet Explorer 9 support deprecated since version 3.8.0.
168 - Internet Explorer 9 support deprecated since version 3.8.0.
169
169
170 .. _here: https://rhodecode.com/licenses/
170 .. _here: https://rhodecode.com/licenses/
171 .. _Transifex: https://www.transifex.com/projects/p/RhodeCode/
171 .. _Transifex: https://www.transifex.com/projects/p/RhodeCode/
@@ -1,208 +1,209 b''
1 .. _api:
1 .. _api:
2
2
3 API Documentation
3 API Documentation
4 =================
4 =================
5
5
6 The |RCE| API uses a single scheme for calling all API methods. The API is
6 The |RCE| API uses a single scheme for calling all API methods. The API is
7 implemented with JSON protocol in both directions. To send API requests to
7 implemented with JSON protocol in both directions. To send API requests to
8 your instance of |RCE|, use the following URL format
8 your instance of |RCE|, use the following URL format
9 ``<your_server>/_admin``
9 ``<your_server>/_admin``
10
10
11 .. note::
11 .. note::
12
12
13 To use the API, you should configure the :file:`~/.rhoderc` file with
13 To use the API, you should configure the :file:`~/.rhoderc` file with
14 access details per instance. For more information, see
14 access details per instance. For more information, see
15 :ref:`config-rhoderc`.
15 :ref:`config-rhoderc`.
16
16
17
17
18 API ACCESS FOR WEB VIEWS
18 API ACCESS FOR WEB VIEWS
19 ------------------------
19 ------------------------
20
20
21 API access can also be turned on for each web view in |RCE| that is
21 API access can also be turned on for each web view in |RCE| that is
22 decorated with a `@LoginRequired` decorator. To enable API access, change
22 decorated with a `@LoginRequired` decorator. To enable API access, change
23 the standard login decorator to `@LoginRequired(api_access=True)`.
23 the standard login decorator to `@LoginRequired(api_access=True)`.
24
24
25 From |RCE| version 1.7.0 you can configure a white list
25 From |RCE| version 1.7.0 you can configure a white list
26 of views that have API access enabled by default. To enable these,
26 of views that have API access enabled by default. To enable these,
27 edit the |RCE| configuration ``.ini`` file. The default location is:
27 edit the |RCE| configuration ``.ini`` file. The default location is:
28
28
29 * |RCE| Pre-2.2.7 :file:`root/rhodecode/data/production.ini`
29 * |RCE| Pre-2.2.7 :file:`root/rhodecode/data/production.ini`
30 * |RCE| 3.0 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
30 * |RCE| 3.0 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
31
31
32 To configure the white list, edit this section of the file. In this
32 To configure the white list, edit this section of the file. In this
33 configuration example, API access is granted to the patch/diff raw file and
33 configuration example, API access is granted to the patch/diff raw file and
34 archive.
34 archive.
35
35
36 .. code-block:: ini
36 .. code-block:: ini
37
37
38 ## List of controllers (using glob syntax) that AUTH TOKENS could be used for access.
38 ## List of controllers (using glob syntax) that AUTH TOKENS could be used for access.
39 ## Adding ?auth_token = <token> to the url authenticates this request as if it
39 ## Adding ?auth_token = <token> to the url authenticates this request as if it
40 ## came from the the logged in user who own this authentication token.
40 ## came from the the logged in user who own this authentication token.
41 ##
41 ##
42 ## Syntax is <ControllerClass>:<function_pattern>.
42 ## Syntax is <ControllerClass>:<function_pattern>.
43 ## The list should be "," separated and on a single line.
43 ## The list should be "," separated and on a single line.
44 ##
44 ##
45 api_access_controllers_whitelist = RepoCommitsView:repo_commit_raw,RepoCommitsView:repo_commit_patch,RepoCommitsView:repo_commit_download
45 api_access_controllers_whitelist = RepoCommitsView:repo_commit_raw,RepoCommitsView:repo_commit_patch,RepoCommitsView:repo_commit_download
46
46
47 After this change, a |RCE| view can be accessed without login by adding a
47 After this change, a |RCE| view can be accessed without login by adding a
48 GET parameter ``?auth_token=<auth_token>`` to a url. For example to
48 GET parameter ``?auth_token=<auth_token>`` to a url. For example to
49 access the raw diff.
49 access the raw diff.
50
50
51 .. code-block:: html
51 .. code-block:: html
52
52
53 http://<server>/<repo>/changeset-diff/<sha>?auth_token=<auth_token>
53 http://<server>/<repo>/changeset-diff/<sha>?auth_token=<auth_token>
54
54
55 By default this is only enabled on RSS/ATOM feed views. Exposing raw diffs is a
55 By default this is only enabled on RSS/ATOM feed views. Exposing raw diffs is a
56 good way to integrate with 3rd party services like code review, or build farms
56 good way to integrate with 3rd party services like code review, or build farms
57 that could download archives.
57 that could download archives.
58
58
59 API ACCESS
59 API ACCESS
60 ----------
60 ----------
61
61
62 All clients are required to send JSON-RPC spec JSON data.
62 All clients are required to send JSON-RPC spec JSON data.
63
63
64 .. code-block:: bash
64 .. code-block:: bash
65
65
66 {
66 {
67 "id:"<id>",
67 "id:"<id>",
68 "auth_token":"<auth_token>",
68 "auth_token":"<auth_token>",
69 "method":"<method_name>",
69 "method":"<method_name>",
70 "args":{"<arg_key>":"<arg_val>"}
70 "args":{"<arg_key>":"<arg_val>"}
71 }
71 }
72
72
73 Example call for auto pulling from remote repositories using curl:
73 Example call for auto pulling from remote repositories using curl:
74
74
75 .. code-block:: bash
75 .. code-block:: bash
76
76
77 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,
77 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,
78 "auth_token":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull", "args":{"repoid":"CPython"}}'
78 "auth_token":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull", "args":{"repoid":"CPython"}}'
79
79
80 Provide those parameters:
80 Provide those parameters:
81 - **id** A value of any type, which is used to match the response with the
81 - **id** A value of any type, which is used to match the response with the
82 request that it is replying to.
82 request that it is replying to.
83 - **auth_token** for access and permission validation.
83 - **auth_token** for access and permission validation.
84 - **method** is name of method to call
84 - **method** is name of method to call
85 - **args** is an ``key:value`` list of arguments to pass to method
85 - **args** is an ``key:value`` list of arguments to pass to method
86
86
87 .. note::
87 .. note::
88
88
89 To get your |authtoken|, from the |RCE| interface,
89 To get your |authtoken|, from the |RCE| interface,
90 go to:
90 go to:
91 :menuselection:`username --> My account --> Auth tokens`
91 :menuselection:`username --> My account --> Auth tokens`
92
92
93 For security reasons you should always create a dedicated |authtoken| for
93 For security reasons you should always create a dedicated |authtoken| for
94 API use only.
94 API use only.
95
95
96
96
97 The |RCE| API will always return a JSON-RPC response:
97 The |RCE| API will always return a JSON-RPC response:
98
98
99 .. code-block:: bash
99 .. code-block:: bash
100
100
101 {
101 {
102 "id": <id>, # matching id sent by request
102 "id": <id>, # matching id sent by request
103 "result": "<result>"|null, # JSON formatted result, null if any errors
103 "result": "<result>"|null, # JSON formatted result, null if any errors
104 "error": "null"|<error_message> # JSON formatted error (if any)
104 "error": "null"|<error_message> # JSON formatted error (if any)
105 }
105 }
106
106
107 All responses from API will be with `HTTP/1.0 200 OK` status code.
107 All responses from API will be with `HTTP/1.0 200 OK` status code.
108 If there is an error when calling the API, the *error* key will contain a
108 If there is an error when calling the API, the *error* key will contain a
109 failure description and the *result* will be `null`.
109 failure description and the *result* will be `null`.
110
110
111 API CLIENT
111 API CLIENT
112 ----------
112 ----------
113
113
114 To install the |RCE| API, see :ref:`install-tools`. To configure the API per
114 To install the |RCE| API, see :ref:`install-tools`. To configure the API per
115 instance, see the :ref:`rc-tools` section as you need to configure a
115 instance, see the :ref:`rc-tools` section as you need to configure a
116 :file:`~/.rhoderc` file with your |authtokens|.
116 :file:`~/.rhoderc` file with your |authtokens|.
117
117
118 Once you have set up your instance API access, use the following examples to
118 Once you have set up your instance API access, use the following examples to
119 get started.
119 get started.
120
120
121 .. code-block:: bash
121 .. code-block:: bash
122
122
123 # Getting the 'rhodecode' repository
123 # Getting the 'rhodecode' repository
124 # from a RhodeCode Enterprise instance
124 # from a RhodeCode Enterprise instance
125 rhodecode-api --instance-name=enterprise-1 get_repo repoid:rhodecode
125 rhodecode-api --instance-name=enterprise-1 get_repo repoid:rhodecode
126
126
127 Calling method get_repo => http://127.0.0.1:5000
127 Calling method get_repo => http://127.0.0.1:5000
128 Server response
128 Server response
129 {
129 {
130 <json data>
130 <json data>
131 }
131 }
132
132
133 # Creating a new mercurial repository called 'brand-new'
133 # Creating a new mercurial repository called 'brand-new'
134 # with a description 'Repo-description'
134 # with a description 'Repo-description'
135 rhodecode-api --instance-name=enterprise-1 create_repo repo_name:brand-new repo_type:hg description:Repo-description
135 rhodecode-api --instance-name=enterprise-1 create_repo repo_name:brand-new repo_type:hg description:Repo-description
136 {
136 {
137 "error": null,
137 "error": null,
138 "id": 1110,
138 "id": 1110,
139 "result": {
139 "result": {
140 "msg": "Created new repository `brand-new`",
140 "msg": "Created new repository `brand-new`",
141 "success": true,
141 "success": true,
142 "task": null
142 "task": null
143 }
143 }
144 }
144 }
145
145
146 A broken example, what not to do.
146 A broken example, what not to do.
147
147
148 .. code-block:: bash
148 .. code-block:: bash
149
149
150 # A call missing the required arguments
150 # A call missing the required arguments
151 # and not specifying the instance
151 # and not specifying the instance
152 rhodecode-api get_repo
152 rhodecode-api get_repo
153
153
154 Calling method get_repo => http://127.0.0.1:5000
154 Calling method get_repo => http://127.0.0.1:5000
155 Server response
155 Server response
156 "Missing non optional `repoid` arg in JSON DATA"
156 "Missing non optional `repoid` arg in JSON DATA"
157
157
158 You can specify pure JSON using the ``--format`` parameter.
158 You can specify pure JSON using the ``--format`` parameter.
159
159
160 .. code-block:: bash
160 .. code-block:: bash
161
161
162 rhodecode-api --format=json get_repo repoid:rhodecode
162 rhodecode-api --format=json get_repo repoid:rhodecode
163
163
164 In such case only output that this function shows is pure JSON, we can use that
164 In such case only output that this function shows is pure JSON, we can use that
165 and pipe output to some json formatter.
165 and pipe output to some json formatter.
166
166
167 If output is in pure JSON format, you can pipe output to a JSON formatter.
167 If output is in pure JSON format, you can pipe output to a JSON formatter.
168
168
169 .. code-block:: bash
169 .. code-block:: bash
170
170
171 rhodecode-api --instance-name=enterprise-1 --format=json get_repo repoid:rhodecode | python -m json.tool
171 rhodecode-api --instance-name=enterprise-1 --format=json get_repo repoid:rhodecode | python -m json.tool
172
172
173 API METHODS
173 API METHODS
174 -----------
174 -----------
175
175
176 Each method by default required following arguments.
176 Each method by default required following arguments.
177
177
178 .. code-block:: bash
178 .. code-block:: bash
179
179
180 id : "<id_for_response>"
180 id : "<id_for_response>"
181 auth_token : "<auth_token>"
181 auth_token : "<auth_token>"
182 method : "<method name>"
182 method : "<method name>"
183 args : {}
183 args : {}
184
184
185 Use each **param** from docs and put it in args, Optional parameters
185 Use each **param** from docs and put it in args, Optional parameters
186 are not required in args.
186 are not required in args.
187
187
188 .. code-block:: bash
188 .. code-block:: bash
189
189
190 args: {"repoid": "rhodecode"}
190 args: {"repoid": "rhodecode"}
191
191
192 .. Note: From this point on things are generated by the script in
192 .. Note: From this point on things are generated by the script in
193 `scripts/fabfile.py`. To change things below, update the docstrings in the
193 `scripts/fabfile.py`. To change things below, update the docstrings in the
194 ApiController.
194 ApiController.
195
195
196 .. --- API DEFS MARKER ---
196 .. --- API DEFS MARKER ---
197 .. toctree::
197 .. toctree::
198
198
199 methods/views
199 methods/repo-methods
200 methods/store-methods
200 methods/license-methods
201 methods/license-methods
201 methods/deprecated-methods
202 methods/deprecated-methods
202 methods/gist-methods
203 methods/gist-methods
203 methods/pull-request-methods
204 methods/pull-request-methods
204 methods/repo-methods
205 methods/repo-methods
205 methods/repo-group-methods
206 methods/repo-group-methods
206 methods/server-methods
207 methods/server-methods
207 methods/user-methods
208 methods/user-methods
208 methods/user-group-methods
209 methods/user-group-methods
@@ -1,428 +1,434 b''
1 .. _pull-request-methods-ref:
1 .. _pull-request-methods-ref:
2
2
3 pull_request methods
3 pull_request methods
4 ====================
4 ====================
5
5
6 close_pull_request
6 close_pull_request
7 ------------------
7 ------------------
8
8
9 .. py:function:: close_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>, message=<Optional:''>)
9 .. py:function:: close_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>, message=<Optional:''>)
10
10
11 Close the pull request specified by `pullrequestid`.
11 Close the pull request specified by `pullrequestid`.
12
12
13 :param apiuser: This is filled automatically from the |authtoken|.
13 :param apiuser: This is filled automatically from the |authtoken|.
14 :type apiuser: AuthUser
14 :type apiuser: AuthUser
15 :param repoid: Repository name or repository ID to which the pull
15 :param repoid: Repository name or repository ID to which the pull
16 request belongs.
16 request belongs.
17 :type repoid: str or int
17 :type repoid: str or int
18 :param pullrequestid: ID of the pull request to be closed.
18 :param pullrequestid: ID of the pull request to be closed.
19 :type pullrequestid: int
19 :type pullrequestid: int
20 :param userid: Close the pull request as this user.
20 :param userid: Close the pull request as this user.
21 :type userid: Optional(str or int)
21 :type userid: Optional(str or int)
22 :param message: Optional message to close the Pull Request with. If not
22 :param message: Optional message to close the Pull Request with. If not
23 specified it will be generated automatically.
23 specified it will be generated automatically.
24 :type message: Optional(str)
24 :type message: Optional(str)
25
25
26 Example output:
26 Example output:
27
27
28 .. code-block:: bash
28 .. code-block:: bash
29
29
30 "id": <id_given_in_input>,
30 "id": <id_given_in_input>,
31 "result": {
31 "result": {
32 "pull_request_id": "<int>",
32 "pull_request_id": "<int>",
33 "close_status": "<str:status_lbl>,
33 "close_status": "<str:status_lbl>,
34 "closed": "<bool>"
34 "closed": "<bool>"
35 },
35 },
36 "error": null
36 "error": null
37
37
38
38
39 comment_pull_request
39 comment_pull_request
40 --------------------
40 --------------------
41
41
42 .. py:function:: comment_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, message=<Optional:None>, commit_id=<Optional:None>, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, 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>, userid=<Optional:<OptionalAttr:apiuser>>)
43
43
44 Comment on the pull request specified with the `pullrequestid`,
44 Comment on the pull request specified with the `pullrequestid`,
45 in the |repo| specified by the `repoid`, and optionally change the
45 in the |repo| specified by the `repoid`, and optionally change the
46 review status.
46 review status.
47
47
48 :param apiuser: This is filled automatically from the |authtoken|.
48 :param apiuser: This is filled automatically from the |authtoken|.
49 :type apiuser: AuthUser
49 :type apiuser: AuthUser
50 :param repoid: Optional repository name or repository ID.
50 :param repoid: Optional repository name or repository ID.
51 :type repoid: str or int
51 :type repoid: str or int
52 :param pullrequestid: The pull request ID.
52 :param pullrequestid: The pull request ID.
53 :type pullrequestid: int
53 :type pullrequestid: int
54 :param commit_id: Specify the commit_id for which to set a comment. If
54 :param commit_id: Specify the commit_id for which to set a comment. If
55 given commit_id is different than latest in the PR status
55 given commit_id is different than latest in the PR status
56 change won't be performed.
56 change won't be performed.
57 :type commit_id: str
57 :type commit_id: str
58 :param message: The text content of the comment.
58 :param message: The text content of the comment.
59 :type message: str
59 :type message: str
60 :param status: (**Optional**) Set the approval status of the pull
60 :param status: (**Optional**) Set the approval status of the pull
61 request. One of: 'not_reviewed', 'approved', 'rejected',
61 request. One of: 'not_reviewed', 'approved', 'rejected',
62 'under_review'
62 'under_review'
63 :type status: str
63 :type status: str
64 :param comment_type: Comment type, one of: 'note', 'todo'
64 :param comment_type: Comment type, one of: 'note', 'todo'
65 :type comment_type: Optional(str), default: 'note'
65 :type comment_type: Optional(str), default: 'note'
66 :param userid: Comment on the pull request as this user
66 :param userid: Comment on the pull request as this user
67 :type userid: Optional(str or int)
67 :type userid: Optional(str or int)
68
68
69 Example output:
69 Example output:
70
70
71 .. code-block:: bash
71 .. code-block:: bash
72
72
73 id : <id_given_in_input>
73 id : <id_given_in_input>
74 result : {
74 result : {
75 "pull_request_id": "<Integer>",
75 "pull_request_id": "<Integer>",
76 "comment_id": "<Integer>",
76 "comment_id": "<Integer>",
77 "status": {"given": <given_status>,
77 "status": {"given": <given_status>,
78 "was_changed": <bool status_was_actually_changed> },
78 "was_changed": <bool status_was_actually_changed> },
79 },
79 },
80 error : null
80 error : null
81
81
82
82
83 create_pull_request
83 create_pull_request
84 -------------------
84 -------------------
85
85
86 .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>)
86 .. 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>)
87
87
88 Creates a new pull request.
88 Creates a new pull request.
89
89
90 Accepts refs in the following formats:
90 Accepts refs in the following formats:
91
91
92 * branch:<branch_name>:<sha>
92 * branch:<branch_name>:<sha>
93 * branch:<branch_name>
93 * branch:<branch_name>
94 * bookmark:<bookmark_name>:<sha> (Mercurial only)
94 * bookmark:<bookmark_name>:<sha> (Mercurial only)
95 * bookmark:<bookmark_name> (Mercurial only)
95 * bookmark:<bookmark_name> (Mercurial only)
96
96
97 :param apiuser: This is filled automatically from the |authtoken|.
97 :param apiuser: This is filled automatically from the |authtoken|.
98 :type apiuser: AuthUser
98 :type apiuser: AuthUser
99 :param source_repo: Set the source repository name.
99 :param source_repo: Set the source repository name.
100 :type source_repo: str
100 :type source_repo: str
101 :param target_repo: Set the target repository name.
101 :param target_repo: Set the target repository name.
102 :type target_repo: str
102 :type target_repo: str
103 :param source_ref: Set the source ref name.
103 :param source_ref: Set the source ref name.
104 :type source_ref: str
104 :type source_ref: str
105 :param target_ref: Set the target ref name.
105 :param target_ref: Set the target ref name.
106 :type target_ref: str
106 :type target_ref: str
107 :param owner: user_id or username
108 :type owner: Optional(str)
107 :param title: Optionally Set the pull request title, it's generated otherwise
109 :param title: Optionally Set the pull request title, it's generated otherwise
108 :type title: str
110 :type title: str
109 :param description: Set the pull request description.
111 :param description: Set the pull request description.
110 :type description: Optional(str)
112 :type description: Optional(str)
111 :type description_renderer: Optional(str)
113 :type description_renderer: Optional(str)
112 :param description_renderer: Set pull request renderer for the description.
114 :param description_renderer: Set pull request renderer for the description.
113 It should be 'rst', 'markdown' or 'plain'. If not give default
115 It should be 'rst', 'markdown' or 'plain'. If not give default
114 system renderer will be used
116 system renderer will be used
115 :param reviewers: Set the new pull request reviewers list.
117 :param reviewers: Set the new pull request reviewers list.
116 Reviewer defined by review rules will be added automatically to the
118 Reviewer defined by review rules will be added automatically to the
117 defined list.
119 defined list.
118 :type reviewers: Optional(list)
120 :type reviewers: Optional(list)
119 Accepts username strings or objects of the format:
121 Accepts username strings or objects of the format:
120
122
121 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
123 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
122
124
123
125
124 get_pull_request
126 get_pull_request
125 ----------------
127 ----------------
126
128
127 .. py:function:: get_pull_request(apiuser, pullrequestid, repoid=<Optional:None>)
129 .. py:function:: get_pull_request(apiuser, pullrequestid, repoid=<Optional:None>)
128
130
129 Get a pull request based on the given ID.
131 Get a pull request based on the given ID.
130
132
131 :param apiuser: This is filled automatically from the |authtoken|.
133 :param apiuser: This is filled automatically from the |authtoken|.
132 :type apiuser: AuthUser
134 :type apiuser: AuthUser
133 :param repoid: Optional, repository name or repository ID from where
135 :param repoid: Optional, repository name or repository ID from where
134 the pull request was opened.
136 the pull request was opened.
135 :type repoid: str or int
137 :type repoid: str or int
136 :param pullrequestid: ID of the requested pull request.
138 :param pullrequestid: ID of the requested pull request.
137 :type pullrequestid: int
139 :type pullrequestid: int
138
140
139 Example output:
141 Example output:
140
142
141 .. code-block:: bash
143 .. code-block:: bash
142
144
143 "id": <id_given_in_input>,
145 "id": <id_given_in_input>,
144 "result":
146 "result":
145 {
147 {
146 "pull_request_id": "<pull_request_id>",
148 "pull_request_id": "<pull_request_id>",
147 "url": "<url>",
149 "url": "<url>",
148 "title": "<title>",
150 "title": "<title>",
149 "description": "<description>",
151 "description": "<description>",
150 "status" : "<status>",
152 "status" : "<status>",
151 "created_on": "<date_time_created>",
153 "created_on": "<date_time_created>",
152 "updated_on": "<date_time_updated>",
154 "updated_on": "<date_time_updated>",
153 "commit_ids": [
155 "commit_ids": [
154 ...
156 ...
155 "<commit_id>",
157 "<commit_id>",
156 "<commit_id>",
158 "<commit_id>",
157 ...
159 ...
158 ],
160 ],
159 "review_status": "<review_status>",
161 "review_status": "<review_status>",
160 "mergeable": {
162 "mergeable": {
161 "status": "<bool>",
163 "status": "<bool>",
162 "message": "<message>",
164 "message": "<message>",
163 },
165 },
164 "source": {
166 "source": {
165 "clone_url": "<clone_url>",
167 "clone_url": "<clone_url>",
166 "repository": "<repository_name>",
168 "repository": "<repository_name>",
167 "reference":
169 "reference":
168 {
170 {
169 "name": "<name>",
171 "name": "<name>",
170 "type": "<type>",
172 "type": "<type>",
171 "commit_id": "<commit_id>",
173 "commit_id": "<commit_id>",
172 }
174 }
173 },
175 },
174 "target": {
176 "target": {
175 "clone_url": "<clone_url>",
177 "clone_url": "<clone_url>",
176 "repository": "<repository_name>",
178 "repository": "<repository_name>",
177 "reference":
179 "reference":
178 {
180 {
179 "name": "<name>",
181 "name": "<name>",
180 "type": "<type>",
182 "type": "<type>",
181 "commit_id": "<commit_id>",
183 "commit_id": "<commit_id>",
182 }
184 }
183 },
185 },
184 "merge": {
186 "merge": {
185 "clone_url": "<clone_url>",
187 "clone_url": "<clone_url>",
186 "reference":
188 "reference":
187 {
189 {
188 "name": "<name>",
190 "name": "<name>",
189 "type": "<type>",
191 "type": "<type>",
190 "commit_id": "<commit_id>",
192 "commit_id": "<commit_id>",
191 }
193 }
192 },
194 },
193 "author": <user_obj>,
195 "author": <user_obj>,
194 "reviewers": [
196 "reviewers": [
195 ...
197 ...
196 {
198 {
197 "user": "<user_obj>",
199 "user": "<user_obj>",
198 "review_status": "<review_status>",
200 "review_status": "<review_status>",
199 }
201 }
200 ...
202 ...
201 ]
203 ]
202 },
204 },
203 "error": null
205 "error": null
204
206
205
207
206 get_pull_request_comments
208 get_pull_request_comments
207 -------------------------
209 -------------------------
208
210
209 .. py:function:: get_pull_request_comments(apiuser, pullrequestid, repoid=<Optional:None>)
211 .. py:function:: get_pull_request_comments(apiuser, pullrequestid, repoid=<Optional:None>)
210
212
211 Get all comments of pull request specified with the `pullrequestid`
213 Get all comments of pull request specified with the `pullrequestid`
212
214
213 :param apiuser: This is filled automatically from the |authtoken|.
215 :param apiuser: This is filled automatically from the |authtoken|.
214 :type apiuser: AuthUser
216 :type apiuser: AuthUser
215 :param repoid: Optional repository name or repository ID.
217 :param repoid: Optional repository name or repository ID.
216 :type repoid: str or int
218 :type repoid: str or int
217 :param pullrequestid: The pull request ID.
219 :param pullrequestid: The pull request ID.
218 :type pullrequestid: int
220 :type pullrequestid: int
219
221
220 Example output:
222 Example output:
221
223
222 .. code-block:: bash
224 .. code-block:: bash
223
225
224 id : <id_given_in_input>
226 id : <id_given_in_input>
225 result : [
227 result : [
226 {
228 {
227 "comment_author": {
229 "comment_author": {
228 "active": true,
230 "active": true,
229 "full_name_or_username": "Tom Gore",
231 "full_name_or_username": "Tom Gore",
230 "username": "admin"
232 "username": "admin"
231 },
233 },
232 "comment_created_on": "2017-01-02T18:43:45.533",
234 "comment_created_on": "2017-01-02T18:43:45.533",
233 "comment_f_path": null,
235 "comment_f_path": null,
234 "comment_id": 25,
236 "comment_id": 25,
235 "comment_lineno": null,
237 "comment_lineno": null,
236 "comment_status": {
238 "comment_status": {
237 "status": "under_review",
239 "status": "under_review",
238 "status_lbl": "Under Review"
240 "status_lbl": "Under Review"
239 },
241 },
240 "comment_text": "Example text",
242 "comment_text": "Example text",
241 "comment_type": null,
243 "comment_type": null,
242 "pull_request_version": null
244 "pull_request_version": null
243 }
245 }
244 ],
246 ],
245 error : null
247 error : null
246
248
247
249
248 get_pull_requests
250 get_pull_requests
249 -----------------
251 -----------------
250
252
251 .. py:function:: get_pull_requests(apiuser, repoid, status=<Optional:'new'>)
253 .. py:function:: get_pull_requests(apiuser, repoid, status=<Optional:'new'>, merge_state=<Optional:True>)
252
254
253 Get all pull requests from the repository specified in `repoid`.
255 Get all pull requests from the repository specified in `repoid`.
254
256
255 :param apiuser: This is filled automatically from the |authtoken|.
257 :param apiuser: This is filled automatically from the |authtoken|.
256 :type apiuser: AuthUser
258 :type apiuser: AuthUser
257 :param repoid: Optional repository name or repository ID.
259 :param repoid: Optional repository name or repository ID.
258 :type repoid: str or int
260 :type repoid: str or int
259 :param status: Only return pull requests with the specified status.
261 :param status: Only return pull requests with the specified status.
260 Valid options are.
262 Valid options are.
261 * ``new`` (default)
263 * ``new`` (default)
262 * ``open``
264 * ``open``
263 * ``closed``
265 * ``closed``
264 :type status: str
266 :type status: str
267 :param merge_state: Optional calculate merge state for each repository.
268 This could result in longer time to fetch the data
269 :type merge_state: bool
265
270
266 Example output:
271 Example output:
267
272
268 .. code-block:: bash
273 .. code-block:: bash
269
274
270 "id": <id_given_in_input>,
275 "id": <id_given_in_input>,
271 "result":
276 "result":
272 [
277 [
273 ...
278 ...
274 {
279 {
275 "pull_request_id": "<pull_request_id>",
280 "pull_request_id": "<pull_request_id>",
276 "url": "<url>",
281 "url": "<url>",
277 "title" : "<title>",
282 "title" : "<title>",
278 "description": "<description>",
283 "description": "<description>",
279 "status": "<status>",
284 "status": "<status>",
280 "created_on": "<date_time_created>",
285 "created_on": "<date_time_created>",
281 "updated_on": "<date_time_updated>",
286 "updated_on": "<date_time_updated>",
282 "commit_ids": [
287 "commit_ids": [
283 ...
288 ...
284 "<commit_id>",
289 "<commit_id>",
285 "<commit_id>",
290 "<commit_id>",
286 ...
291 ...
287 ],
292 ],
288 "review_status": "<review_status>",
293 "review_status": "<review_status>",
289 "mergeable": {
294 "mergeable": {
290 "status": "<bool>",
295 "status": "<bool>",
291 "message: "<message>",
296 "message: "<message>",
292 },
297 },
293 "source": {
298 "source": {
294 "clone_url": "<clone_url>",
299 "clone_url": "<clone_url>",
295 "reference":
300 "reference":
296 {
301 {
297 "name": "<name>",
302 "name": "<name>",
298 "type": "<type>",
303 "type": "<type>",
299 "commit_id": "<commit_id>",
304 "commit_id": "<commit_id>",
300 }
305 }
301 },
306 },
302 "target": {
307 "target": {
303 "clone_url": "<clone_url>",
308 "clone_url": "<clone_url>",
304 "reference":
309 "reference":
305 {
310 {
306 "name": "<name>",
311 "name": "<name>",
307 "type": "<type>",
312 "type": "<type>",
308 "commit_id": "<commit_id>",
313 "commit_id": "<commit_id>",
309 }
314 }
310 },
315 },
311 "merge": {
316 "merge": {
312 "clone_url": "<clone_url>",
317 "clone_url": "<clone_url>",
313 "reference":
318 "reference":
314 {
319 {
315 "name": "<name>",
320 "name": "<name>",
316 "type": "<type>",
321 "type": "<type>",
317 "commit_id": "<commit_id>",
322 "commit_id": "<commit_id>",
318 }
323 }
319 },
324 },
320 "author": <user_obj>,
325 "author": <user_obj>,
321 "reviewers": [
326 "reviewers": [
322 ...
327 ...
323 {
328 {
324 "user": "<user_obj>",
329 "user": "<user_obj>",
325 "review_status": "<review_status>",
330 "review_status": "<review_status>",
326 }
331 }
327 ...
332 ...
328 ]
333 ]
329 }
334 }
330 ...
335 ...
331 ],
336 ],
332 "error": null
337 "error": null
333
338
334
339
335 merge_pull_request
340 merge_pull_request
336 ------------------
341 ------------------
337
342
338 .. py:function:: merge_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
343 .. py:function:: merge_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
339
344
340 Merge the pull request specified by `pullrequestid` into its target
345 Merge the pull request specified by `pullrequestid` into its target
341 repository.
346 repository.
342
347
343 :param apiuser: This is filled automatically from the |authtoken|.
348 :param apiuser: This is filled automatically from the |authtoken|.
344 :type apiuser: AuthUser
349 :type apiuser: AuthUser
345 :param repoid: Optional, repository name or repository ID of the
350 :param repoid: Optional, repository name or repository ID of the
346 target repository to which the |pr| is to be merged.
351 target repository to which the |pr| is to be merged.
347 :type repoid: str or int
352 :type repoid: str or int
348 :param pullrequestid: ID of the pull request which shall be merged.
353 :param pullrequestid: ID of the pull request which shall be merged.
349 :type pullrequestid: int
354 :type pullrequestid: int
350 :param userid: Merge the pull request as this user.
355 :param userid: Merge the pull request as this user.
351 :type userid: Optional(str or int)
356 :type userid: Optional(str or int)
352
357
353 Example output:
358 Example output:
354
359
355 .. code-block:: bash
360 .. code-block:: bash
356
361
357 "id": <id_given_in_input>,
362 "id": <id_given_in_input>,
358 "result": {
363 "result": {
359 "executed": "<bool>",
364 "executed": "<bool>",
360 "failure_reason": "<int>",
365 "failure_reason": "<int>",
361 "merge_commit_id": "<merge_commit_id>",
366 "merge_status_message": "<str>",
362 "possible": "<bool>",
367 "merge_commit_id": "<merge_commit_id>",
368 "possible": "<bool>",
363 "merge_ref": {
369 "merge_ref": {
364 "commit_id": "<commit_id>",
370 "commit_id": "<commit_id>",
365 "type": "<type>",
371 "type": "<type>",
366 "name": "<name>"
372 "name": "<name>"
367 }
373 }
368 },
374 },
369 "error": null
375 "error": null
370
376
371
377
372 update_pull_request
378 update_pull_request
373 -------------------
379 -------------------
374
380
375 .. py:function:: update_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>)
381 .. py:function:: update_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>)
376
382
377 Updates a pull request.
383 Updates a pull request.
378
384
379 :param apiuser: This is filled automatically from the |authtoken|.
385 :param apiuser: This is filled automatically from the |authtoken|.
380 :type apiuser: AuthUser
386 :type apiuser: AuthUser
381 :param repoid: Optional repository name or repository ID.
387 :param repoid: Optional repository name or repository ID.
382 :type repoid: str or int
388 :type repoid: str or int
383 :param pullrequestid: The pull request ID.
389 :param pullrequestid: The pull request ID.
384 :type pullrequestid: int
390 :type pullrequestid: int
385 :param title: Set the pull request title.
391 :param title: Set the pull request title.
386 :type title: str
392 :type title: str
387 :param description: Update pull request description.
393 :param description: Update pull request description.
388 :type description: Optional(str)
394 :type description: Optional(str)
389 :type description_renderer: Optional(str)
395 :type description_renderer: Optional(str)
390 :param description_renderer: Update pull request renderer for the description.
396 :param description_renderer: Update pull request renderer for the description.
391 It should be 'rst', 'markdown' or 'plain'
397 It should be 'rst', 'markdown' or 'plain'
392 :param reviewers: Update pull request reviewers list with new value.
398 :param reviewers: Update pull request reviewers list with new value.
393 :type reviewers: Optional(list)
399 :type reviewers: Optional(list)
394 Accepts username strings or objects of the format:
400 Accepts username strings or objects of the format:
395
401
396 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
402 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
397
403
398 :param update_commits: Trigger update of commits for this pull request
404 :param update_commits: Trigger update of commits for this pull request
399 :type: update_commits: Optional(bool)
405 :type: update_commits: Optional(bool)
400
406
401 Example output:
407 Example output:
402
408
403 .. code-block:: bash
409 .. code-block:: bash
404
410
405 id : <id_given_in_input>
411 id : <id_given_in_input>
406 result : {
412 result : {
407 "msg": "Updated pull request `63`",
413 "msg": "Updated pull request `63`",
408 "pull_request": <pull_request_object>,
414 "pull_request": <pull_request_object>,
409 "updated_reviewers": {
415 "updated_reviewers": {
410 "added": [
416 "added": [
411 "username"
417 "username"
412 ],
418 ],
413 "removed": []
419 "removed": []
414 },
420 },
415 "updated_commits": {
421 "updated_commits": {
416 "added": [
422 "added": [
417 "<sha1_hash>"
423 "<sha1_hash>"
418 ],
424 ],
419 "common": [
425 "common": [
420 "<sha1_hash>",
426 "<sha1_hash>",
421 "<sha1_hash>",
427 "<sha1_hash>",
422 ],
428 ],
423 "removed": []
429 "removed": []
424 }
430 }
425 }
431 }
426 error : null
432 error : null
427
433
428
434
@@ -1,1028 +1,1134 b''
1 .. _repo-methods-ref:
1 .. _repo-methods-ref:
2
2
3 repo methods
3 repo methods
4 ============
4 ============
5
5
6 add_field_to_repo
6 add_field_to_repo
7 -----------------
7 -----------------
8
8
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
10
10
11 Adds an extra field to a repository.
11 Adds an extra field to a repository.
12
12
13 This command can only be run using an |authtoken| with at least
13 This command can only be run using an |authtoken| with at least
14 write permissions to the |repo|.
14 write permissions to the |repo|.
15
15
16 :param apiuser: This is filled automatically from the |authtoken|.
16 :param apiuser: This is filled automatically from the |authtoken|.
17 :type apiuser: AuthUser
17 :type apiuser: AuthUser
18 :param repoid: Set the repository name or repository id.
18 :param repoid: Set the repository name or repository id.
19 :type repoid: str or int
19 :type repoid: str or int
20 :param key: Create a unique field key for this repository.
20 :param key: Create a unique field key for this repository.
21 :type key: str
21 :type key: str
22 :param label:
22 :param label:
23 :type label: Optional(str)
23 :type label: Optional(str)
24 :param description:
24 :param description:
25 :type description: Optional(str)
25 :type description: Optional(str)
26
26
27
27
28 comment_commit
28 comment_commit
29 --------------
29 --------------
30
30
31 .. py:function:: comment_commit(apiuser, repoid, commit_id, message, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, 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>, userid=<Optional:<OptionalAttr:apiuser>>)
32
32
33 Set a commit comment, and optionally change the status of the commit.
33 Set a commit comment, and optionally change the status of the commit.
34
34
35 :param apiuser: This is filled automatically from the |authtoken|.
35 :param apiuser: This is filled automatically from the |authtoken|.
36 :type apiuser: AuthUser
36 :type apiuser: AuthUser
37 :param repoid: Set the repository name or repository ID.
37 :param repoid: Set the repository name or repository ID.
38 :type repoid: str or int
38 :type repoid: str or int
39 :param commit_id: Specify the commit_id for which to set a comment.
39 :param commit_id: Specify the commit_id for which to set a comment.
40 :type commit_id: str
40 :type commit_id: str
41 :param message: The comment text.
41 :param message: The comment text.
42 :type message: str
42 :type message: str
43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
44 'approved', 'rejected', 'under_review'
44 'approved', 'rejected', 'under_review'
45 :type status: str
45 :type status: str
46 :param comment_type: Comment type, one of: 'note', 'todo'
46 :param comment_type: Comment type, one of: 'note', 'todo'
47 :type comment_type: Optional(str), default: 'note'
47 :type comment_type: Optional(str), default: 'note'
48 :param userid: Set the user name of the comment creator.
48 :param userid: Set the user name of the comment creator.
49 :type userid: Optional(str or int)
49 :type userid: Optional(str or int)
50
50
51 Example error output:
51 Example error output:
52
52
53 .. code-block:: bash
53 .. code-block:: bash
54
54
55 {
55 {
56 "id" : <id_given_in_input>,
56 "id" : <id_given_in_input>,
57 "result" : {
57 "result" : {
58 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
58 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
59 "status_change": null or <status>,
59 "status_change": null or <status>,
60 "success": true
60 "success": true
61 },
61 },
62 "error" : null
62 "error" : null
63 }
63 }
64
64
65
65
66 create_repo
66 create_repo
67 -----------
67 -----------
68
68
69 .. 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:'rev:tip'>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, copy_permissions=<Optional:False>)
69 .. 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:'rev:tip'>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, copy_permissions=<Optional:False>)
70
70
71 Creates a repository.
71 Creates a repository.
72
72
73 * If the repository name contains "/", repository will be created inside
73 * If the repository name contains "/", repository will be created inside
74 a repository group or nested repository groups
74 a repository group or nested repository groups
75
75
76 For example "foo/bar/repo1" will create |repo| called "repo1" inside
76 For example "foo/bar/repo1" will create |repo| called "repo1" inside
77 group "foo/bar". You have to have permissions to access and write to
77 group "foo/bar". You have to have permissions to access and write to
78 the last repository group ("bar" in this example)
78 the last repository group ("bar" in this example)
79
79
80 This command can only be run using an |authtoken| with at least
80 This command can only be run using an |authtoken| with at least
81 permissions to create repositories, or write permissions to
81 permissions to create repositories, or write permissions to
82 parent repository groups.
82 parent repository groups.
83
83
84 :param apiuser: This is filled automatically from the |authtoken|.
84 :param apiuser: This is filled automatically from the |authtoken|.
85 :type apiuser: AuthUser
85 :type apiuser: AuthUser
86 :param repo_name: Set the repository name.
86 :param repo_name: Set the repository name.
87 :type repo_name: str
87 :type repo_name: str
88 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
88 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
89 :type repo_type: str
89 :type repo_type: str
90 :param owner: user_id or username
90 :param owner: user_id or username
91 :type owner: Optional(str)
91 :type owner: Optional(str)
92 :param description: Set the repository description.
92 :param description: Set the repository description.
93 :type description: Optional(str)
93 :type description: Optional(str)
94 :param private: set repository as private
94 :param private: set repository as private
95 :type private: bool
95 :type private: bool
96 :param clone_uri: set clone_uri
96 :param clone_uri: set clone_uri
97 :type clone_uri: str
97 :type clone_uri: str
98 :param push_uri: set push_uri
98 :param push_uri: set push_uri
99 :type push_uri: str
99 :type push_uri: str
100 :param landing_rev: <rev_type>:<rev>
100 :param landing_rev: <rev_type>:<rev>
101 :type landing_rev: str
101 :type landing_rev: str
102 :param enable_locking:
102 :param enable_locking:
103 :type enable_locking: bool
103 :type enable_locking: bool
104 :param enable_downloads:
104 :param enable_downloads:
105 :type enable_downloads: bool
105 :type enable_downloads: bool
106 :param enable_statistics:
106 :param enable_statistics:
107 :type enable_statistics: bool
107 :type enable_statistics: bool
108 :param copy_permissions: Copy permission from group in which the
108 :param copy_permissions: Copy permission from group in which the
109 repository is being created.
109 repository is being created.
110 :type copy_permissions: bool
110 :type copy_permissions: bool
111
111
112
112
113 Example output:
113 Example output:
114
114
115 .. code-block:: bash
115 .. code-block:: bash
116
116
117 id : <id_given_in_input>
117 id : <id_given_in_input>
118 result: {
118 result: {
119 "msg": "Created new repository `<reponame>`",
119 "msg": "Created new repository `<reponame>`",
120 "success": true,
120 "success": true,
121 "task": "<celery task id or None if done sync>"
121 "task": "<celery task id or None if done sync>"
122 }
122 }
123 error: null
123 error: null
124
124
125
125
126 Example error output:
126 Example error output:
127
127
128 .. code-block:: bash
128 .. code-block:: bash
129
129
130 id : <id_given_in_input>
130 id : <id_given_in_input>
131 result : null
131 result : null
132 error : {
132 error : {
133 'failed to create repository `<repo_name>`'
133 'failed to create repository `<repo_name>`'
134 }
134 }
135
135
136
136
137 delete_repo
137 delete_repo
138 -----------
138 -----------
139
139
140 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
140 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
141
141
142 Deletes a repository.
142 Deletes a repository.
143
143
144 * When the `forks` parameter is set it's possible to detach or delete
144 * When the `forks` parameter is set it's possible to detach or delete
145 forks of deleted repository.
145 forks of deleted repository.
146
146
147 This command can only be run using an |authtoken| with admin
147 This command can only be run using an |authtoken| with admin
148 permissions on the |repo|.
148 permissions on the |repo|.
149
149
150 :param apiuser: This is filled automatically from the |authtoken|.
150 :param apiuser: This is filled automatically from the |authtoken|.
151 :type apiuser: AuthUser
151 :type apiuser: AuthUser
152 :param repoid: Set the repository name or repository ID.
152 :param repoid: Set the repository name or repository ID.
153 :type repoid: str or int
153 :type repoid: str or int
154 :param forks: Set to `detach` or `delete` forks from the |repo|.
154 :param forks: Set to `detach` or `delete` forks from the |repo|.
155 :type forks: Optional(str)
155 :type forks: Optional(str)
156
156
157 Example error output:
157 Example error output:
158
158
159 .. code-block:: bash
159 .. code-block:: bash
160
160
161 id : <id_given_in_input>
161 id : <id_given_in_input>
162 result: {
162 result: {
163 "msg": "Deleted repository `<reponame>`",
163 "msg": "Deleted repository `<reponame>`",
164 "success": true
164 "success": true
165 }
165 }
166 error: null
166 error: null
167
167
168
168
169 fork_repo
169 fork_repo
170 ---------
170 ---------
171
171
172 .. py:function:: fork_repo(apiuser, repoid, fork_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, copy_permissions=<Optional:False>)
172 .. py:function:: fork_repo(apiuser, repoid, fork_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, copy_permissions=<Optional:False>)
173
173
174 Creates a fork of the specified |repo|.
174 Creates a fork of the specified |repo|.
175
175
176 * If the fork_name contains "/", fork will be created inside
176 * If the fork_name contains "/", fork will be created inside
177 a repository group or nested repository groups
177 a repository group or nested repository groups
178
178
179 For example "foo/bar/fork-repo" will create fork called "fork-repo"
179 For example "foo/bar/fork-repo" will create fork called "fork-repo"
180 inside group "foo/bar". You have to have permissions to access and
180 inside group "foo/bar". You have to have permissions to access and
181 write to the last repository group ("bar" in this example)
181 write to the last repository group ("bar" in this example)
182
182
183 This command can only be run using an |authtoken| with minimum
183 This command can only be run using an |authtoken| with minimum
184 read permissions of the forked repo, create fork permissions for an user.
184 read permissions of the forked repo, create fork permissions for an user.
185
185
186 :param apiuser: This is filled automatically from the |authtoken|.
186 :param apiuser: This is filled automatically from the |authtoken|.
187 :type apiuser: AuthUser
187 :type apiuser: AuthUser
188 :param repoid: Set repository name or repository ID.
188 :param repoid: Set repository name or repository ID.
189 :type repoid: str or int
189 :type repoid: str or int
190 :param fork_name: Set the fork name, including it's repository group membership.
190 :param fork_name: Set the fork name, including it's repository group membership.
191 :type fork_name: str
191 :type fork_name: str
192 :param owner: Set the fork owner.
192 :param owner: Set the fork owner.
193 :type owner: str
193 :type owner: str
194 :param description: Set the fork description.
194 :param description: Set the fork description.
195 :type description: str
195 :type description: str
196 :param copy_permissions: Copy permissions from parent |repo|. The
196 :param copy_permissions: Copy permissions from parent |repo|. The
197 default is False.
197 default is False.
198 :type copy_permissions: bool
198 :type copy_permissions: bool
199 :param private: Make the fork private. The default is False.
199 :param private: Make the fork private. The default is False.
200 :type private: bool
200 :type private: bool
201 :param landing_rev: Set the landing revision. The default is tip.
201 :param landing_rev: Set the landing revision. The default is tip.
202
202
203 Example output:
203 Example output:
204
204
205 .. code-block:: bash
205 .. code-block:: bash
206
206
207 id : <id_for_response>
207 id : <id_for_response>
208 api_key : "<api_key>"
208 api_key : "<api_key>"
209 args: {
209 args: {
210 "repoid" : "<reponame or repo_id>",
210 "repoid" : "<reponame or repo_id>",
211 "fork_name": "<forkname>",
211 "fork_name": "<forkname>",
212 "owner": "<username or user_id = Optional(=apiuser)>",
212 "owner": "<username or user_id = Optional(=apiuser)>",
213 "description": "<description>",
213 "description": "<description>",
214 "copy_permissions": "<bool>",
214 "copy_permissions": "<bool>",
215 "private": "<bool>",
215 "private": "<bool>",
216 "landing_rev": "<landing_rev>"
216 "landing_rev": "<landing_rev>"
217 }
217 }
218
218
219 Example error output:
219 Example error output:
220
220
221 .. code-block:: bash
221 .. code-block:: bash
222
222
223 id : <id_given_in_input>
223 id : <id_given_in_input>
224 result: {
224 result: {
225 "msg": "Created fork of `<reponame>` as `<forkname>`",
225 "msg": "Created fork of `<reponame>` as `<forkname>`",
226 "success": true,
226 "success": true,
227 "task": "<celery task id or None if done sync>"
227 "task": "<celery task id or None if done sync>"
228 }
228 }
229 error: null
229 error: null
230
230
231
231
232 get_repo
232 get_repo
233 --------
233 --------
234
234
235 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
235 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
236
236
237 Gets an existing repository by its name or repository_id.
237 Gets an existing repository by its name or repository_id.
238
238
239 The members section so the output returns users groups or users
239 The members section so the output returns users groups or users
240 associated with that repository.
240 associated with that repository.
241
241
242 This command can only be run using an |authtoken| with admin rights,
242 This command can only be run using an |authtoken| with admin rights,
243 or users with at least read rights to the |repo|.
243 or users with at least read rights to the |repo|.
244
244
245 :param apiuser: This is filled automatically from the |authtoken|.
245 :param apiuser: This is filled automatically from the |authtoken|.
246 :type apiuser: AuthUser
246 :type apiuser: AuthUser
247 :param repoid: The repository name or repository id.
247 :param repoid: The repository name or repository id.
248 :type repoid: str or int
248 :type repoid: str or int
249 :param cache: use the cached value for last changeset
249 :param cache: use the cached value for last changeset
250 :type: cache: Optional(bool)
250 :type: cache: Optional(bool)
251
251
252 Example output:
252 Example output:
253
253
254 .. code-block:: bash
254 .. code-block:: bash
255
255
256 {
256 {
257 "error": null,
257 "error": null,
258 "id": <repo_id>,
258 "id": <repo_id>,
259 "result": {
259 "result": {
260 "clone_uri": null,
260 "clone_uri": null,
261 "created_on": "timestamp",
261 "created_on": "timestamp",
262 "description": "repo description",
262 "description": "repo description",
263 "enable_downloads": false,
263 "enable_downloads": false,
264 "enable_locking": false,
264 "enable_locking": false,
265 "enable_statistics": false,
265 "enable_statistics": false,
266 "followers": [
266 "followers": [
267 {
267 {
268 "active": true,
268 "active": true,
269 "admin": false,
269 "admin": false,
270 "api_key": "****************************************",
270 "api_key": "****************************************",
271 "api_keys": [
271 "api_keys": [
272 "****************************************"
272 "****************************************"
273 ],
273 ],
274 "email": "user@example.com",
274 "email": "user@example.com",
275 "emails": [
275 "emails": [
276 "user@example.com"
276 "user@example.com"
277 ],
277 ],
278 "extern_name": "rhodecode",
278 "extern_name": "rhodecode",
279 "extern_type": "rhodecode",
279 "extern_type": "rhodecode",
280 "firstname": "username",
280 "firstname": "username",
281 "ip_addresses": [],
281 "ip_addresses": [],
282 "language": null,
282 "language": null,
283 "last_login": "2015-09-16T17:16:35.854",
283 "last_login": "2015-09-16T17:16:35.854",
284 "lastname": "surname",
284 "lastname": "surname",
285 "user_id": <user_id>,
285 "user_id": <user_id>,
286 "username": "name"
286 "username": "name"
287 }
287 }
288 ],
288 ],
289 "fork_of": "parent-repo",
289 "fork_of": "parent-repo",
290 "landing_rev": [
290 "landing_rev": [
291 "rev",
291 "rev",
292 "tip"
292 "tip"
293 ],
293 ],
294 "last_changeset": {
294 "last_changeset": {
295 "author": "User <user@example.com>",
295 "author": "User <user@example.com>",
296 "branch": "default",
296 "branch": "default",
297 "date": "timestamp",
297 "date": "timestamp",
298 "message": "last commit message",
298 "message": "last commit message",
299 "parents": [
299 "parents": [
300 {
300 {
301 "raw_id": "commit-id"
301 "raw_id": "commit-id"
302 }
302 }
303 ],
303 ],
304 "raw_id": "commit-id",
304 "raw_id": "commit-id",
305 "revision": <revision number>,
305 "revision": <revision number>,
306 "short_id": "short id"
306 "short_id": "short id"
307 },
307 },
308 "lock_reason": null,
308 "lock_reason": null,
309 "locked_by": null,
309 "locked_by": null,
310 "locked_date": null,
310 "locked_date": null,
311 "owner": "owner-name",
311 "owner": "owner-name",
312 "permissions": [
312 "permissions": [
313 {
313 {
314 "name": "super-admin-name",
314 "name": "super-admin-name",
315 "origin": "super-admin",
315 "origin": "super-admin",
316 "permission": "repository.admin",
316 "permission": "repository.admin",
317 "type": "user"
317 "type": "user"
318 },
318 },
319 {
319 {
320 "name": "owner-name",
320 "name": "owner-name",
321 "origin": "owner",
321 "origin": "owner",
322 "permission": "repository.admin",
322 "permission": "repository.admin",
323 "type": "user"
323 "type": "user"
324 },
324 },
325 {
325 {
326 "name": "user-group-name",
326 "name": "user-group-name",
327 "origin": "permission",
327 "origin": "permission",
328 "permission": "repository.write",
328 "permission": "repository.write",
329 "type": "user_group"
329 "type": "user_group"
330 }
330 }
331 ],
331 ],
332 "private": true,
332 "private": true,
333 "repo_id": 676,
333 "repo_id": 676,
334 "repo_name": "user-group/repo-name",
334 "repo_name": "user-group/repo-name",
335 "repo_type": "hg"
335 "repo_type": "hg"
336 }
336 }
337 }
337 }
338
338
339
339
340 get_repo_changeset
340 get_repo_changeset
341 ------------------
341 ------------------
342
342
343 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
343 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
344
344
345 Returns information about a changeset.
345 Returns information about a changeset.
346
346
347 Additionally parameters define the amount of details returned by
347 Additionally parameters define the amount of details returned by
348 this function.
348 this function.
349
349
350 This command can only be run using an |authtoken| with admin rights,
350 This command can only be run using an |authtoken| with admin rights,
351 or users with at least read rights to the |repo|.
351 or users with at least read rights to the |repo|.
352
352
353 :param apiuser: This is filled automatically from the |authtoken|.
353 :param apiuser: This is filled automatically from the |authtoken|.
354 :type apiuser: AuthUser
354 :type apiuser: AuthUser
355 :param repoid: The repository name or repository id
355 :param repoid: The repository name or repository id
356 :type repoid: str or int
356 :type repoid: str or int
357 :param revision: revision for which listing should be done
357 :param revision: revision for which listing should be done
358 :type revision: str
358 :type revision: str
359 :param details: details can be 'basic|extended|full' full gives diff
359 :param details: details can be 'basic|extended|full' full gives diff
360 info details like the diff itself, and number of changed files etc.
360 info details like the diff itself, and number of changed files etc.
361 :type details: Optional(str)
361 :type details: Optional(str)
362
362
363
363
364 get_repo_changesets
364 get_repo_changesets
365 -------------------
365 -------------------
366
366
367 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
367 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
368
368
369 Returns a set of commits limited by the number starting
369 Returns a set of commits limited by the number starting
370 from the `start_rev` option.
370 from the `start_rev` option.
371
371
372 Additional parameters define the amount of details returned by this
372 Additional parameters define the amount of details returned by this
373 function.
373 function.
374
374
375 This command can only be run using an |authtoken| with admin rights,
375 This command can only be run using an |authtoken| with admin rights,
376 or users with at least read rights to |repos|.
376 or users with at least read rights to |repos|.
377
377
378 :param apiuser: This is filled automatically from the |authtoken|.
378 :param apiuser: This is filled automatically from the |authtoken|.
379 :type apiuser: AuthUser
379 :type apiuser: AuthUser
380 :param repoid: The repository name or repository ID.
380 :param repoid: The repository name or repository ID.
381 :type repoid: str or int
381 :type repoid: str or int
382 :param start_rev: The starting revision from where to get changesets.
382 :param start_rev: The starting revision from where to get changesets.
383 :type start_rev: str
383 :type start_rev: str
384 :param limit: Limit the number of commits to this amount
384 :param limit: Limit the number of commits to this amount
385 :type limit: str or int
385 :type limit: str or int
386 :param details: Set the level of detail returned. Valid option are:
386 :param details: Set the level of detail returned. Valid option are:
387 ``basic``, ``extended`` and ``full``.
387 ``basic``, ``extended`` and ``full``.
388 :type details: Optional(str)
388 :type details: Optional(str)
389
389
390 .. note::
390 .. note::
391
391
392 Setting the parameter `details` to the value ``full`` is extensive
392 Setting the parameter `details` to the value ``full`` is extensive
393 and returns details like the diff itself, and the number
393 and returns details like the diff itself, and the number
394 of changed files.
394 of changed files.
395
395
396
396
397 get_repo_nodes
397 get_repo_comments
398 --------------
398 -----------------
399
400 .. py:function:: get_repo_comments(apiuser, repoid, commit_id=<Optional:None>, comment_type=<Optional:None>, userid=<Optional:None>)
401
402 Get all comments for a repository
399
403
400 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
404 :param apiuser: This is filled automatically from the |authtoken|.
405 :type apiuser: AuthUser
406 :param repoid: Set the repository name or repository ID.
407 :type repoid: str or int
408 :param commit_id: Optionally filter the comments by the commit_id
409 :type commit_id: Optional(str), default: None
410 :param comment_type: Optionally filter the comments by the comment_type
411 one of: 'note', 'todo'
412 :type comment_type: Optional(str), default: None
413 :param userid: Optionally filter the comments by the author of comment
414 :type userid: Optional(str or int), Default: None
415
416 Example error output:
417
418 .. code-block:: bash
401
419
402 Returns a list of nodes and children in a flat list for a given
420 {
403 path at given revision.
421 "id" : <id_given_in_input>,
422 "result" : [
423 {
424 "comment_author": <USER_DETAILS>,
425 "comment_created_on": "2017-02-01T14:38:16.309",
426 "comment_f_path": "file.txt",
427 "comment_id": 282,
428 "comment_lineno": "n1",
429 "comment_resolved_by": null,
430 "comment_status": [],
431 "comment_text": "This file needs a header",
432 "comment_type": "todo"
433 }
434 ],
435 "error" : null
436 }
404
437
405 It's possible to specify ret_type to show only `files` or `dirs`.
438
439 get_repo_file
440 -------------
441
442 .. py:function:: get_repo_file(apiuser, repoid, commit_id, file_path, max_file_bytes=<Optional:None>, details=<Optional:'basic'>, cache=<Optional:True>)
443
444 Returns a single file from repository at given revision.
406
445
407 This command can only be run using an |authtoken| with admin rights,
446 This command can only be run using an |authtoken| with admin rights,
408 or users with at least read rights to |repos|.
447 or users with at least read rights to |repos|.
409
448
410 :param apiuser: This is filled automatically from the |authtoken|.
449 :param apiuser: This is filled automatically from the |authtoken|.
411 :type apiuser: AuthUser
450 :type apiuser: AuthUser
412 :param repoid: The repository name or repository ID.
451 :param repoid: The repository name or repository ID.
413 :type repoid: str or int
452 :type repoid: str or int
414 :param revision: The revision for which listing should be done.
453 :param commit_id: The revision for which listing should be done.
415 :type revision: str
454 :type commit_id: str
416 :param root_path: The path from which to start displaying.
455 :param file_path: The path from which to start displaying.
417 :type root_path: str
456 :type file_path: str
418 :param ret_type: Set the return type. Valid options are
457 :param details: Returns different set of information about nodes.
419 ``all`` (default), ``files`` and ``dirs``.
458 The valid options are ``minimal`` ``basic`` and ``full``.
420 :type ret_type: Optional(str)
421 :param details: Returns extended information about nodes, such as
422 md5, binary, and or content. The valid options are ``basic`` and
423 ``full``.
424 :type details: Optional(str)
459 :type details: Optional(str)
425 :param max_file_bytes: Only return file content under this file size bytes
460 :param max_file_bytes: Only return file content under this file size bytes
426 :type details: Optional(int)
461 :type max_file_bytes: Optional(int)
427
462 :param cache: Use internal caches for fetching files. If disabled fetching
463 files is slower but more memory efficient
464 :type cache: Optional(bool)
428 Example output:
465 Example output:
429
466
430 .. code-block:: bash
467 .. code-block:: bash
431
468
432 id : <id_given_in_input>
469 id : <id_given_in_input>
433 result: [
470 result: {
434 {
471 "binary": false,
435 "name" : "<name>"
472 "extension": "py",
436 "type" : "<type>",
473 "lines": 35,
437 "binary": "<true|false>" (only in extended mode)
474 "content": "....",
438 "md5" : "<md5 of file content>" (only in extended mode)
475 "md5": "76318336366b0f17ee249e11b0c99c41",
439 },
476 "mimetype": "text/x-python",
440 ...
477 "name": "python.py",
441 ]
478 "size": 817,
479 "type": "file",
480 }
442 error: null
481 error: null
443
482
444
483
484 get_repo_fts_tree
485 -----------------
486
487 .. py:function:: get_repo_fts_tree(apiuser, repoid, commit_id, root_path)
488
489 Returns a list of tree nodes for path at given revision. This api is built
490 strictly for usage in full text search building, and shouldn't be consumed
491
492 This command can only be run using an |authtoken| with admin rights,
493 or users with at least read rights to |repos|.
494
495
496 get_repo_nodes
497 --------------
498
499 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
500
501 Returns a list of nodes and children in a flat list for a given
502 path at given revision.
503
504 It's possible to specify ret_type to show only `files` or `dirs`.
505
506 This command can only be run using an |authtoken| with admin rights,
507 or users with at least read rights to |repos|.
508
509 :param apiuser: This is filled automatically from the |authtoken|.
510 :type apiuser: AuthUser
511 :param repoid: The repository name or repository ID.
512 :type repoid: str or int
513 :param revision: The revision for which listing should be done.
514 :type revision: str
515 :param root_path: The path from which to start displaying.
516 :type root_path: str
517 :param ret_type: Set the return type. Valid options are
518 ``all`` (default), ``files`` and ``dirs``.
519 :type ret_type: Optional(str)
520 :param details: Returns extended information about nodes, such as
521 md5, binary, and or content.
522 The valid options are ``basic`` and ``full``.
523 :type details: Optional(str)
524 :param max_file_bytes: Only return file content under this file size bytes
525 :type details: Optional(int)
526
527 Example output:
528
529 .. code-block:: bash
530
531 id : <id_given_in_input>
532 result: [
533 {
534 "binary": false,
535 "content": "File line
536 Line2
537 ",
538 "extension": "md",
539 "lines": 2,
540 "md5": "059fa5d29b19c0657e384749480f6422",
541 "mimetype": "text/x-minidsrc",
542 "name": "file.md",
543 "size": 580,
544 "type": "file"
545 },
546 ...
547 ]
548 error: null
549
550
445 get_repo_refs
551 get_repo_refs
446 -------------
552 -------------
447
553
448 .. py:function:: get_repo_refs(apiuser, repoid)
554 .. py:function:: get_repo_refs(apiuser, repoid)
449
555
450 Returns a dictionary of current references. It returns
556 Returns a dictionary of current references. It returns
451 bookmarks, branches, closed_branches, and tags for given repository
557 bookmarks, branches, closed_branches, and tags for given repository
452
558
453 It's possible to specify ret_type to show only `files` or `dirs`.
559 It's possible to specify ret_type to show only `files` or `dirs`.
454
560
455 This command can only be run using an |authtoken| with admin rights,
561 This command can only be run using an |authtoken| with admin rights,
456 or users with at least read rights to |repos|.
562 or users with at least read rights to |repos|.
457
563
458 :param apiuser: This is filled automatically from the |authtoken|.
564 :param apiuser: This is filled automatically from the |authtoken|.
459 :type apiuser: AuthUser
565 :type apiuser: AuthUser
460 :param repoid: The repository name or repository ID.
566 :param repoid: The repository name or repository ID.
461 :type repoid: str or int
567 :type repoid: str or int
462
568
463 Example output:
569 Example output:
464
570
465 .. code-block:: bash
571 .. code-block:: bash
466
572
467 id : <id_given_in_input>
573 id : <id_given_in_input>
468 "result": {
574 "result": {
469 "bookmarks": {
575 "bookmarks": {
470 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
576 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
471 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
577 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
472 },
578 },
473 "branches": {
579 "branches": {
474 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
580 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
475 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
581 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
476 },
582 },
477 "branches_closed": {},
583 "branches_closed": {},
478 "tags": {
584 "tags": {
479 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
585 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
480 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
586 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
481 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
587 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
482 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
588 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
483 }
589 }
484 }
590 }
485 error: null
591 error: null
486
592
487
593
488 get_repo_settings
594 get_repo_settings
489 -----------------
595 -----------------
490
596
491 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
597 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
492
598
493 Returns all settings for a repository. If key is given it only returns the
599 Returns all settings for a repository. If key is given it only returns the
494 setting identified by the key or null.
600 setting identified by the key or null.
495
601
496 :param apiuser: This is filled automatically from the |authtoken|.
602 :param apiuser: This is filled automatically from the |authtoken|.
497 :type apiuser: AuthUser
603 :type apiuser: AuthUser
498 :param repoid: The repository name or repository id.
604 :param repoid: The repository name or repository id.
499 :type repoid: str or int
605 :type repoid: str or int
500 :param key: Key of the setting to return.
606 :param key: Key of the setting to return.
501 :type: key: Optional(str)
607 :type: key: Optional(str)
502
608
503 Example output:
609 Example output:
504
610
505 .. code-block:: bash
611 .. code-block:: bash
506
612
507 {
613 {
508 "error": null,
614 "error": null,
509 "id": 237,
615 "id": 237,
510 "result": {
616 "result": {
511 "extensions_largefiles": true,
617 "extensions_largefiles": true,
512 "extensions_evolve": true,
618 "extensions_evolve": true,
513 "hooks_changegroup_push_logger": true,
619 "hooks_changegroup_push_logger": true,
514 "hooks_changegroup_repo_size": false,
620 "hooks_changegroup_repo_size": false,
515 "hooks_outgoing_pull_logger": true,
621 "hooks_outgoing_pull_logger": true,
516 "phases_publish": "True",
622 "phases_publish": "True",
517 "rhodecode_hg_use_rebase_for_merging": true,
623 "rhodecode_hg_use_rebase_for_merging": true,
518 "rhodecode_pr_merge_enabled": true,
624 "rhodecode_pr_merge_enabled": true,
519 "rhodecode_use_outdated_comments": true
625 "rhodecode_use_outdated_comments": true
520 }
626 }
521 }
627 }
522
628
523
629
524 get_repos
630 get_repos
525 ---------
631 ---------
526
632
527 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
633 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
528
634
529 Lists all existing repositories.
635 Lists all existing repositories.
530
636
531 This command can only be run using an |authtoken| with admin rights,
637 This command can only be run using an |authtoken| with admin rights,
532 or users with at least read rights to |repos|.
638 or users with at least read rights to |repos|.
533
639
534 :param apiuser: This is filled automatically from the |authtoken|.
640 :param apiuser: This is filled automatically from the |authtoken|.
535 :type apiuser: AuthUser
641 :type apiuser: AuthUser
536 :param root: specify root repository group to fetch repositories.
642 :param root: specify root repository group to fetch repositories.
537 filters the returned repositories to be members of given root group.
643 filters the returned repositories to be members of given root group.
538 :type root: Optional(None)
644 :type root: Optional(None)
539 :param traverse: traverse given root into subrepositories. With this flag
645 :param traverse: traverse given root into subrepositories. With this flag
540 set to False, it will only return top-level repositories from `root`.
646 set to False, it will only return top-level repositories from `root`.
541 if root is empty it will return just top-level repositories.
647 if root is empty it will return just top-level repositories.
542 :type traverse: Optional(True)
648 :type traverse: Optional(True)
543
649
544
650
545 Example output:
651 Example output:
546
652
547 .. code-block:: bash
653 .. code-block:: bash
548
654
549 id : <id_given_in_input>
655 id : <id_given_in_input>
550 result: [
656 result: [
551 {
657 {
552 "repo_id" : "<repo_id>",
658 "repo_id" : "<repo_id>",
553 "repo_name" : "<reponame>"
659 "repo_name" : "<reponame>"
554 "repo_type" : "<repo_type>",
660 "repo_type" : "<repo_type>",
555 "clone_uri" : "<clone_uri>",
661 "clone_uri" : "<clone_uri>",
556 "private": : "<bool>",
662 "private": : "<bool>",
557 "created_on" : "<datetimecreated>",
663 "created_on" : "<datetimecreated>",
558 "description" : "<description>",
664 "description" : "<description>",
559 "landing_rev": "<landing_rev>",
665 "landing_rev": "<landing_rev>",
560 "owner": "<repo_owner>",
666 "owner": "<repo_owner>",
561 "fork_of": "<name_of_fork_parent>",
667 "fork_of": "<name_of_fork_parent>",
562 "enable_downloads": "<bool>",
668 "enable_downloads": "<bool>",
563 "enable_locking": "<bool>",
669 "enable_locking": "<bool>",
564 "enable_statistics": "<bool>",
670 "enable_statistics": "<bool>",
565 },
671 },
566 ...
672 ...
567 ]
673 ]
568 error: null
674 error: null
569
675
570
676
571 grant_user_group_permission
677 grant_user_group_permission
572 ---------------------------
678 ---------------------------
573
679
574 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
680 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
575
681
576 Grant permission for a user group on the specified repository,
682 Grant permission for a user group on the specified repository,
577 or update existing permissions.
683 or update existing permissions.
578
684
579 This command can only be run using an |authtoken| with admin
685 This command can only be run using an |authtoken| with admin
580 permissions on the |repo|.
686 permissions on the |repo|.
581
687
582 :param apiuser: This is filled automatically from the |authtoken|.
688 :param apiuser: This is filled automatically from the |authtoken|.
583 :type apiuser: AuthUser
689 :type apiuser: AuthUser
584 :param repoid: Set the repository name or repository ID.
690 :param repoid: Set the repository name or repository ID.
585 :type repoid: str or int
691 :type repoid: str or int
586 :param usergroupid: Specify the ID of the user group.
692 :param usergroupid: Specify the ID of the user group.
587 :type usergroupid: str or int
693 :type usergroupid: str or int
588 :param perm: Set the user group permissions using the following
694 :param perm: Set the user group permissions using the following
589 format: (repository.(none|read|write|admin))
695 format: (repository.(none|read|write|admin))
590 :type perm: str
696 :type perm: str
591
697
592 Example output:
698 Example output:
593
699
594 .. code-block:: bash
700 .. code-block:: bash
595
701
596 id : <id_given_in_input>
702 id : <id_given_in_input>
597 result : {
703 result : {
598 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
704 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
599 "success": true
705 "success": true
600
706
601 }
707 }
602 error : null
708 error : null
603
709
604 Example error output:
710 Example error output:
605
711
606 .. code-block:: bash
712 .. code-block:: bash
607
713
608 id : <id_given_in_input>
714 id : <id_given_in_input>
609 result : null
715 result : null
610 error : {
716 error : {
611 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
717 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
612 }
718 }
613
719
614
720
615 grant_user_permission
721 grant_user_permission
616 ---------------------
722 ---------------------
617
723
618 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
724 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
619
725
620 Grant permissions for the specified user on the given repository,
726 Grant permissions for the specified user on the given repository,
621 or update existing permissions if found.
727 or update existing permissions if found.
622
728
623 This command can only be run using an |authtoken| with admin
729 This command can only be run using an |authtoken| with admin
624 permissions on the |repo|.
730 permissions on the |repo|.
625
731
626 :param apiuser: This is filled automatically from the |authtoken|.
732 :param apiuser: This is filled automatically from the |authtoken|.
627 :type apiuser: AuthUser
733 :type apiuser: AuthUser
628 :param repoid: Set the repository name or repository ID.
734 :param repoid: Set the repository name or repository ID.
629 :type repoid: str or int
735 :type repoid: str or int
630 :param userid: Set the user name.
736 :param userid: Set the user name.
631 :type userid: str
737 :type userid: str
632 :param perm: Set the user permissions, using the following format
738 :param perm: Set the user permissions, using the following format
633 ``(repository.(none|read|write|admin))``
739 ``(repository.(none|read|write|admin))``
634 :type perm: str
740 :type perm: str
635
741
636 Example output:
742 Example output:
637
743
638 .. code-block:: bash
744 .. code-block:: bash
639
745
640 id : <id_given_in_input>
746 id : <id_given_in_input>
641 result: {
747 result: {
642 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
748 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
643 "success": true
749 "success": true
644 }
750 }
645 error: null
751 error: null
646
752
647
753
648 invalidate_cache
754 invalidate_cache
649 ----------------
755 ----------------
650
756
651 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
757 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
652
758
653 Invalidates the cache for the specified repository.
759 Invalidates the cache for the specified repository.
654
760
655 This command can only be run using an |authtoken| with admin rights to
761 This command can only be run using an |authtoken| with admin rights to
656 the specified repository.
762 the specified repository.
657
763
658 This command takes the following options:
764 This command takes the following options:
659
765
660 :param apiuser: This is filled automatically from |authtoken|.
766 :param apiuser: This is filled automatically from |authtoken|.
661 :type apiuser: AuthUser
767 :type apiuser: AuthUser
662 :param repoid: Sets the repository name or repository ID.
768 :param repoid: Sets the repository name or repository ID.
663 :type repoid: str or int
769 :type repoid: str or int
664 :param delete_keys: This deletes the invalidated keys instead of
770 :param delete_keys: This deletes the invalidated keys instead of
665 just flagging them.
771 just flagging them.
666 :type delete_keys: Optional(``True`` | ``False``)
772 :type delete_keys: Optional(``True`` | ``False``)
667
773
668 Example output:
774 Example output:
669
775
670 .. code-block:: bash
776 .. code-block:: bash
671
777
672 id : <id_given_in_input>
778 id : <id_given_in_input>
673 result : {
779 result : {
674 'msg': Cache for repository `<repository name>` was invalidated,
780 'msg': Cache for repository `<repository name>` was invalidated,
675 'repository': <repository name>
781 'repository': <repository name>
676 }
782 }
677 error : null
783 error : null
678
784
679 Example error output:
785 Example error output:
680
786
681 .. code-block:: bash
787 .. code-block:: bash
682
788
683 id : <id_given_in_input>
789 id : <id_given_in_input>
684 result : null
790 result : null
685 error : {
791 error : {
686 'Error occurred during cache invalidation action'
792 'Error occurred during cache invalidation action'
687 }
793 }
688
794
689
795
690 lock
796 lock
691 ----
797 ----
692
798
693 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
799 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
694
800
695 Sets the lock state of the specified |repo| by the given user.
801 Sets the lock state of the specified |repo| by the given user.
696 From more information, see :ref:`repo-locking`.
802 From more information, see :ref:`repo-locking`.
697
803
698 * If the ``userid`` option is not set, the repository is locked to the
804 * If the ``userid`` option is not set, the repository is locked to the
699 user who called the method.
805 user who called the method.
700 * If the ``locked`` parameter is not set, the current lock state of the
806 * If the ``locked`` parameter is not set, the current lock state of the
701 repository is displayed.
807 repository is displayed.
702
808
703 This command can only be run using an |authtoken| with admin rights to
809 This command can only be run using an |authtoken| with admin rights to
704 the specified repository.
810 the specified repository.
705
811
706 This command takes the following options:
812 This command takes the following options:
707
813
708 :param apiuser: This is filled automatically from the |authtoken|.
814 :param apiuser: This is filled automatically from the |authtoken|.
709 :type apiuser: AuthUser
815 :type apiuser: AuthUser
710 :param repoid: Sets the repository name or repository ID.
816 :param repoid: Sets the repository name or repository ID.
711 :type repoid: str or int
817 :type repoid: str or int
712 :param locked: Sets the lock state.
818 :param locked: Sets the lock state.
713 :type locked: Optional(``True`` | ``False``)
819 :type locked: Optional(``True`` | ``False``)
714 :param userid: Set the repository lock to this user.
820 :param userid: Set the repository lock to this user.
715 :type userid: Optional(str or int)
821 :type userid: Optional(str or int)
716
822
717 Example error output:
823 Example error output:
718
824
719 .. code-block:: bash
825 .. code-block:: bash
720
826
721 id : <id_given_in_input>
827 id : <id_given_in_input>
722 result : {
828 result : {
723 'repo': '<reponame>',
829 'repo': '<reponame>',
724 'locked': <bool: lock state>,
830 'locked': <bool: lock state>,
725 'locked_since': <int: lock timestamp>,
831 'locked_since': <int: lock timestamp>,
726 'locked_by': <username of person who made the lock>,
832 'locked_by': <username of person who made the lock>,
727 'lock_reason': <str: reason for locking>,
833 'lock_reason': <str: reason for locking>,
728 'lock_state_changed': <bool: True if lock state has been changed in this request>,
834 'lock_state_changed': <bool: True if lock state has been changed in this request>,
729 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
835 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
730 or
836 or
731 'msg': 'Repo `<repository name>` not locked.'
837 'msg': 'Repo `<repository name>` not locked.'
732 or
838 or
733 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
839 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
734 }
840 }
735 error : null
841 error : null
736
842
737 Example error output:
843 Example error output:
738
844
739 .. code-block:: bash
845 .. code-block:: bash
740
846
741 id : <id_given_in_input>
847 id : <id_given_in_input>
742 result : null
848 result : null
743 error : {
849 error : {
744 'Error occurred locking repository `<reponame>`'
850 'Error occurred locking repository `<reponame>`'
745 }
851 }
746
852
747
853
748 maintenance
854 maintenance
749 -----------
855 -----------
750
856
751 .. py:function:: maintenance(apiuser, repoid)
857 .. py:function:: maintenance(apiuser, repoid)
752
858
753 Triggers a maintenance on the given repository.
859 Triggers a maintenance on the given repository.
754
860
755 This command can only be run using an |authtoken| with admin
861 This command can only be run using an |authtoken| with admin
756 rights to the specified repository. For more information,
862 rights to the specified repository. For more information,
757 see :ref:`config-token-ref`.
863 see :ref:`config-token-ref`.
758
864
759 This command takes the following options:
865 This command takes the following options:
760
866
761 :param apiuser: This is filled automatically from the |authtoken|.
867 :param apiuser: This is filled automatically from the |authtoken|.
762 :type apiuser: AuthUser
868 :type apiuser: AuthUser
763 :param repoid: The repository name or repository ID.
869 :param repoid: The repository name or repository ID.
764 :type repoid: str or int
870 :type repoid: str or int
765
871
766 Example output:
872 Example output:
767
873
768 .. code-block:: bash
874 .. code-block:: bash
769
875
770 id : <id_given_in_input>
876 id : <id_given_in_input>
771 result : {
877 result : {
772 "msg": "executed maintenance command",
878 "msg": "executed maintenance command",
773 "executed_actions": [
879 "executed_actions": [
774 <action_message>, <action_message2>...
880 <action_message>, <action_message2>...
775 ],
881 ],
776 "repository": "<repository name>"
882 "repository": "<repository name>"
777 }
883 }
778 error : null
884 error : null
779
885
780 Example error output:
886 Example error output:
781
887
782 .. code-block:: bash
888 .. code-block:: bash
783
889
784 id : <id_given_in_input>
890 id : <id_given_in_input>
785 result : null
891 result : null
786 error : {
892 error : {
787 "Unable to execute maintenance on `<reponame>`"
893 "Unable to execute maintenance on `<reponame>`"
788 }
894 }
789
895
790
896
791 pull
897 pull
792 ----
898 ----
793
899
794 .. py:function:: pull(apiuser, repoid, remote_uri=<Optional:None>)
900 .. py:function:: pull(apiuser, repoid, remote_uri=<Optional:None>)
795
901
796 Triggers a pull on the given repository from a remote location. You
902 Triggers a pull on the given repository from a remote location. You
797 can use this to keep remote repositories up-to-date.
903 can use this to keep remote repositories up-to-date.
798
904
799 This command can only be run using an |authtoken| with admin
905 This command can only be run using an |authtoken| with admin
800 rights to the specified repository. For more information,
906 rights to the specified repository. For more information,
801 see :ref:`config-token-ref`.
907 see :ref:`config-token-ref`.
802
908
803 This command takes the following options:
909 This command takes the following options:
804
910
805 :param apiuser: This is filled automatically from the |authtoken|.
911 :param apiuser: This is filled automatically from the |authtoken|.
806 :type apiuser: AuthUser
912 :type apiuser: AuthUser
807 :param repoid: The repository name or repository ID.
913 :param repoid: The repository name or repository ID.
808 :type repoid: str or int
914 :type repoid: str or int
809 :param remote_uri: Optional remote URI to pass in for pull
915 :param remote_uri: Optional remote URI to pass in for pull
810 :type remote_uri: str
916 :type remote_uri: str
811
917
812 Example output:
918 Example output:
813
919
814 .. code-block:: bash
920 .. code-block:: bash
815
921
816 id : <id_given_in_input>
922 id : <id_given_in_input>
817 result : {
923 result : {
818 "msg": "Pulled from url `<remote_url>` on repo `<repository name>`"
924 "msg": "Pulled from url `<remote_url>` on repo `<repository name>`"
819 "repository": "<repository name>"
925 "repository": "<repository name>"
820 }
926 }
821 error : null
927 error : null
822
928
823 Example error output:
929 Example error output:
824
930
825 .. code-block:: bash
931 .. code-block:: bash
826
932
827 id : <id_given_in_input>
933 id : <id_given_in_input>
828 result : null
934 result : null
829 error : {
935 error : {
830 "Unable to push changes from `<remote_url>`"
936 "Unable to push changes from `<remote_url>`"
831 }
937 }
832
938
833
939
834 remove_field_from_repo
940 remove_field_from_repo
835 ----------------------
941 ----------------------
836
942
837 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
943 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
838
944
839 Removes an extra field from a repository.
945 Removes an extra field from a repository.
840
946
841 This command can only be run using an |authtoken| with at least
947 This command can only be run using an |authtoken| with at least
842 write permissions to the |repo|.
948 write permissions to the |repo|.
843
949
844 :param apiuser: This is filled automatically from the |authtoken|.
950 :param apiuser: This is filled automatically from the |authtoken|.
845 :type apiuser: AuthUser
951 :type apiuser: AuthUser
846 :param repoid: Set the repository name or repository ID.
952 :param repoid: Set the repository name or repository ID.
847 :type repoid: str or int
953 :type repoid: str or int
848 :param key: Set the unique field key for this repository.
954 :param key: Set the unique field key for this repository.
849 :type key: str
955 :type key: str
850
956
851
957
852 revoke_user_group_permission
958 revoke_user_group_permission
853 ----------------------------
959 ----------------------------
854
960
855 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
961 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
856
962
857 Revoke the permissions of a user group on a given repository.
963 Revoke the permissions of a user group on a given repository.
858
964
859 This command can only be run using an |authtoken| with admin
965 This command can only be run using an |authtoken| with admin
860 permissions on the |repo|.
966 permissions on the |repo|.
861
967
862 :param apiuser: This is filled automatically from the |authtoken|.
968 :param apiuser: This is filled automatically from the |authtoken|.
863 :type apiuser: AuthUser
969 :type apiuser: AuthUser
864 :param repoid: Set the repository name or repository ID.
970 :param repoid: Set the repository name or repository ID.
865 :type repoid: str or int
971 :type repoid: str or int
866 :param usergroupid: Specify the user group ID.
972 :param usergroupid: Specify the user group ID.
867 :type usergroupid: str or int
973 :type usergroupid: str or int
868
974
869 Example output:
975 Example output:
870
976
871 .. code-block:: bash
977 .. code-block:: bash
872
978
873 id : <id_given_in_input>
979 id : <id_given_in_input>
874 result: {
980 result: {
875 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
981 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
876 "success": true
982 "success": true
877 }
983 }
878 error: null
984 error: null
879
985
880
986
881 revoke_user_permission
987 revoke_user_permission
882 ----------------------
988 ----------------------
883
989
884 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
990 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
885
991
886 Revoke permission for a user on the specified repository.
992 Revoke permission for a user on the specified repository.
887
993
888 This command can only be run using an |authtoken| with admin
994 This command can only be run using an |authtoken| with admin
889 permissions on the |repo|.
995 permissions on the |repo|.
890
996
891 :param apiuser: This is filled automatically from the |authtoken|.
997 :param apiuser: This is filled automatically from the |authtoken|.
892 :type apiuser: AuthUser
998 :type apiuser: AuthUser
893 :param repoid: Set the repository name or repository ID.
999 :param repoid: Set the repository name or repository ID.
894 :type repoid: str or int
1000 :type repoid: str or int
895 :param userid: Set the user name of revoked user.
1001 :param userid: Set the user name of revoked user.
896 :type userid: str or int
1002 :type userid: str or int
897
1003
898 Example error output:
1004 Example error output:
899
1005
900 .. code-block:: bash
1006 .. code-block:: bash
901
1007
902 id : <id_given_in_input>
1008 id : <id_given_in_input>
903 result: {
1009 result: {
904 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
1010 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
905 "success": true
1011 "success": true
906 }
1012 }
907 error: null
1013 error: null
908
1014
909
1015
910 set_repo_settings
1016 set_repo_settings
911 -----------------
1017 -----------------
912
1018
913 .. py:function:: set_repo_settings(apiuser, repoid, settings)
1019 .. py:function:: set_repo_settings(apiuser, repoid, settings)
914
1020
915 Update repository settings. Returns true on success.
1021 Update repository settings. Returns true on success.
916
1022
917 :param apiuser: This is filled automatically from the |authtoken|.
1023 :param apiuser: This is filled automatically from the |authtoken|.
918 :type apiuser: AuthUser
1024 :type apiuser: AuthUser
919 :param repoid: The repository name or repository id.
1025 :param repoid: The repository name or repository id.
920 :type repoid: str or int
1026 :type repoid: str or int
921 :param settings: The new settings for the repository.
1027 :param settings: The new settings for the repository.
922 :type: settings: dict
1028 :type: settings: dict
923
1029
924 Example output:
1030 Example output:
925
1031
926 .. code-block:: bash
1032 .. code-block:: bash
927
1033
928 {
1034 {
929 "error": null,
1035 "error": null,
930 "id": 237,
1036 "id": 237,
931 "result": true
1037 "result": true
932 }
1038 }
933
1039
934
1040
935 strip
1041 strip
936 -----
1042 -----
937
1043
938 .. py:function:: strip(apiuser, repoid, revision, branch)
1044 .. py:function:: strip(apiuser, repoid, revision, branch)
939
1045
940 Strips the given revision from the specified repository.
1046 Strips the given revision from the specified repository.
941
1047
942 * This will remove the revision and all of its decendants.
1048 * This will remove the revision and all of its decendants.
943
1049
944 This command can only be run using an |authtoken| with admin rights to
1050 This command can only be run using an |authtoken| with admin rights to
945 the specified repository.
1051 the specified repository.
946
1052
947 This command takes the following options:
1053 This command takes the following options:
948
1054
949 :param apiuser: This is filled automatically from the |authtoken|.
1055 :param apiuser: This is filled automatically from the |authtoken|.
950 :type apiuser: AuthUser
1056 :type apiuser: AuthUser
951 :param repoid: The repository name or repository ID.
1057 :param repoid: The repository name or repository ID.
952 :type repoid: str or int
1058 :type repoid: str or int
953 :param revision: The revision you wish to strip.
1059 :param revision: The revision you wish to strip.
954 :type revision: str
1060 :type revision: str
955 :param branch: The branch from which to strip the revision.
1061 :param branch: The branch from which to strip the revision.
956 :type branch: str
1062 :type branch: str
957
1063
958 Example output:
1064 Example output:
959
1065
960 .. code-block:: bash
1066 .. code-block:: bash
961
1067
962 id : <id_given_in_input>
1068 id : <id_given_in_input>
963 result : {
1069 result : {
964 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
1070 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
965 "repository": "<repository name>"
1071 "repository": "<repository name>"
966 }
1072 }
967 error : null
1073 error : null
968
1074
969 Example error output:
1075 Example error output:
970
1076
971 .. code-block:: bash
1077 .. code-block:: bash
972
1078
973 id : <id_given_in_input>
1079 id : <id_given_in_input>
974 result : null
1080 result : null
975 error : {
1081 error : {
976 "Unable to strip commit <commit_hash> from repo `<repository name>`"
1082 "Unable to strip commit <commit_hash> from repo `<repository name>`"
977 }
1083 }
978
1084
979
1085
980 update_repo
1086 update_repo
981 -----------
1087 -----------
982
1088
983 .. 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:'rev:tip'>, fork_of=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, fields=<Optional:''>)
1089 .. 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:'rev:tip'>, fork_of=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, fields=<Optional:''>)
984
1090
985 Updates a repository with the given information.
1091 Updates a repository with the given information.
986
1092
987 This command can only be run using an |authtoken| with at least
1093 This command can only be run using an |authtoken| with at least
988 admin permissions to the |repo|.
1094 admin permissions to the |repo|.
989
1095
990 * If the repository name contains "/", repository will be updated
1096 * If the repository name contains "/", repository will be updated
991 accordingly with a repository group or nested repository groups
1097 accordingly with a repository group or nested repository groups
992
1098
993 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1099 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
994 called "repo-test" and place it inside group "foo/bar".
1100 called "repo-test" and place it inside group "foo/bar".
995 You have to have permissions to access and write to the last repository
1101 You have to have permissions to access and write to the last repository
996 group ("bar" in this example)
1102 group ("bar" in this example)
997
1103
998 :param apiuser: This is filled automatically from the |authtoken|.
1104 :param apiuser: This is filled automatically from the |authtoken|.
999 :type apiuser: AuthUser
1105 :type apiuser: AuthUser
1000 :param repoid: repository name or repository ID.
1106 :param repoid: repository name or repository ID.
1001 :type repoid: str or int
1107 :type repoid: str or int
1002 :param repo_name: Update the |repo| name, including the
1108 :param repo_name: Update the |repo| name, including the
1003 repository group it's in.
1109 repository group it's in.
1004 :type repo_name: str
1110 :type repo_name: str
1005 :param owner: Set the |repo| owner.
1111 :param owner: Set the |repo| owner.
1006 :type owner: str
1112 :type owner: str
1007 :param fork_of: Set the |repo| as fork of another |repo|.
1113 :param fork_of: Set the |repo| as fork of another |repo|.
1008 :type fork_of: str
1114 :type fork_of: str
1009 :param description: Update the |repo| description.
1115 :param description: Update the |repo| description.
1010 :type description: str
1116 :type description: str
1011 :param private: Set the |repo| as private. (True | False)
1117 :param private: Set the |repo| as private. (True | False)
1012 :type private: bool
1118 :type private: bool
1013 :param clone_uri: Update the |repo| clone URI.
1119 :param clone_uri: Update the |repo| clone URI.
1014 :type clone_uri: str
1120 :type clone_uri: str
1015 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
1121 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
1016 :type landing_rev: str
1122 :type landing_rev: str
1017 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1123 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1018 :type enable_statistics: bool
1124 :type enable_statistics: bool
1019 :param enable_locking: Enable |repo| locking.
1125 :param enable_locking: Enable |repo| locking.
1020 :type enable_locking: bool
1126 :type enable_locking: bool
1021 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1127 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1022 :type enable_downloads: bool
1128 :type enable_downloads: bool
1023 :param fields: Add extra fields to the |repo|. Use the following
1129 :param fields: Add extra fields to the |repo|. Use the following
1024 example format: ``field_key=field_val,field_key2=fieldval2``.
1130 example format: ``field_key=field_val,field_key2=fieldval2``.
1025 Escape ', ' with \,
1131 Escape ', ' with \,
1026 :type fields: str
1132 :type fields: str
1027
1133
1028
1134
@@ -1,234 +1,268 b''
1 .. _server-methods-ref:
1 .. _server-methods-ref:
2
2
3 server methods
3 server methods
4 ==============
4 ==============
5
5
6 cleanup_sessions
6 cleanup_sessions
7 ----------------
7 ----------------
8
8
9 .. py:function:: cleanup_sessions(apiuser, older_then=<Optional:60>)
9 .. py:function:: cleanup_sessions(apiuser, older_then=<Optional:60>)
10
10
11 Triggers a session cleanup action.
11 Triggers a session cleanup action.
12
12
13 If the ``older_then`` option is set, only sessions that hasn't been
13 If the ``older_then`` option is set, only sessions that hasn't been
14 accessed in the given number of days will be removed.
14 accessed in the given number of days will be removed.
15
15
16 This command can only be run using an |authtoken| with admin rights to
16 This command can only be run using an |authtoken| with admin rights to
17 the specified repository.
17 the specified repository.
18
18
19 This command takes the following options:
19 This command takes the following options:
20
20
21 :param apiuser: This is filled automatically from the |authtoken|.
21 :param apiuser: This is filled automatically from the |authtoken|.
22 :type apiuser: AuthUser
22 :type apiuser: AuthUser
23 :param older_then: Deletes session that hasn't been accessed
23 :param older_then: Deletes session that hasn't been accessed
24 in given number of days.
24 in given number of days.
25 :type older_then: Optional(int)
25 :type older_then: Optional(int)
26
26
27 Example output:
27 Example output:
28
28
29 .. code-block:: bash
29 .. code-block:: bash
30
30
31 id : <id_given_in_input>
31 id : <id_given_in_input>
32 result: {
32 result: {
33 "backend": "<type of backend>",
33 "backend": "<type of backend>",
34 "sessions_removed": <number_of_removed_sessions>
34 "sessions_removed": <number_of_removed_sessions>
35 }
35 }
36 error : null
36 error : null
37
37
38 Example error output:
38 Example error output:
39
39
40 .. code-block:: bash
40 .. code-block:: bash
41
41
42 id : <id_given_in_input>
42 id : <id_given_in_input>
43 result : null
43 result : null
44 error : {
44 error : {
45 'Error occurred during session cleanup'
45 'Error occurred during session cleanup'
46 }
46 }
47
47
48
48
49 get_ip
49 get_ip
50 ------
50 ------
51
51
52 .. py:function:: get_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
52 .. py:function:: get_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
53
53
54 Displays the IP Address as seen from the |RCE| server.
54 Displays the IP Address as seen from the |RCE| server.
55
55
56 * This command displays the IP Address, as well as all the defined IP
56 * This command displays the IP Address, as well as all the defined IP
57 addresses for the specified user. If the ``userid`` is not set, the
57 addresses for the specified user. If the ``userid`` is not set, the
58 data returned is for the user calling the method.
58 data returned is for the user calling the method.
59
59
60 This command can only be run using an |authtoken| with admin rights to
60 This command can only be run using an |authtoken| with admin rights to
61 the specified repository.
61 the specified repository.
62
62
63 This command takes the following options:
63 This command takes the following options:
64
64
65 :param apiuser: This is filled automatically from |authtoken|.
65 :param apiuser: This is filled automatically from |authtoken|.
66 :type apiuser: AuthUser
66 :type apiuser: AuthUser
67 :param userid: Sets the userid for which associated IP Address data
67 :param userid: Sets the userid for which associated IP Address data
68 is returned.
68 is returned.
69 :type userid: Optional(str or int)
69 :type userid: Optional(str or int)
70
70
71 Example output:
71 Example output:
72
72
73 .. code-block:: bash
73 .. code-block:: bash
74
74
75 id : <id_given_in_input>
75 id : <id_given_in_input>
76 result : {
76 result : {
77 "server_ip_addr": "<ip_from_clien>",
77 "server_ip_addr": "<ip_from_clien>",
78 "user_ips": [
78 "user_ips": [
79 {
79 {
80 "ip_addr": "<ip_with_mask>",
80 "ip_addr": "<ip_with_mask>",
81 "ip_range": ["<start_ip>", "<end_ip>"],
81 "ip_range": ["<start_ip>", "<end_ip>"],
82 },
82 },
83 ...
83 ...
84 ]
84 ]
85 }
85 }
86
86
87
87
88 get_method
88 get_method
89 ----------
89 ----------
90
90
91 .. py:function:: get_method(apiuser, pattern=<Optional:'*'>)
91 .. py:function:: get_method(apiuser, pattern=<Optional:'*'>)
92
92
93 Returns list of all available API methods. By default match pattern
93 Returns list of all available API methods. By default match pattern
94 os "*" but any other pattern can be specified. eg *comment* will return
94 os "*" but any other pattern can be specified. eg *comment* will return
95 all methods with comment inside them. If just single method is matched
95 all methods with comment inside them. If just single method is matched
96 returned data will also include method specification
96 returned data will also include method specification
97
97
98 This command can only be run using an |authtoken| with admin rights to
98 This command can only be run using an |authtoken| with admin rights to
99 the specified repository.
99 the specified repository.
100
100
101 This command takes the following options:
101 This command takes the following options:
102
102
103 :param apiuser: This is filled automatically from the |authtoken|.
103 :param apiuser: This is filled automatically from the |authtoken|.
104 :type apiuser: AuthUser
104 :type apiuser: AuthUser
105 :param pattern: pattern to match method names against
105 :param pattern: pattern to match method names against
106 :type older_then: Optional("*")
106 :type pattern: Optional("*")
107
107
108 Example output:
108 Example output:
109
109
110 .. code-block:: bash
110 .. code-block:: bash
111
111
112 id : <id_given_in_input>
112 id : <id_given_in_input>
113 "result": [
113 "result": [
114 "changeset_comment",
114 "changeset_comment",
115 "comment_pull_request",
115 "comment_pull_request",
116 "comment_commit"
116 "comment_commit"
117 ]
117 ]
118 error : null
118 error : null
119
119
120 .. code-block:: bash
120 .. code-block:: bash
121
121
122 id : <id_given_in_input>
122 id : <id_given_in_input>
123 "result": [
123 "result": [
124 "comment_commit",
124 "comment_commit",
125 {
125 {
126 "apiuser": "<RequiredType>",
126 "apiuser": "<RequiredType>",
127 "comment_type": "<Optional:u'note'>",
127 "comment_type": "<Optional:u'note'>",
128 "commit_id": "<RequiredType>",
128 "commit_id": "<RequiredType>",
129 "message": "<RequiredType>",
129 "message": "<RequiredType>",
130 "repoid": "<RequiredType>",
130 "repoid": "<RequiredType>",
131 "request": "<RequiredType>",
131 "request": "<RequiredType>",
132 "resolves_comment_id": "<Optional:None>",
132 "resolves_comment_id": "<Optional:None>",
133 "status": "<Optional:None>",
133 "status": "<Optional:None>",
134 "userid": "<Optional:<OptionalAttr:apiuser>>"
134 "userid": "<Optional:<OptionalAttr:apiuser>>"
135 }
135 }
136 ]
136 ]
137 error : null
137 error : null
138
138
139
139
140 get_repo_store
140 get_repo_store
141 --------------
141 --------------
142
142
143 .. py:function:: get_repo_store(apiuser)
143 .. py:function:: get_repo_store(apiuser)
144
144
145 Returns the |RCE| repository storage information.
145 Returns the |RCE| repository storage information.
146
146
147 :param apiuser: This is filled automatically from the |authtoken|.
147 :param apiuser: This is filled automatically from the |authtoken|.
148 :type apiuser: AuthUser
148 :type apiuser: AuthUser
149
149
150 Example output:
150 Example output:
151
151
152 .. code-block:: bash
152 .. code-block:: bash
153
153
154 id : <id_given_in_input>
154 id : <id_given_in_input>
155 result : {
155 result : {
156 'modules': [<module name>,...]
156 'modules': [<module name>,...]
157 'py_version': <python version>,
157 'py_version': <python version>,
158 'platform': <platform type>,
158 'platform': <platform type>,
159 'rhodecode_version': <rhodecode version>
159 'rhodecode_version': <rhodecode version>
160 }
160 }
161 error : null
161 error : null
162
162
163
163
164 get_server_info
164 get_server_info
165 ---------------
165 ---------------
166
166
167 .. py:function:: get_server_info(apiuser)
167 .. py:function:: get_server_info(apiuser)
168
168
169 Returns the |RCE| server information.
169 Returns the |RCE| server information.
170
170
171 This includes the running version of |RCE| and all installed
171 This includes the running version of |RCE| and all installed
172 packages. This command takes the following options:
172 packages. This command takes the following options:
173
173
174 :param apiuser: This is filled automatically from the |authtoken|.
174 :param apiuser: This is filled automatically from the |authtoken|.
175 :type apiuser: AuthUser
175 :type apiuser: AuthUser
176
176
177 Example output:
177 Example output:
178
178
179 .. code-block:: bash
179 .. code-block:: bash
180
180
181 id : <id_given_in_input>
181 id : <id_given_in_input>
182 result : {
182 result : {
183 'modules': [<module name>,...]
183 'modules': [<module name>,...]
184 'py_version': <python version>,
184 'py_version': <python version>,
185 'platform': <platform type>,
185 'platform': <platform type>,
186 'rhodecode_version': <rhodecode version>
186 'rhodecode_version': <rhodecode version>
187 }
187 }
188 error : null
188 error : null
189
189
190
190
191 rescan_repos
191 rescan_repos
192 ------------
192 ------------
193
193
194 .. py:function:: rescan_repos(apiuser, remove_obsolete=<Optional:False>)
194 .. py:function:: rescan_repos(apiuser, remove_obsolete=<Optional:False>)
195
195
196 Triggers a rescan of the specified repositories.
196 Triggers a rescan of the specified repositories.
197
197
198 * If the ``remove_obsolete`` option is set, it also deletes repositories
198 * If the ``remove_obsolete`` option is set, it also deletes repositories
199 that are found in the database but not on the file system, so called
199 that are found in the database but not on the file system, so called
200 "clean zombies".
200 "clean zombies".
201
201
202 This command can only be run using an |authtoken| with admin rights to
202 This command can only be run using an |authtoken| with admin rights to
203 the specified repository.
203 the specified repository.
204
204
205 This command takes the following options:
205 This command takes the following options:
206
206
207 :param apiuser: This is filled automatically from the |authtoken|.
207 :param apiuser: This is filled automatically from the |authtoken|.
208 :type apiuser: AuthUser
208 :type apiuser: AuthUser
209 :param remove_obsolete: Deletes repositories from the database that
209 :param remove_obsolete: Deletes repositories from the database that
210 are not found on the filesystem.
210 are not found on the filesystem.
211 :type remove_obsolete: Optional(``True`` | ``False``)
211 :type remove_obsolete: Optional(``True`` | ``False``)
212
212
213 Example output:
213 Example output:
214
214
215 .. code-block:: bash
215 .. code-block:: bash
216
216
217 id : <id_given_in_input>
217 id : <id_given_in_input>
218 result : {
218 result : {
219 'added': [<added repository name>,...]
219 'added': [<added repository name>,...]
220 'removed': [<removed repository name>,...]
220 'removed': [<removed repository name>,...]
221 }
221 }
222 error : null
222 error : null
223
223
224 Example error output:
224 Example error output:
225
225
226 .. code-block:: bash
226 .. code-block:: bash
227
227
228 id : <id_given_in_input>
228 id : <id_given_in_input>
229 result : null
229 result : null
230 error : {
230 error : {
231 'Error occurred during rescan repositories action'
231 'Error occurred during rescan repositories action'
232 }
232 }
233
233
234
234
235 store_exception
236 ---------------
237
238 .. py:function:: store_exception(apiuser, exc_data_json, prefix=<Optional:'rhodecode'>)
239
240 Stores sent exception inside the built-in exception tracker in |RCE| server.
241
242 This command can only be run using an |authtoken| with admin rights to
243 the specified repository.
244
245 This command takes the following options:
246
247 :param apiuser: This is filled automatically from the |authtoken|.
248 :type apiuser: AuthUser
249
250 :param exc_data_json: JSON data with exception e.g
251 {"exc_traceback": "Value `1` is not allowed", "exc_type_name": "ValueError"}
252 :type exc_data_json: JSON data
253
254 :param prefix: prefix for error type, e.g 'rhodecode', 'vcsserver', 'rhodecode-tools'
255 :type prefix: Optional("rhodecode")
256
257 Example output:
258
259 .. code-block:: bash
260
261 id : <id_given_in_input>
262 "result": {
263 "exc_id": 139718459226384,
264 "exc_url": "http://localhost:8080/_admin/settings/exceptions/139718459226384"
265 }
266 error : null
267
268
@@ -1,18 +1,19 b''
1 .. _config-saml-generic-ref:
1 .. _config-saml-generic-ref:
2
2
3
3
4 SAML 2.0 Authentication
4 SAML 2.0 Authentication
5 -----------------------
5 -----------------------
6
6
7
7
8 **This plugin is available only in EE Edition.**
8 **This plugin is available only in EE Edition.**
9
9
10 RhodeCode Supports standard SAML 2.0 SSO for the web-application part.
10 RhodeCode Supports standard SAML 2.0 SSO for the web-application part.
11
11
12 Please check for reference two example providers:
12 Please check for reference two example providers:
13
13
14 .. toctree::
14 .. toctree::
15
15
16 auth-saml-duosecurity
16 auth-saml-duosecurity
17 auth-saml-onelogin
17 auth-saml-onelogin
18 auth-saml-bulk-enroll-users
18
19
@@ -1,140 +1,144 b''
1 .. _ssh-connection:
1 .. _ssh-connection:
2
2
3 SSH Connection
3 SSH Connection
4 --------------
4 --------------
5
5
6 If you wish to connect to your |repos| using SSH protocol, use the
6 If you wish to connect to your |repos| using SSH protocol, use the
7 following instructions.
7 following instructions.
8
8
9 1. Include |RCE| generated `authorized_keys` file into your sshd_config.
9 1. Include |RCE| generated `authorized_keys` file into your sshd_config.
10
10
11 By default a file `authorized_keys_rhodecode` is created containing
11 By default a file `authorized_keys_rhodecode` is created containing
12 configuration and all allowed user connection keys are stored inside.
12 configuration and all allowed user connection keys are stored inside.
13 On each change of stored keys inside |RCE| this file is updated with
13 On each change of stored keys inside |RCE| this file is updated with
14 proper data.
14 proper data.
15
15
16 .. code-block:: bash
16 .. code-block:: bash
17
17
18 # Edit sshd_config file most likely at /etc/ssh/sshd_config
18 # Edit sshd_config file most likely at /etc/ssh/sshd_config
19 # add or edit the AuthorizedKeysFile, and set to use custom files
19 # add or edit the AuthorizedKeysFile, and set to use custom files
20
20
21 AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
21 AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
22
22
23 This way we use a separate file for SSH access and separate one for
23 This way we use a separate file for SSH access and separate one for
24 SSH access to |RCE| repositories.
24 SSH access to |RCE| repositories.
25
25
26
26
27 2. Enable the SSH module on instance.
27 2. Enable the SSH module on instance.
28
28
29 On the server where |RCE| is running executing:
29 On the server where |RCE| is running executing:
30
30
31 .. code-block:: bash
31 .. code-block:: bash
32
32
33 rccontrol enable-module ssh {instance-id}
33 rccontrol enable-module ssh {instance-id}
34
34
35 This will add the following configuration into :file:`rhodecode.ini`.
35 This will add the following configuration into :file:`rhodecode.ini`.
36 This also can be done manually:
36 This also can be done manually:
37
37
38 .. code-block:: ini
38 .. code-block:: ini
39
39
40 ############################################################
40 ############################################################
41 ### SSH Support Settings ###
41 ### SSH Support Settings ###
42 ############################################################
42 ############################################################
43
43
44 ## Defines if a custom authorized_keys file should be created and written on
44 ## Defines if a custom authorized_keys file should be created and written on
45 ## any change user ssh keys. Setting this to false also disables posibility
45 ## any change user ssh keys. Setting this to false also disables posibility
46 ## of adding SSH keys by users from web interface. Super admins can still
46 ## of adding SSH keys by users from web interface. Super admins can still
47 ## manage SSH Keys.
47 ## manage SSH Keys.
48 ssh.generate_authorized_keyfile = true
48 ssh.generate_authorized_keyfile = true
49
49
50 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
50 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
51 # ssh.authorized_keys_ssh_opts =
51 # ssh.authorized_keys_ssh_opts =
52
52
53 ## Path to the authrozied_keys file where the generate entries are placed.
53 ## Path to the authrozied_keys file where the generate entries are placed.
54 ## It is possible to have multiple key files specified in `sshd_config` e.g.
54 ## It is possible to have multiple key files specified in `sshd_config` e.g.
55 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
55 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
56 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
56 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
57
57
58 ## Command to execute the SSH wrapper. The binary is available in the
58 ## Command to execute the SSH wrapper. The binary is available in the
59 ## rhodecode installation directory.
59 ## rhodecode installation directory.
60 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
60 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
61 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
61 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
62
62
63 ## Allow shell when executing the ssh-wrapper command
63 ## Allow shell when executing the ssh-wrapper command
64 ssh.wrapper_cmd_allow_shell = false
64 ssh.wrapper_cmd_allow_shell = false
65
65
66 ## Enables logging, and detailed output send back to the client during SSH
66 ## Enables logging, and detailed output send back to the client during SSH
67 ## operations. Useful for debugging, shouldn't be used in production.
67 ## operations. Useful for debugging, shouldn't be used in production.
68 ssh.enable_debug_logging = false
68 ssh.enable_debug_logging = false
69
69
70 ## Paths to binary executable, by default they are the names, but we can
70 ## Paths to binary executable, by default they are the names, but we can
71 ## override them if we want to use a custom one
71 ## override them if we want to use a custom one
72 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
72 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
73 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
73 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
74 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
74 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
75
75
76 ## Enables SSH key generator web interface. Disabling this still allows users
77 ## to add their own keys.
78 ssh.enable_ui_key_generator = true
79
76
80
77 3. Set base_url for instance to enable proper event handling (Optional):
81 3. Set base_url for instance to enable proper event handling (Optional):
78
82
79 If you wish to have integrations working correctly via SSH please configure
83 If you wish to have integrations working correctly via SSH please configure
80 The Application base_url.
84 The Application base_url.
81
85
82 Use the ``rccontrol status`` command to view instance details.
86 Use the ``rccontrol status`` command to view instance details.
83 Hostname is required for the integration to properly set the instance URL.
87 Hostname is required for the integration to properly set the instance URL.
84
88
85 When your hostname is known (e.g https://code.rhodecode.com) please set it
89 When your hostname is known (e.g https://code.rhodecode.com) please set it
86 inside :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
90 inside :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
87
91
88 add into `[app:main]` section the following configuration:
92 add into `[app:main]` section the following configuration:
89
93
90 .. code-block:: ini
94 .. code-block:: ini
91
95
92 app.base_url = https://code.rhodecode.com
96 app.base_url = https://code.rhodecode.com
93
97
94
98
95 4. Add the public key to your user account for testing.
99 4. Add the public key to your user account for testing.
96 First generate a new key, or use your existing one and have your public key
100 First generate a new key, or use your existing one and have your public key
97 at hand.
101 at hand.
98
102
99 Go to
103 Go to
100 :menuselection:`My Account --> SSH Keys` and add the public key with proper description.
104 :menuselection:`My Account --> SSH Keys` and add the public key with proper description.
101
105
102 This will generate a new entry inside our configured `authorized_keys_rhodecode` file.
106 This will generate a new entry inside our configured `authorized_keys_rhodecode` file.
103
107
104 Test the connection from your local machine using the following example:
108 Test the connection from your local machine using the following example:
105
109
106 .. note::
110 .. note::
107
111
108 In case of connection problems please set
112 In case of connection problems please set
109 `ssh.enable_debug_logging = true` inside the SSH configuration of
113 `ssh.enable_debug_logging = true` inside the SSH configuration of
110 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
114 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
111 Then add, remove your SSH key and try connecting again.
115 Then add, remove your SSH key and try connecting again.
112 Debug logging will be printed to help find the problems on the server side.
116 Debug logging will be printed to help find the problems on the server side.
113
117
114 Test connection using the ssh command from the local machine. Make sure
118 Test connection using the ssh command from the local machine. Make sure
115 to use the use who is running the |RCE| server, and not your username from
119 to use the use who is running the |RCE| server, and not your username from
116 the web interface.
120 the web interface.
117
121
118
122
119 For SVN:
123 For SVN:
120
124
121 .. code-block:: bash
125 .. code-block:: bash
122
126
123 SVN_SSH="ssh -i ~/.ssh/id_rsa_test_ssh_private.key" svn checkout svn+ssh://rhodecode@rc-server/repo_name
127 SVN_SSH="ssh -i ~/.ssh/id_rsa_test_ssh_private.key" svn checkout svn+ssh://rhodecode@rc-server/repo_name
124
128
125 For GIT:
129 For GIT:
126
130
127 .. code-block:: bash
131 .. code-block:: bash
128
132
129 GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_test_ssh_private.key' git clone ssh://rhodecode@rc-server/repo_name
133 GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_test_ssh_private.key' git clone ssh://rhodecode@rc-server/repo_name
130
134
131 For Mercurial:
135 For Mercurial:
132
136
133 .. code-block:: bash
137 .. code-block:: bash
134
138
135 Add to hgrc:
139 Add to hgrc:
136
140
137 [ui]
141 [ui]
138 ssh = ssh -C -i ~/.ssh/id_rsa_test_ssh_private.key
142 ssh = ssh -C -i ~/.ssh/id_rsa_test_ssh_private.key
139
143
140 hg clone ssh://rhodecode@rc-server/repo_name
144 hg clone ssh://rhodecode@rc-server/repo_name
@@ -1,226 +1,243 b''
1 .. _dev-setup:
1 .. _dev-setup:
2
2
3 ===================
3 ===================
4 Development setup
4 Development setup
5 ===================
5 ===================
6
6
7
7
8 RhodeCode Enterprise runs inside a Nix managed environment. This ensures build
8 RhodeCode Enterprise runs inside a Nix managed environment. This ensures build
9 environment dependencies are correctly declared and installed during setup.
9 environment dependencies are correctly declared and installed during setup.
10 It also enables atomic upgrades, rollbacks, and multiple instances of RhodeCode
10 It also enables atomic upgrades, rollbacks, and multiple instances of RhodeCode
11 Enterprise running with isolation.
11 Enterprise running with isolation.
12
12
13 To set up RhodeCode Enterprise inside the Nix environment, use the following steps:
13 To set up RhodeCode Enterprise inside the Nix environment, use the following steps:
14
14
15
15
16
16
17 Setup Nix Package Manager
17 Setup Nix Package Manager
18 -------------------------
18 -------------------------
19
19
20 To install the Nix Package Manager, please run::
20 To install the Nix Package Manager, please run::
21
21
22 $ curl https://nixos.org/nix/install | sh
22 $ curl https://nixos.org/nix/install | sh
23
23
24 or go to https://nixos.org/nix/ and follow the installation instructions.
24 or go to https://nixos.org/nix/ and follow the installation instructions.
25 Once this is correctly set up on your system, you should be able to use the
25 Once this is correctly set up on your system, you should be able to use the
26 following commands:
26 following commands:
27
27
28 * `nix-env`
28 * `nix-env`
29
29
30 * `nix-shell`
30 * `nix-shell`
31
31
32
32
33 .. tip::
33 .. tip::
34
34
35 Update your channels frequently by running ``nix-channel --update``.
35 Update your channels frequently by running ``nix-channel --update``.
36
36
37 .. note::
37 .. note::
38
38
39 To uninstall nix run the following:
39 To uninstall nix run the following:
40
40
41 remove the . "$HOME/.nix-profile/etc/profile.d/nix.sh" line in your ~/.profile or ~/.bash_profile
41 remove the . "$HOME/.nix-profile/etc/profile.d/nix.sh" line in your ~/.profile or ~/.bash_profile
42 rm -rf $HOME/{.nix-channels,.nix-defexpr,.nix-profile,.config/nixpkgs}
42 rm -rf $HOME/{.nix-channels,.nix-defexpr,.nix-profile,.config/nixpkgs}
43 sudo rm -rf /nix
43 sudo rm -rf /nix
44
44
45 Switch nix to the latest STABLE channel
45 Switch nix to the latest STABLE channel
46 ---------------------------------------
46 ---------------------------------------
47
47
48 run::
48 run::
49
49
50 nix-channel --add https://nixos.org/channels/nixos-18.03 nixpkgs
50 nix-channel --add https://nixos.org/channels/nixos-18.03 nixpkgs
51
51
52 Followed by::
52 Followed by::
53
53
54 nix-channel --update
54 nix-channel --update
55 nix-env -i nix-2.0.4
55
56
56
57
57 Install required binaries
58 Install required binaries
58 -------------------------
59 -------------------------
59
60
60 We need some handy tools first.
61 We need some handy tools first.
61
62
62 run::
63 run::
63
64
64 nix-env -i nix-prefetch-hg
65 nix-env -i nix-prefetch-hg
65 nix-env -i nix-prefetch-git
66 nix-env -i nix-prefetch-git
66
67
67
68
69 Speed up JS build by installing PhantomJS
70 -----------------------------------------
71
72 PhantomJS will be downloaded each time nix-shell is invoked. To speed this by
73 setting already downloaded version do this::
74
75 nix-env -i phantomjs-2.1.1
76
77 # and set nix bin path
78 export PATH=$PATH:~/.nix-profile/bin
79
80
68 Clone the required repositories
81 Clone the required repositories
69 -------------------------------
82 -------------------------------
70
83
71 After Nix is set up, clone the RhodeCode Enterprise Community Edition and
84 After Nix is set up, clone the RhodeCode Enterprise Community Edition and
72 RhodeCode VCSServer repositories into the same directory.
85 RhodeCode VCSServer repositories into the same directory.
73 RhodeCode currently is using Mercurial Version Control System, please make sure
86 RhodeCode currently is using Mercurial Version Control System, please make sure
74 you have it installed before continuing.
87 you have it installed before continuing.
75
88
76 To obtain the required sources, use the following commands::
89 To obtain the required sources, use the following commands::
77
90
78 mkdir rhodecode-develop && cd rhodecode-develop
91 mkdir rhodecode-develop && cd rhodecode-develop
79 hg clone https://code.rhodecode.com/rhodecode-enterprise-ce
92 hg clone -u default https://code.rhodecode.com/rhodecode-enterprise-ce
80 hg clone https://code.rhodecode.com/rhodecode-vcsserver
93 hg clone -u default https://code.rhodecode.com/rhodecode-vcsserver
81
94
82 .. note::
95 .. note::
83
96
84 If you cannot clone the repository, please contact us via support@rhodecode.com
97 If you cannot clone the repository, please contact us via support@rhodecode.com
85
98
86
99
87 Install some required libraries
100 Install some required libraries
88 -------------------------------
101 -------------------------------
89
102
90 There are some required drivers and dev libraries that we need to install to
103 There are some required drivers and dev libraries that we need to install to
91 test RhodeCode under different types of databases. For example in Ubuntu we
104 test RhodeCode under different types of databases. For example in Ubuntu we
92 need to install the following.
105 need to install the following.
93
106
94 required libraries::
107 required libraries::
95
108
109 # svn related
96 sudo apt-get install libapr1-dev libaprutil1-dev
110 sudo apt-get install libapr1-dev libaprutil1-dev
97 sudo apt-get install libsvn-dev
111 sudo apt-get install libsvn-dev
112 # libcurl required too
113 sudo apt-get install libcurl4-openssl-dev
114 # mysql/pg server for development, optional
98 sudo apt-get install mysql-server libmysqlclient-dev
115 sudo apt-get install mysql-server libmysqlclient-dev
99 sudo apt-get install postgresql postgresql-contrib libpq-dev
116 sudo apt-get install postgresql postgresql-contrib libpq-dev
100 sudo apt-get install libcurl4-openssl-dev
117
101
118
102
119
103 Enter the Development Shell
120 Enter the Development Shell
104 ---------------------------
121 ---------------------------
105
122
106 The final step is to start the development shells. To do this, run the
123 The final step is to start the development shells. To do this, run the
107 following command from inside the cloned repository::
124 following command from inside the cloned repository::
108
125
109 #first, the vcsserver
126 # first, the vcsserver
110 cd ~/rhodecode-vcsserver
127 cd ~/rhodecode-vcsserver
111 nix-shell
128 nix-shell
112
129
113 # then enterprise sources
130 # then enterprise sources
114 cd ~/rhodecode-enterprise-ce
131 cd ~/rhodecode-enterprise-ce
115 nix-shell
132 nix-shell
116
133
117 .. note::
134 .. note::
118
135
119 On the first run, this will take a while to download and optionally compile
136 On the first run, this will take a while to download and optionally compile
120 a few things. The following runs will be faster. The development shell works
137 a few things. The following runs will be faster. The development shell works
121 fine on both MacOS and Linux platforms.
138 fine on both MacOS and Linux platforms.
122
139
123
140
124 Create config.nix for development
141 Create config.nix for development
125 ---------------------------------
142 ---------------------------------
126
143
127 In order to run proper tests and setup linking across projects, a config.nix
144 In order to run proper tests and setup linking across projects, a config.nix
128 file needs to be setup::
145 file needs to be setup::
129
146
130 # create config
147 # create config
131 mkdir -p ~/.nixpkgs
148 mkdir -p ~/.nixpkgs
132 touch ~/.nixpkgs/config.nix
149 touch ~/.nixpkgs/config.nix
133
150
134 # put the below content into the ~/.nixpkgs/config.nix file
151 # put the below content into the ~/.nixpkgs/config.nix file
135 # adjusts, the path to where you cloned your repositories.
152 # adjusts, the path to where you cloned your repositories.
136
153
137 {
154 {
138 rc = {
155 rc = {
139 sources = {
156 sources = {
140 rhodecode-vcsserver = "/home/dev/rhodecode-vcsserver";
157 rhodecode-vcsserver = "/home/dev/rhodecode-vcsserver";
141 rhodecode-enterprise-ce = "/home/dev/rhodecode-enterprise-ce";
158 rhodecode-enterprise-ce = "/home/dev/rhodecode-enterprise-ce";
142 rhodecode-enterprise-ee = "/home/dev/rhodecode-enterprise-ee";
159 rhodecode-enterprise-ee = "/home/dev/rhodecode-enterprise-ee";
143 };
160 };
144 };
161 };
145 }
162 }
146
163
147
164
148
165
149 Creating a Development Configuration
166 Creating a Development Configuration
150 ------------------------------------
167 ------------------------------------
151
168
152 To create a development environment for RhodeCode Enterprise,
169 To create a development environment for RhodeCode Enterprise,
153 use the following steps:
170 use the following steps:
154
171
155 1. Create a copy of vcsserver config:
172 1. Create a copy of vcsserver config:
156 `cp ~/rhodecode-vcsserver/configs/development.ini ~/rhodecode-vcsserver/configs/dev.ini`
173 `cp ~/rhodecode-vcsserver/configs/development.ini ~/rhodecode-vcsserver/configs/dev.ini`
157 2. Create a copy of rhodocode config:
174 2. Create a copy of rhodocode config:
158 `cp ~/rhodecode-enterprise-ce/configs/development.ini ~/rhodecode-enterprise-ce/configs/dev.ini`
175 `cp ~/rhodecode-enterprise-ce/configs/development.ini ~/rhodecode-enterprise-ce/configs/dev.ini`
159 3. Adjust the configuration settings to your needs if needed.
176 3. Adjust the configuration settings to your needs if needed.
160
177
161 .. note::
178 .. note::
162
179
163 It is recommended to use the name `dev.ini` since it's included in .hgignore file.
180 It is recommended to use the name `dev.ini` since it's included in .hgignore file.
164
181
165
182
166 Setup the Development Database
183 Setup the Development Database
167 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
168
185
169 To create a development database, use the following example. This is a one
186 To create a development database, use the following example. This is a one
170 time operation executed from the nix-shell of rhodecode-enterprise-ce sources ::
187 time operation executed from the nix-shell of rhodecode-enterprise-ce sources ::
171
188
172 rc-setup-app dev.ini \
189 rc-setup-app dev.ini \
173 --user=admin --password=secret \
190 --user=admin --password=secret \
174 --email=admin@example.com \
191 --email=admin@example.com \
175 --repos=~/my_dev_repos
192 --repos=~/my_dev_repos
176
193
177
194
178 Compile CSS and JavaScript
195 Compile CSS and JavaScript
179 ^^^^^^^^^^^^^^^^^^^^^^^^^^
196 ^^^^^^^^^^^^^^^^^^^^^^^^^^
180
197
181 To use the application's frontend and prepare it for production deployment,
198 To use the application's frontend and prepare it for production deployment,
182 you will need to compile the CSS and JavaScript with Grunt.
199 you will need to compile the CSS and JavaScript with Grunt.
183 This is easily done from within the nix-shell using the following command::
200 This is easily done from within the nix-shell using the following command::
184
201
185 grunt
202 make web-build
186
203
187 When developing new features you will need to recompile following any
204 When developing new features you will need to recompile following any
188 changes made to the CSS or JavaScript files when developing the code::
205 changes made to the CSS or JavaScript files when developing the code::
189
206
190 grunt watch
207 grunt watch
191
208
192 This prepares the development (with comments/whitespace) versions of files.
209 This prepares the development (with comments/whitespace) versions of files.
193
210
194 Start the Development Servers
211 Start the Development Servers
195 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
212 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
196
213
197 From the rhodecode-vcsserver directory, start the development server in another
214 From the rhodecode-vcsserver directory, start the development server in another
198 nix-shell, using the following command::
215 nix-shell, using the following command::
199
216
200 pserve configs/dev.ini
217 pserve configs/dev.ini
201
218
202 In the adjacent nix-shell which you created for your development server, you may
219 In the adjacent nix-shell which you created for your development server, you may
203 now start CE with the following command::
220 now start CE with the following command::
204
221
205
222
206 pserve --reload configs/dev.ini
223 pserve --reload configs/dev.ini
207
224
208 .. note::
225 .. note::
209
226
210 `--reload` flag will automatically reload the server when source file changes.
227 `--reload` flag will automatically reload the server when source file changes.
211
228
212
229
213 Run the Environment Tests
230 Run the Environment Tests
214 ^^^^^^^^^^^^^^^^^^^^^^^^^
231 ^^^^^^^^^^^^^^^^^^^^^^^^^
215
232
216 Please make sure that the tests are passing to verify that your environment is
233 Please make sure that the tests are passing to verify that your environment is
217 set up correctly. RhodeCode uses py.test to run tests.
234 set up correctly. RhodeCode uses py.test to run tests.
218 While your instance is running, start a new nix-shell and simply run
235 While your instance is running, start a new nix-shell and simply run
219 ``make test`` to run the basic test suite.
236 ``make test`` to run the basic test suite.
220
237
221
238
222 Need Help?
239 Need Help?
223 ^^^^^^^^^^
240 ^^^^^^^^^^
224
241
225 Join us on Slack via https://rhodecode.com/join or post questions in our
242 Join us on Slack via https://rhodecode.com/join or post questions in our
226 Community Portal at https://community.rhodecode.com
243 Community Portal at https://community.rhodecode.com
@@ -1,44 +1,44 b''
1 .. _integrations-rcextensions:
1 .. _integrations-rcextensions:
2
2
3
3
4 rcextensions integrations
4 rcextensions integrations
5 =========================
5 =========================
6
6
7
7
8 Since RhodeCode 4.14 release rcextensions aren't part of rhodecode-tools, and instead
8 Since RhodeCode 4.14 release rcextensions aren't part of rhodecode-tools, and instead
9 they are shipped with the new or upgraded installations.
9 they are shipped with the new or upgraded installations.
10
10
11 The rcextensions template `rcextensions.tmpl` is created in the `etc/` directory
11 The rcextensions template `rcextensions.tmpl` is created in the `etc/` directory
12 of enterprise or community installation. It's always re-created and updated on upgrades.
12 of enterprise or community installation. It's always re-created and updated on upgrades.
13
13
14
14
15 Activating rcextensions
15 Activating rcextensions
16 +++++++++++++++++++++++
16 +++++++++++++++++++++++
17
17
18 To activate rcextensions simply copy or rename the created template rcextensions
18 To activate rcextensions simply copy or rename the created template rcextensions
19 into the path where the rhodecode.ini file is located::
19 into the path where the rhodecode.ini file is located::
20
20
21 pushd ~/rccontrol/enterprise-1/
21 pushd ~/.rccontrol/enterprise-1/
22 or
22 or
23 pushd ~/rccontrol/community-1/
23 pushd ~/.rccontrol/community-1/
24
24
25 mv etc/rcextensions.tmpl rcextensions
25 mv profile/etc/rcextensions.tmpl rcextensions
26
26
27
27
28 rcextensions are loaded when |RCE| starts. So a restart is required after activation or
28 rcextensions are loaded when |RCE| starts. So a restart is required after activation or
29 change of code in rcextensions.
29 change of code in rcextensions.
30
30
31 Simply restart only the enterprise/community instance::
31 Simply restart only the enterprise/community instance::
32
32
33 rccontrol restart enterprise-1
33 rccontrol restart enterprise-1
34 or
34 or
35 rccontrol restart community-1
35 rccontrol restart community-1
36
36
37
37
38 Example usage
38 Example usage
39 +++++++++++++
39 +++++++++++++
40
40
41
41
42 To see examples of usage please check the examples directory under:
42 To see examples of usage please check the examples directory under:
43
43
44 https://code.rhodecode.com/rhodecode-enterprise-ce/files/stable/rhodecode/config/rcextensions/examples
44 https://code.rhodecode.com/rhodecode-enterprise-ce/files/stable/rhodecode/config/rcextensions/examples
@@ -1,114 +1,114 b''
1 |RCE| 4.14.0 |RNS|
1 |RCE| 4.14.0 |RNS|
2 ------------------
2 ------------------
3
3
4 Release Date
4 Release Date
5 ^^^^^^^^^^^^
5 ^^^^^^^^^^^^
6
6
7 - 2018-11-02
7 - 2018-11-02
8
8
9
9
10 New Features
10 New Features
11 ^^^^^^^^^^^^
11 ^^^^^^^^^^^^
12
12
13 - Diffs: expose range diff inside the PR view. It's now possible to show
13 - Diffs: expose range diff inside the PR view. It's now possible to show
14 commit-per-commit view of changes in pull request.
14 commit-per-commit view of changes in pull request.
15 - Diffs: new sticky context bar.
15 - Diffs: new sticky context bar.
16 When browsing diffs we show file path of the current diff so users are aware all the time
16 When browsing diffs we show file path of the current diff so users are aware all the time
17 what file they are reviewing.
17 what file they are reviewing.
18 - Diffs: added quick file selector in diffs views. Now it's possible to select a file
18 - Diffs: added quick file selector in diffs views. Now it's possible to select a file
19 in large diffs from the sticky header for quicker access to certain interesting files
19 in large diffs from the sticky header for quicker access to certain interesting files
20 in diffs.
20 in diffs.
21 - Diffs: introducing diff menu for whitespace toggle and context changes.
21 - Diffs: introducing diff menu for whitespace toggle and context changes.
22 It's now possible to show/hide whitespace changes and toggle the file context in
22 It's now possible to show/hide whitespace changes and toggle the file context in
23 all diff places including pull requests.
23 all diff places including pull requests.
24 - Comments: allow commenting on empty files without content.
24 - Comments: allow commenting on empty files without content.
25 - Repositories: added option to archive repositories instead of deleting them.
25 - Repositories: added option to archive repositories instead of deleting them.
26 Archived repositories are useful for future auditing, but they are read-only.
26 Archived repositories are useful for future auditing, but they are read-only.
27 - rcextensions: new rcextensions. We're introducing new `rcextensions` that will be base
27 - rcextensions: new rcextensions. We're introducing new `rcextensions` that will be base
28 for future low-level integrations. It's now possible to expose nice messages back
28 for future low-level integrations. It's now possible to expose nice messages back
29 to the users when using `rcextensions`.
29 to the users when using `rcextensions`.
30 - Summary page: slightly re-organize summary page for better user experience.
30 - Summary page: slightly re-organize summary page for better user experience.
31
31
32
32
33 General
33 General
34 ^^^^^^^
34 ^^^^^^^
35
35
36 - Mailing: switched from custom library to pyramid_mailer with python3 compatibility.
36 - Mailing: switched from custom library to pyramid_mailer with python3 compatibility.
37 - Frontend: Switched to Polymer 3.0.
37 - Frontend: Switched to Polymer 3.0.
38 - Frontend: fixed problems with IE11 and brought back support for that browser.
38 - Frontend: fixed problems with IE11 and brought back support for that browser.
39 - Git: use a fetch_sync based creation of remote repositories.
39 - Git: use a fetch_sync based creation of remote repositories.
40 This fixes problems with importing from Bitbucket.
40 This fixes problems with importing from Bitbucket.
41 - Comments: update comments email templates.
41 - Comments: update comments email templates.
42 - Packaging: only wrap external dependency scripts. This makes execution of scripts
42 - Packaging: only wrap external dependency scripts. This makes execution of scripts
43 roughly 5x faster due to much smaller PATH tree.
43 roughly 5x faster due to much smaller PATH tree.
44 - HTTP: use application wide detection of invalid bytes sent via URL/GET/POST data.
44 - HTTP: use application wide detection of invalid bytes sent via URL/GET/POST data.
45 - Fonts/UI: use consistent fonts across the whole application.
45 - Fonts/UI: use consistent fonts across the whole application.
46 Few places had non-standard custom fonts.
46 Few places had non-standard custom fonts.
47 - Google: updated google auth plugin with latest API changes.
47 - Google: updated google auth plugin with latest API changes.
48 - Core: handle edge case requesting matched routes but with hg/svn/git or api context.
48 - Core: handle edge case requesting matched routes but with hg/svn/git or api context.
49 - Dependencies: bumped rhodecode-tools to 1.0.0 release using Apache2 license.
49 - Dependencies: bumped rhodecode-tools to 1.0.0 release using Apache2 license.
50 - Dependencies: atomicwrites==1.2.1
50 - Dependencies: atomicwrites==1.2.1
51 - Dependencies: attrs==18.2.0
51 - Dependencies: attrs==18.2.0
52 - Dependencies: dogpile.cache==0.6.7
52 - Dependencies: dogpile.cache==0.6.7
53 - Dependencies: psutil==5.4.7
53 - Dependencies: psutil==5.4.7
54 - Dependencies: pathlib2==2.3.2
54 - Dependencies: pathlib2==2.3.2
55 - Dependencies: subprocess32==3.5.2
55 - Dependencies: subprocess32==3.5.2
56 - Dependencies: gevent==1.3.6
56 - Dependencies: gevent==1.3.6
57 - Dependencies: greenlet==0.4.15
57 - Dependencies: greenlet==0.4.15
58 - Dependencies: pytest==3.8.2
58 - Dependencies: pytest==3.8.2
59 - Dependencies: py==1.6.0
59 - Dependencies: py==1.6.0
60 - Dependencies: pytest-cov==2.6.0
60 - Dependencies: pytest-cov==2.6.0
61 - Dependencies: pytest-timeout==1.3.2
61 - Dependencies: pytest-timeout==1.3.2
62 - Dependencies: coverage==4.5.1
62 - Dependencies: coverage==4.5.1
63 - Dependencies: psycopg2==2.7.5
63 - Dependencies: psycopg2==2.7.5
64
64
65
65
66 Security
66 Security
67 ^^^^^^^^
67 ^^^^^^^^
68
68
69 - RST: improve Javascript RST sandbox.
69 - RST: improve Javascript RST sandbox.
70 - Jupyter: sanitize markdown cells similar as we do for our own markdown cleanup.
70 - Jupyter: sanitize markdown cells similar as we do for our own markdown cleanup.
71
71
72
72
73 Performance
73 Performance
74 ^^^^^^^^^^^
74 ^^^^^^^^^^^
75
75
76 - SSH: improved SSH wrapper execution speed by using optimized binary script wrapping.
76 - SSH: improved SSH wrapper execution speed by using optimized binary script wrapping.
77 - Core: reduced font and JavaScript load times.
77 - Core: reduced font and JavaScript load times.
78
78
79
79
80 Fixes
80 Fixes
81 ^^^^^
81 ^^^^^
82
82
83 - Comments: ensure we always display unmatched comments.
83 - Comments: ensure we always display unmatched comments.
84 - Branch Permissions: fixed changing rule order for branch permissions.
84 - Branch Permissions: fixed changing rule order for branch permissions.
85 - Users: ensure get_first_superadmin actually gets the 1st created super-admin.
85 - Users: ensure get_first_superadmin actually gets the 1st created super-admin.
86 - Users: when deleting users ensure we also clear personal flag.
86 - Users: when deleting users ensure we also clear personal flag.
87 This fixes some problems with multiple personal groups.
87 This fixes some problems with multiple personal groups.
88 - Diffs: disable the error border on highlight errors.
88 - Diffs: disable the error border on highlight errors.
89 - Integrations: implement retry to HTTP[S] calls for integrations.
89 - Integrations: implement retry to HTTP[S] calls for integrations.
90 Web parts will do a 3x retry call in case service is not reachable or
90 Web parts will do a 3x retry call in case service is not reachable or
91 responds with 5XX codes.
91 responds with 5XX codes.
92 - Git: fixed pull-request updates in case branch names are the same as the file names.
92 - Git: fixed pull-request updates in case branch names are the same as the file names.
93 - Supervisor: add patch for older kernel support.
93 - Supervisor: add patch for older kernel support.
94 - Compare: fixed file after/before links in compare view for cross repo compare.
94 - Compare: fixed file after/before links in compare view for cross repo compare.
95 - Emails: improve fonts and rendering of email HTML.
95 - Emails: improve fonts and rendering of email HTML.
96 - Permissions: flush members of user groups permissions to clear caches.
96 - Permissions: flush members of user groups permissions to clear caches.
97 - Repository: add check preventing of removal of repo with attached pull requests. Users
97 - Repository: add check preventing of removal of repo with attached pull requests. Users
98 should use the new archive repo function instead.
98 should use the new archive repo function instead.
99
99
100
100
101 Upgrade notes
101 Upgrade notes
102 ^^^^^^^^^^^^^
102 ^^^^^^^^^^^^^
103
103
104 - In this release, we're shipping a new `rcextensions`. The changes made are
104 - In this release, we're shipping a new `rcextensions`. The changes made are
105 backward incompatible. An update of `rcextensions` is required
105 backward incompatible. An update of `rcextensions` is required
106 prior to using them again. Please check the new `rcextensions.tmpl` directory
106 prior to using them again. Please check the new `rcextensions.tmpl` directory
107 located in `etc/rcextensions.tmpl` in your instance installation path.
107 located in `profile/etc/rcextensions.tmpl` in your instance installation path.
108 Old code should be 100% portable by just copy&paste to the right function.
108 Old code should be 100% portable by just copy&paste to the right function.
109
109
110 - Mailing: We introduced a new mailing library. The older options should be compatible and
110 - Mailing: We introduced a new mailing library. The older options should be compatible and
111 generally, old configuration doesn't need any changes in order to send emails.
111 generally, old configuration doesn't need any changes in order to send emails.
112 We, however, encourage users to re-check mailing setup in case of some more
112 We, however, encourage users to re-check mailing setup in case of some more
113 sophisticated email setups.
113 sophisticated email setups.
114 There's a possibility to send a test email from admin > settings > email section.
114 There's a possibility to send a test email from admin > settings > email section.
@@ -1,128 +1,129 b''
1 .. _rhodecode-release-notes-ref:
1 .. _rhodecode-release-notes-ref:
2
2
3 Release Notes
3 Release Notes
4 =============
4 =============
5
5
6 |RCE| 4.x Versions
6 |RCE| 4.x Versions
7 ------------------
7 ------------------
8
8
9 .. toctree::
9 .. toctree::
10 :maxdepth: 1
10 :maxdepth: 1
11
11
12 release-notes-4.16.0.rst
12 release-notes-4.15.2.rst
13 release-notes-4.15.2.rst
13 release-notes-4.15.1.rst
14 release-notes-4.15.1.rst
14 release-notes-4.15.0.rst
15 release-notes-4.15.0.rst
15 release-notes-4.14.1.rst
16 release-notes-4.14.1.rst
16 release-notes-4.14.0.rst
17 release-notes-4.14.0.rst
17 release-notes-4.13.3.rst
18 release-notes-4.13.3.rst
18 release-notes-4.13.2.rst
19 release-notes-4.13.2.rst
19 release-notes-4.13.1.rst
20 release-notes-4.13.1.rst
20 release-notes-4.13.0.rst
21 release-notes-4.13.0.rst
21 release-notes-4.12.4.rst
22 release-notes-4.12.4.rst
22 release-notes-4.12.3.rst
23 release-notes-4.12.3.rst
23 release-notes-4.12.2.rst
24 release-notes-4.12.2.rst
24 release-notes-4.12.1.rst
25 release-notes-4.12.1.rst
25 release-notes-4.12.0.rst
26 release-notes-4.12.0.rst
26 release-notes-4.11.6.rst
27 release-notes-4.11.6.rst
27 release-notes-4.11.5.rst
28 release-notes-4.11.5.rst
28 release-notes-4.11.4.rst
29 release-notes-4.11.4.rst
29 release-notes-4.11.3.rst
30 release-notes-4.11.3.rst
30 release-notes-4.11.2.rst
31 release-notes-4.11.2.rst
31 release-notes-4.11.1.rst
32 release-notes-4.11.1.rst
32 release-notes-4.11.0.rst
33 release-notes-4.11.0.rst
33 release-notes-4.10.6.rst
34 release-notes-4.10.6.rst
34 release-notes-4.10.5.rst
35 release-notes-4.10.5.rst
35 release-notes-4.10.4.rst
36 release-notes-4.10.4.rst
36 release-notes-4.10.3.rst
37 release-notes-4.10.3.rst
37 release-notes-4.10.2.rst
38 release-notes-4.10.2.rst
38 release-notes-4.10.1.rst
39 release-notes-4.10.1.rst
39 release-notes-4.10.0.rst
40 release-notes-4.10.0.rst
40 release-notes-4.9.1.rst
41 release-notes-4.9.1.rst
41 release-notes-4.9.0.rst
42 release-notes-4.9.0.rst
42 release-notes-4.8.0.rst
43 release-notes-4.8.0.rst
43 release-notes-4.7.2.rst
44 release-notes-4.7.2.rst
44 release-notes-4.7.1.rst
45 release-notes-4.7.1.rst
45 release-notes-4.7.0.rst
46 release-notes-4.7.0.rst
46 release-notes-4.6.1.rst
47 release-notes-4.6.1.rst
47 release-notes-4.6.0.rst
48 release-notes-4.6.0.rst
48 release-notes-4.5.2.rst
49 release-notes-4.5.2.rst
49 release-notes-4.5.1.rst
50 release-notes-4.5.1.rst
50 release-notes-4.5.0.rst
51 release-notes-4.5.0.rst
51 release-notes-4.4.2.rst
52 release-notes-4.4.2.rst
52 release-notes-4.4.1.rst
53 release-notes-4.4.1.rst
53 release-notes-4.4.0.rst
54 release-notes-4.4.0.rst
54 release-notes-4.3.1.rst
55 release-notes-4.3.1.rst
55 release-notes-4.3.0.rst
56 release-notes-4.3.0.rst
56 release-notes-4.2.1.rst
57 release-notes-4.2.1.rst
57 release-notes-4.2.0.rst
58 release-notes-4.2.0.rst
58 release-notes-4.1.2.rst
59 release-notes-4.1.2.rst
59 release-notes-4.1.1.rst
60 release-notes-4.1.1.rst
60 release-notes-4.1.0.rst
61 release-notes-4.1.0.rst
61 release-notes-4.0.1.rst
62 release-notes-4.0.1.rst
62 release-notes-4.0.0.rst
63 release-notes-4.0.0.rst
63
64
64 |RCE| 3.x Versions
65 |RCE| 3.x Versions
65 ------------------
66 ------------------
66
67
67 .. toctree::
68 .. toctree::
68 :maxdepth: 1
69 :maxdepth: 1
69
70
70 release-notes-3.8.4.rst
71 release-notes-3.8.4.rst
71 release-notes-3.8.3.rst
72 release-notes-3.8.3.rst
72 release-notes-3.8.2.rst
73 release-notes-3.8.2.rst
73 release-notes-3.8.1.rst
74 release-notes-3.8.1.rst
74 release-notes-3.8.0.rst
75 release-notes-3.8.0.rst
75 release-notes-3.7.1.rst
76 release-notes-3.7.1.rst
76 release-notes-3.7.0.rst
77 release-notes-3.7.0.rst
77 release-notes-3.6.1.rst
78 release-notes-3.6.1.rst
78 release-notes-3.6.0.rst
79 release-notes-3.6.0.rst
79 release-notes-3.5.2.rst
80 release-notes-3.5.2.rst
80 release-notes-3.5.1.rst
81 release-notes-3.5.1.rst
81 release-notes-3.5.0.rst
82 release-notes-3.5.0.rst
82 release-notes-3.4.1.rst
83 release-notes-3.4.1.rst
83 release-notes-3.4.0.rst
84 release-notes-3.4.0.rst
84 release-notes-3.3.4.rst
85 release-notes-3.3.4.rst
85 release-notes-3.3.3.rst
86 release-notes-3.3.3.rst
86 release-notes-3.3.2.rst
87 release-notes-3.3.2.rst
87 release-notes-3.3.1.rst
88 release-notes-3.3.1.rst
88 release-notes-3.3.0.rst
89 release-notes-3.3.0.rst
89 release-notes-3.2.3.rst
90 release-notes-3.2.3.rst
90 release-notes-3.2.2.rst
91 release-notes-3.2.2.rst
91 release-notes-3.2.1.rst
92 release-notes-3.2.1.rst
92 release-notes-3.2.0.rst
93 release-notes-3.2.0.rst
93 release-notes-3.1.1.rst
94 release-notes-3.1.1.rst
94 release-notes-3.1.0.rst
95 release-notes-3.1.0.rst
95 release-notes-3.0.2.rst
96 release-notes-3.0.2.rst
96 release-notes-3.0.1.rst
97 release-notes-3.0.1.rst
97 release-notes-3.0.0.rst
98 release-notes-3.0.0.rst
98
99
99 |RCE| 2.x Versions
100 |RCE| 2.x Versions
100 ------------------
101 ------------------
101
102
102 .. toctree::
103 .. toctree::
103 :maxdepth: 1
104 :maxdepth: 1
104
105
105 release-notes-2.2.8.rst
106 release-notes-2.2.8.rst
106 release-notes-2.2.7.rst
107 release-notes-2.2.7.rst
107 release-notes-2.2.6.rst
108 release-notes-2.2.6.rst
108 release-notes-2.2.5.rst
109 release-notes-2.2.5.rst
109 release-notes-2.2.4.rst
110 release-notes-2.2.4.rst
110 release-notes-2.2.3.rst
111 release-notes-2.2.3.rst
111 release-notes-2.2.2.rst
112 release-notes-2.2.2.rst
112 release-notes-2.2.1.rst
113 release-notes-2.2.1.rst
113 release-notes-2.2.0.rst
114 release-notes-2.2.0.rst
114 release-notes-2.1.0.rst
115 release-notes-2.1.0.rst
115 release-notes-2.0.2.rst
116 release-notes-2.0.2.rst
116 release-notes-2.0.1.rst
117 release-notes-2.0.1.rst
117 release-notes-2.0.0.rst
118 release-notes-2.0.0.rst
118
119
119 |RCE| 1.x Versions
120 |RCE| 1.x Versions
120 ------------------
121 ------------------
121
122
122 .. toctree::
123 .. toctree::
123 :maxdepth: 1
124 :maxdepth: 1
124
125
125 release-notes-1.7.2.rst
126 release-notes-1.7.2.rst
126 release-notes-1.7.1.rst
127 release-notes-1.7.1.rst
127 release-notes-1.7.0.rst
128 release-notes-1.7.0.rst
128 release-notes-1.6.0.rst
129 release-notes-1.6.0.rst
@@ -1,578 +1,578 b''
1 .. _tools-cli:
1 .. _tools-cli:
2
2
3 |RCT| CLI
3 |RCT| CLI
4 ---------
4 ---------
5
5
6 The commands available with |RCT| can be split into three categories:
6 The commands available with |RCT| can be split into three categories:
7
7
8 - Remotely executable commands that can be run from your local machine once you
8 - Remotely executable commands that can be run from your local machine once you
9 have your connection details to |RCE| configured.
9 have your connection details to |RCE| configured.
10 - Locally executable commands the can be run on the server to carry out
10 - Locally executable commands the can be run on the server to carry out
11 general maintenance.
11 general maintenance.
12 - Local configuration commands used to help set up your |RCT| configuration.
12 - Local configuration commands used to help set up your |RCT| configuration.
13
13
14
14
15 rhodecode-tools
15 rhodecode-tools
16 ---------------
16 ---------------
17
17
18 Use |RCT| to setup automation, run the indexer, and install extensions for
18 Use |RCT| to setup automation, run the indexer, and install extensions for
19 your |RCE| instances. Options:
19 your |RCE| instances. Options:
20
20
21 .. rst-class:: dl-horizontal
21 .. rst-class:: dl-horizontal
22
22
23 \ - -apihost <api_host>
23 \ - -apihost <api_host>
24 Set the API host value.
24 Set the API host value.
25
25
26 \ - -apikey <apikey_value>
26 \ - -apikey <apikey_value>
27 Set the API key value.
27 Set the API key value.
28
28
29 \-c, - -config <config_file>
29 \-c, - -config <config_file>
30 Create a configuration file. The default file is created
30 Create a configuration file. The default file is created
31 in ``~/.rhoderc``
31 in ``~/.rhoderc``
32
32
33 \ - -save-config
33 \ - -save-config
34 Save the configuration file.
34 Save the configuration file.
35
35
36 \ - -show-config
36 \ - -show-config
37 Show the current configuration values.
37 Show the current configuration values.
38
38
39 \ - -format {json,pretty}
39 \ - -format {json,pretty}
40 Set the formatted representation.
40 Set the formatted representation.
41
41
42 Example usage:
42 Example usage:
43
43
44 .. code-block:: bash
44 .. code-block:: bash
45
45
46 $ rhodecode-tools --apikey=key --apihost=http://rhodecode.server \
46 $ rhodecode-tools --apikey=key --apihost=http://rhodecode.server \
47 --save-config
47 --save-config
48
48
49 rhodecode-api
49 rhodecode-api
50 -------------
50 -------------
51
51
52 The RhodeCode API lets you connect to |RCE| and carry out management tasks from a
52 The RhodeCode API lets you connect to |RCE| and carry out management tasks from a
53 remote machine, for more information about the API, see the :ref:`api`. To
53 remote machine, for more information about the API, see the :ref:`api`. To
54 pass arguments on the command-line use the ``method:option`` syntax.
54 pass arguments on the command-line use the ``method:option`` syntax.
55
55
56 Example usage:
56 Example usage:
57
57
58 .. code-block:: bash
58 .. code-block:: bash
59
59
60 # Run the get_repos API call and sample output
60 # Run the get_repos API call and sample output
61 $ rhodecode-api --instance-name=enterprise-1 create_repo \
61 $ rhodecode-api --instance-name=enterprise-1 create_repo \
62 repo_name:brand-new repo_type:hg description:repo-desc
62 repo_name:brand-new repo_type:hg description:repo-desc
63
63
64 {
64 {
65 "error": null,
65 "error": null,
66 "id": 1110,
66 "id": 1110,
67 "result": {
67 "result": {
68 "msg": "Created new repository `brand-new`",
68 "msg": "Created new repository `brand-new`",
69 "success": true,
69 "success": true,
70 "task": null
70 "task": null
71 }
71 }
72 }
72 }
73
73
74 Options:
74 Options:
75
75
76 .. rst-class:: dl-horizontal
76 .. rst-class:: dl-horizontal
77
77
78 \ - -api-cache-only
78 \ - -api-cache-only
79 Requires a cache to be present when running this call
79 Requires a cache to be present when running this call
80
80
81 \ - -api-cache-rebuild
81 \ - -api-cache-rebuild
82 Replaces existing cached values with new ones from server
82 Replaces existing cached values with new ones from server
83
83
84 \ - -api-cache <PATH>
84 \ - -api-cache <PATH>
85 Use a special cache dir to read responses from instead of the server
85 Use a special cache dir to read responses from instead of the server
86
86
87 \ - -api-cert-verify
87 \ - -api-cert-verify
88 Verify the endpoint ssl certificate
88 Verify the endpoint ssl certificate
89
89
90 \ - -api-cert <PATH>
90 \ - -api-cert <PATH>
91 Path to alternate CA bundle.
91 Path to alternate CA bundle.
92
92
93 \ - -apihost <api_host>
93 \ - -apihost <api_host>
94 Set the API host value.
94 Set the API host value.
95
95
96 \ - -apikey <apikey_value>
96 \ - -apikey <apikey_value>
97 Set the API key value.
97 Set the API key value.
98
98
99 \ - -instance-name <instance-id>
99 \ - -instance-name <instance-id>
100 Set the instance name
100 Set the instance name
101
101
102 \-I, - -install-dir <DIR>
102 \-I, - -install-dir <DIR>
103 Location of application instances
103 Location of application instances
104
104
105 \-c, - -config <.rhoderc-file>
105 \-c, - -config <.rhoderc-file>
106 Location of the :file:`.rhoderc`
106 Location of the :file:`.rhoderc`
107
107
108 \-F, - -format {json,pretty}
108 \-F, - -format {json,pretty}
109 Set the formatted representation.
109 Set the formatted representation.
110
110
111 \-h, - -help
111 \-h, - -help
112 Show help messages.
112 Show help messages.
113
113
114 \-v, - -verbose
114 \-v, - -verbose
115 Enable verbose messaging
115 Enable verbose messaging
116
116
117 rhodecode-cleanup-gists
117 rhodecode-cleanup-gists
118 -----------------------
118 -----------------------
119
119
120 Use this to delete gists within |RCE|. Options:
120 Use this to delete gists within |RCE|. Options:
121
121
122 .. rst-class:: dl-horizontal
122 .. rst-class:: dl-horizontal
123
123
124 \-c, - -config <config_file>
124 \-c, - -config <config_file>
125 Set the file path to the configuration file. The default file is
125 Set the file path to the configuration file. The default file is
126 :file:`/home/{user}/.rhoderc`
126 :file:`/home/{user}/.rhoderc`
127
127
128 \ - -corrupted
128 \ - -corrupted
129 Remove gists with corrupted metadata.
129 Remove gists with corrupted metadata.
130
130
131 \ - -dont-ask
131 \ - -dont-ask
132 Remove gists without asking for confirmation.
132 Remove gists without asking for confirmation.
133
133
134 \-h, - -help
134 \-h, - -help
135 Show help messages. current configuration values.
135 Show help messages. current configuration values.
136
136
137 \ - -instance-name <instance-id>
137 \ - -instance-name <instance-id>
138 Set the instance name.
138 Set the instance name.
139
139
140 \-R, - -repo-dir
140 \-R, - -repo-dir
141 Set the repository file path.
141 Set the repository file path.
142
142
143 \ - -version
143 \ - -version
144 Display your |RCT| version.
144 Display your |RCT| version.
145
145
146 Example usage:
146 Example usage:
147
147
148 .. code-block:: bash
148 .. code-block:: bash
149
149
150 # Clean up gists related to an instance
150 # Clean up gists related to an instance
151 $ rhodecode-cleanup-gists --instance-name=enterprise-1
151 $ rhodecode-cleanup-gists --instance-name=enterprise-1
152 Scanning for gists in /home/brian/repos/.rc_gist_store...
152 Scanning for gists in /home/brian/repos/.rc_gist_store...
153 preparing to remove [3] found gists
153 preparing to remove [3] found gists
154
154
155 # Clean up corrupted gists in an instance
155 # Clean up corrupted gists in an instance
156 $ rhodecode-cleanup-gists --instance-name=enterprise-1 --corrupted
156 $ rhodecode-cleanup-gists --instance-name=enterprise-1 --corrupted
157 Scanning for gists in /home/brian/repos/.rc_gist_store...
157 Scanning for gists in /home/brian/repos/.rc_gist_store...
158 preparing to remove [2] found gists
158 preparing to remove [2] found gists
159 the following gists will be archived:
159 the following gists will be archived:
160 * EXPIRED: BAD METADATA | /home/brian/repos/.rc_gist_store/5
160 * EXPIRED: BAD METADATA | /home/brian/repos/.rc_gist_store/5
161 * EXPIRED: BAD METADATA | /home/brian/repos/.rc_gist_store/8FtC
161 * EXPIRED: BAD METADATA | /home/brian/repos/.rc_gist_store/8FtC
162 are you sure you want to archive them? [y/N]: y
162 are you sure you want to archive them? [y/N]: y
163 removing gist /home/brian/repos/.rc_gist_store/5
163 removing gist /home/brian/repos/.rc_gist_store/5
164 removing gist /home/brian/repos/.rc_gist_store/8FtCKdcbRKmEvRzTVsEt
164 removing gist /home/brian/repos/.rc_gist_store/8FtCKdcbRKmEvRzTVsEt
165
165
166 rhodecode-cleanup-repos
166 rhodecode-cleanup-repos
167 -----------------------
167 -----------------------
168
168
169 Use this to manage |repos| and |repo| groups within |RCE|. Options:
169 Use this to manage |repos| and |repo| groups within |RCE|. Options:
170
170
171 .. rst-class:: dl-horizontal
171 .. rst-class:: dl-horizontal
172
172
173 \-c, - -config <config_file>
173 \-c, - -config <config_file>
174 Set the file path to the configuration file. The default file is
174 Set the file path to the configuration file. The default file is
175 :file:`/home/{user}/.rhoderc`.
175 :file:`/home/{user}/.rhoderc`.
176
176
177 \-h, - -help
177 \-h, - -help
178 Show help messages. current configuration values.
178 Show help messages. current configuration values.
179
179
180 \ - -interactive
180 \ - -interactive
181 Enable an interactive prompt for each repository when deleting.
181 Enable an interactive prompt for each repository when deleting.
182
182
183 \ - -include-groups
183 \ - -include-groups
184 Remove repository groups.
184 Remove repository groups.
185
185
186 \ - -instance-name <instance-id>
186 \ - -instance-name <instance-id>
187 Set the instance name.
187 Set the instance name.
188
188
189 \ - -list-only
189 \ - -list-only
190 Display repositories selected for deletion.
190 Display repositories selected for deletion.
191
191
192 \ - -older-than <str>
192 \ - -older-than <str>
193 Delete repositories older that a specified time.
193 Delete repositories older that a specified time.
194 You can use the following suffixes; d for days, h for hours,
194 You can use the following suffixes; d for days, h for hours,
195 m for minutes, s for seconds.
195 m for minutes, s for seconds.
196
196
197 \-R, - -repo-dir
197 \-R, - -repo-dir
198 Set the repository file path
198 Set the repository file path
199
199
200 Example usage:
200 Example usage:
201
201
202 .. code-block:: bash
202 .. code-block:: bash
203
203
204 # Cleaning up repos using tools installed with RCE 350 and above
204 # Cleaning up repos using tools installed with RCE 350 and above
205 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-cleanup-repos \
205 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-cleanup-repos \
206 --instance-name=enterprise-4 --older-than=1d
206 --instance-name=enterprise-4 --older-than=1d
207 Scanning for repositories in /home/brian/repos...
207 Scanning for repositories in /home/brian/repos...
208 preparing to remove [2] found repositories older than 1 day, 0:00:00 (1d)
208 preparing to remove [2] found repositories older than 1 day, 0:00:00 (1d)
209
209
210 the following repositories will be deleted completely:
210 the following repositories will be deleted completely:
211 * REMOVED: 2015-08-05 00:23:18 | /home/brian/repos/rm__20150805_002318_831
211 * REMOVED: 2015-08-05 00:23:18 | /home/brian/repos/rm__20150805_002318_831
212 * REMOVED: 2015-08-04 01:22:10 | /home/brian/repos/rm__20150804_012210_336
212 * REMOVED: 2015-08-04 01:22:10 | /home/brian/repos/rm__20150804_012210_336
213 are you sure you want to remove them? [y/N]:
213 are you sure you want to remove them? [y/N]:
214
214
215 # Clean up repos older than 1 year
215 # Clean up repos older than 1 year
216 # If using virtualenv and pre RCE 350 tools installation
216 # If using virtualenv and pre RCE 350 tools installation
217 (venv)$ rhodecode-cleanup-repos --instance-name=enterprise-1 \
217 (venv)$ rhodecode-cleanup-repos --instance-name=enterprise-1 \
218 --older-than=365d
218 --older-than=365d
219
219
220 Scanning for repositories in /home/brian/repos...
220 Scanning for repositories in /home/brian/repos...
221 preparing to remove [343] found repositories older than 365 days
221 preparing to remove [343] found repositories older than 365 days
222
222
223 # clean up repos older than 3 days
223 # clean up repos older than 3 days
224 # If using virtualenv and pre RCE 350 tools installation
224 # If using virtualenv and pre RCE 350 tools installation
225 (venv)$ rhodecode-cleanup-repos --instance-name=enterprise-1 \
225 (venv)$ rhodecode-cleanup-repos --instance-name=enterprise-1 \
226 --older-than=3d
226 --older-than=3d
227 Scanning for repositories in /home/brian/repos...
227 Scanning for repositories in /home/brian/repos...
228 preparing to remove [3] found repositories older than 3 days
228 preparing to remove [3] found repositories older than 3 days
229
229
230 .. _tools-config:
230 .. _tools-config:
231
231
232 rhodecode-config
232 rhodecode-config
233 ----------------
233 ----------------
234
234
235 Use this to create or update a |RCE| configuration file on the local machine.
235 Use this to create or update a |RCE| configuration file on the local machine.
236
236
237 .. rst-class:: dl-horizontal
237 .. rst-class:: dl-horizontal
238
238
239 \- -filename </path/to/config_file>
239 \- -filename </path/to/config_file>
240 Set the file path to the |RCE| configuration file.
240 Set the file path to the |RCE| configuration file.
241
241
242 \- -show-defaults
242 \- -show-defaults
243 Display the defaults set in the |RCE| configuration file.
243 Display the defaults set in the |RCE| configuration file.
244
244
245 \- -update
245 \- -update
246 Update the configuration with the new settings passed on the command
246 Update the configuration with the new settings passed on the command
247 line.
247 line.
248
248
249 .. code-block:: bash
249 .. code-block:: bash
250
250
251 # Create a new config file
251 # Create a new config file
252 $ rhodecode-config --filename=dev.ini
252 $ rhodecode-config --filename=dev.ini
253 Wrote new config file in /Users/user/dev.ini
253 Wrote new config file in /Users/user/dev.ini
254
254
255 # Update config value for given section:
255 # Update config value for given section:
256 $ rhodecode-config --update --filename=prod.ini [handler_console]level=INFO
256 $ rhodecode-config --update --filename=prod.ini [handler_console]level=INFO
257
257
258 $ rhodecode-config --filename=dev.ini --show-defaults
258 $ rhodecode-config --filename=dev.ini --show-defaults
259 lang=en
259 lang=en
260 cpu_number=4
260 cpu_number=4
261 uuid=<function <lambda> at 0x10d86ac08>
261 uuid=<function <lambda> at 0x10d86ac08>
262 license_token=ff1e-aa9c-bb66-11e5
262 license_token=ff1e-aa9c-bb66-11e5
263 host=127.0.0.1
263 host=127.0.0.1
264 here=/Users/brian
264 here=/Users/brian
265 error_aggregation_service=None
265 error_aggregation_service=None
266 database_url=sqlite:///%(here)s/rhodecode.db?timeout=30
266 database_url=sqlite:///%(here)s/rhodecode.db?timeout=30
267 git_path=git
267 git_path=git
268 http_server=waitress
268 http_server=waitress
269 port=5000
269 port=5000
270
270
271 .. _tools-rhodecode-extensions:
271 .. _tools-rhodecode-extensions:
272
272
273 rhodecode-extensions
273 rhodecode-extensions
274 --------------------
274 --------------------
275
275
276 The `rcextensions` since version 4.14 are now shipped together with |RCE| please check
276 The `rcextensions` since version 4.14 are now shipped together with |RCE| please check
277 the using :ref:`integrations-rcextensions` section.
277 the using :ref:`integrations-rcextensions` section.
278
278
279
279
280 rhodecode-gist
280 rhodecode-gist
281 --------------
281 --------------
282
282
283 Use this to create, list, show, or delete gists within |RCE|. Options:
283 Use this to create, list, show, or delete gists within |RCE|. Options:
284
284
285 .. rst-class:: dl-horizontal
285 .. rst-class:: dl-horizontal
286
286
287 \ - -api-cache-only
287 \ - -api-cache-only
288 Requires a cache to be present when running this call
288 Requires a cache to be present when running this call
289
289
290 \ - -api-cache-rebuild
290 \ - -api-cache-rebuild
291 Replaces existing cached values with new ones from server
291 Replaces existing cached values with new ones from server
292
292
293 \ - -api-cache PATH
293 \ - -api-cache PATH
294 Use a special cache dir to read responses from instead of the server
294 Use a special cache dir to read responses from instead of the server
295
295
296 \ - -api-cert-verify
296 \ - -api-cert-verify
297 Verify the endpoint ssl certificate
297 Verify the endpoint ssl certificate
298
298
299 \ - -api-cert PATH
299 \ - -api-cert PATH
300 Path to alternate CA bundle.
300 Path to alternate CA bundle.
301
301
302 \ - -apihost <api_host>
302 \ - -apihost <api_host>
303 Set the API host value.
303 Set the API host value.
304
304
305 \ - -apikey <apikey_value>
305 \ - -apikey <apikey_value>
306 Set the API key value.
306 Set the API key value.
307
307
308 \-c, - -config <config_file>
308 \-c, - -config <config_file>
309 Create a configuration file.
309 Create a configuration file.
310 The default file is created in :file:`~/.rhoderc`
310 The default file is created in :file:`~/.rhoderc`
311
311
312 \ - -create <gistname>
312 \ - -create <gistname>
313 create the gist
313 create the gist
314
314
315 \-d, - -description <str>
315 \-d, - -description <str>
316 Set gist description
316 Set gist description
317
317
318 \ - -delete <gistid>
318 \ - -delete <gistid>
319 Delete the gist
319 Delete the gist
320
320
321 \-f, - -file
321 \-f, - -file
322 Specify the filename The file extension will enable syntax highlighting.
322 Specify the filename The file extension will enable syntax highlighting.
323
323
324 \-F, - -format {json,pretty}
324 \-F, - -format {json,pretty}
325 Set the formatted representation.
325 Set the formatted representation.
326
326
327 \ - -help
327 \ - -help
328 Show help messages.
328 Show help messages.
329
329
330 \-I, - -install-dir <DIR>
330 \-I, - -install-dir <DIR>
331 Location of application instances
331 Location of application instances
332
332
333 \ - -instance-name <instance-id>
333 \ - -instance-name <instance-id>
334 Set the instance name.
334 Set the instance name.
335
335
336 \ - -list
336 \ - -list
337 Display instance gists.
337 Display instance gists.
338
338
339 \-l, --lifetime <minutes>
339 \-l, --lifetime <minutes>
340 Set the gist lifetime. The default value is (-1) forever
340 Set the gist lifetime. The default value is (-1) forever
341
341
342 \ - -show <gistname>
342 \ - -show <gistname>
343 Show the content of the gist
343 Show the content of the gist
344
344
345 \-o, - -open
345 \-o, - -open
346 After creating Gist open it in browser
346 After creating Gist open it in browser
347
347
348 \-p, - -private
348 \-p, - -private
349 Create a private gist
349 Create a private gist
350
350
351 \ - -version
351 \ - -version
352 Display your |RCT| version.
352 Display your |RCT| version.
353
353
354 Example usage:
354 Example usage:
355
355
356 .. code-block:: bash
356 .. code-block:: bash
357
357
358 # List the gists in an instance
358 # List the gists in an instance
359 (venv)brian@ubuntu:~$ rhodecode-gist --instance-name=enterprise-1 list
359 (venv)brian@ubuntu:~$ rhodecode-gist --instance-name=enterprise-1 list
360 {
360 {
361 "error": null,
361 "error": null,
362 "id": 7102,
362 "id": 7102,
363 "result": [
363 "result": [
364 {
364 {
365 "access_id": "2",
365 "access_id": "2",
366 "content": null,
366 "content": null,
367 "created_on": "2015-01-19T12:52:26.494",
367 "created_on": "2015-01-19T12:52:26.494",
368 "description": "A public gust",
368 "description": "A public gust",
369 "expires": -1.0,
369 "expires": -1.0,
370 "gist_id": 2,
370 "gist_id": 2,
371 "type": "public",
371 "type": "public",
372 "url": "http://127.0.0.1:10003/_admin/gists/2"
372 "url": "http://127.0.0.1:10003/_admin/gists/2"
373 },
373 },
374 {
374 {
375 "access_id": "7gs6BsSEC4pKUEPLz5AB",
375 "access_id": "7gs6BsSEC4pKUEPLz5AB",
376 "content": null,
376 "content": null,
377 "created_on": "2015-01-19T11:27:40.812",
377 "created_on": "2015-01-19T11:27:40.812",
378 "description": "Gist testing API",
378 "description": "Gist testing API",
379 "expires": -1.0,
379 "expires": -1.0,
380 "gist_id": 1,
380 "gist_id": 1,
381 "type": "private",
381 "type": "private",
382 "url": "http://127.0.0.1:10003/_admin/gists/7gs6BsSEC4pKUEPLz5AB"
382 "url": "http://127.0.0.1:10003/_admin/gists/7gs6BsSEC4pKUEPLz5AB"
383 }
383 }
384 ]
384 ]
385 }
385 }
386
386
387 # delete a particular gist
387 # delete a particular gist
388 # You use the access_id to specify the gist to delete
388 # You use the access_id to specify the gist to delete
389 (venv)brian@ubuntu:~$ rhodecode-gist delete 2 --instance-name=enterprise-1
389 (venv)brian@ubuntu:~$ rhodecode-gist delete 2 --instance-name=enterprise-1
390 {
390 {
391 "error": null,
391 "error": null,
392 "id": 6284,
392 "id": 6284,
393 "result": {
393 "result": {
394 "gist": null,
394 "gist": null,
395 "msg": "deleted gist ID:2"
395 "msg": "deleted gist ID:2"
396 }
396 }
397 }
397 }
398
398
399 # cat a file and pipe to new gist
399 # cat a file and pipe to new gist
400 # This is if you are using virtualenv
400 # This is if you are using virtualenv
401 (venv)$ cat ~/.rhoderc | rhodecode-gist --instance-name=enterprise-1 \
401 (venv)$ cat ~/.rhoderc | rhodecode-gist --instance-name=enterprise-1 \
402 -d '.rhoderc copy' create
402 -d '.rhoderc copy' create
403
403
404 {
404 {
405 "error": null,
405 "error": null,
406 "id": 5374,
406 "id": 5374,
407 "result": {
407 "result": {
408 "gist": {
408 "gist": {
409 "access_id": "7",
409 "access_id": "7",
410 "content": null,
410 "content": null,
411 "created_on": "2015-01-26T11:31:58.774",
411 "created_on": "2015-01-26T11:31:58.774",
412 "description": ".rhoderc copy",
412 "description": ".rhoderc copy",
413 "expires": -1.0,
413 "expires": -1.0,
414 "gist_id": 7,
414 "gist_id": 7,
415 "type": "public",
415 "type": "public",
416 "url": "http://127.0.0.1:10003/_admin/gists/7"
416 "url": "http://127.0.0.1:10003/_admin/gists/7"
417 },
417 },
418 "msg": "created new gist"
418 "msg": "created new gist"
419 }
419 }
420 }
420 }
421
421
422 # Cat a file and pipe to gist
422 # Cat a file and pipe to gist
423 # in RCE 3.5.0 tools and above
423 # in RCE 3.5.0 tools and above
424 $ cat ~/.rhoderc | ~/.rccontrol/{instance-id}/profile/bin/rhodecode-gist \
424 $ cat ~/.rhoderc | ~/.rccontrol/{instance-id}/profile/bin/rhodecode-gist \
425 --instance-name=enterprise-4 -d '.rhoderc copy' create
425 --instance-name=enterprise-4 -d '.rhoderc copy' create
426 {
426 {
427 "error": null,
427 "error": null,
428 "id": 9253,
428 "id": 9253,
429 "result": {
429 "result": {
430 "gist": {
430 "gist": {
431 "access_id": "4",
431 "access_id": "4",
432 "acl_level": "acl_public",
432 "acl_level": "acl_public",
433 "content": null,
433 "content": null,
434 "created_on": "2015-08-20T05:54:11.250",
434 "created_on": "2015-08-20T05:54:11.250",
435 "description": ".rhoderc copy",
435 "description": ".rhoderc copy",
436 "expires": -1.0,
436 "expires": -1.0,
437 "gist_id": 4,
437 "gist_id": 4,
438 "modified_at": "2015-08-20T05:54:11.250",
438 "modified_at": "2015-08-20T05:54:11.250",
439 "type": "public",
439 "type": "public",
440 "url": "http://127.0.0.1:10000/_admin/gists/4"
440 "url": "http://127.0.0.1:10000/_admin/gists/4"
441 },
441 },
442 "msg": "created new gist"
442 "msg": "created new gist"
443 }
443 }
444 }
444 }
445
445
446
446
447 rhodecode-index
447 rhodecode-index
448 ---------------
448 ---------------
449
449
450 More detailed information regarding setting up the indexer is available in
450 More detailed information regarding setting up the indexer is available in
451 the :ref:`indexing-ref` section. Options:
451 the :ref:`indexing-ref` section. Options:
452
452
453 .. rst-class:: dl-horizontal
453 .. rst-class:: dl-horizontal
454
454
455 \ - -api-cache-only
455 \ - -api-cache-only
456 Requires a cache to be present when running this call
456 Requires a cache to be present when running this call
457
457
458 \ - -api-cache-rebuild
458 \ - -api-cache-rebuild
459 Replaces existing cached values with new ones from server
459 Replaces existing cached values with new ones from server
460
460
461 \ - -api-cache PATH
461 \ - -api-cache PATH
462 Use a special cache dir to read responses from instead of the server
462 Use a special cache dir to read responses from instead of the server
463
463
464 \ - -api-cert-verify
464 \ - -api-cert-verify
465 Verify the endpoint ssl certificate
465 Verify the endpoint ssl certificate
466
466
467 \ - -api-cert PATH
467 \ - -api-cert PATH
468 Path to alternate CA bundle.
468 Path to alternate CA bundle.
469
469
470 \ - -apihost <api_host>
470 \ - -apihost <api_host>
471 Set the API host value.
471 Set the API host value.
472
472
473 \ - -apikey <apikey_value>
473 \ - -apikey <apikey_value>
474 Set the API key value.
474 Set the API key value.
475
475
476 \-c, --config <config_file>
476 \-c, --config <config_file>
477 Create a configuration file.
477 Create a configuration file.
478 The default file is created in :file:`~/.rhoderc`
478 The default file is created in :file:`~/.rhoderc`
479
479
480 \ - -create-mapping <PATH>
480 \ - -create-mapping <PATH>
481 Creates an example mapping configuration for indexer.
481 Creates an example mapping configuration for indexer.
482
482
483 \-F, - -format {json,pretty}
483 \-F, - -format {json,pretty}
484 Set the formatted representation.
484 Set the formatted representation.
485
485
486 \-h, - -help
486 \-h, - -help
487 Show help messages.
487 Show help messages.
488
488
489 \ - -instance-name <instance-id>
489 \ - -instance-name <instance-id>
490 Set the instance name
490 Set the instance name
491
491
492 \-I, - -install-dir <DIR>
492 \-I, - -install-dir <DIR>
493 Location of application instances
493 Location of application instances
494
494
495 \-m, - -mapping <file_name>
495 \-m, - -mapping <file_name>
496 Parse the output to the .ini mapping file.
496 Parse the output to the .ini mapping file.
497
497
498 \ - -optimize
498 \ - -optimize
499 Optimize index for performance by amalgamating multiple index files
499 Optimize index for performance by amalgamating multiple index files
500 into one. Greatly increases incremental indexing speed.
500 into one. Greatly increases incremental indexing speed.
501
501
502 \-R, - -repo-dir <DIRECTORY>
502 \-R, - -repo-dir <DIRECTORY>
503 Location of repositories
503 Location of repositories
504
504
505 \ - -source <PATH>
505 \ - -source <PATH>
506 Use a special source JSON file to feed the indexer
506 Use a special source JSON file to feed the indexer
507
507
508 \ - -version
508 \ - -version
509 Display your |RCT| version.
509 Display your |RCT| version.
510
510
511 Example usage:
511 Example usage:
512
512
513 .. code-block:: bash
513 .. code-block:: bash
514
514
515 # Run the indexer
515 # Run the indexer
516 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
516 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
517 --instance-name=enterprise-4
517 --instance-name=enterprise-4
518
518
519 # Run indexer based on mapping.ini file
519 # Run indexer based on search_mapping.ini file
520 # This is using pre-350 virtualenv
520 # This is using pre-350 virtualenv
521 (venv)$ rhodecode-index --instance-name=enterprise-1
521 (venv)$ rhodecode-index --instance-name=enterprise-1
522
522
523 # Index from the command line without creating
523 # Index from the command line without creating
524 # the .rhoderc file
524 # the .rhoderc file
525 $ rhodecode-index --apikey=key --apihost=http://rhodecode.server \
525 $ rhodecode-index --apikey=key --apihost=http://rhodecode.server \
526 --instance-name=enterprise-2 --save-config
526 --instance-name=enterprise-2 --save-config
527
527
528 # Create the indexing mapping file
528 # Create the indexing mapping file
529 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
529 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
530 --create-mapping mapping.ini --instance-name=enterprise-4
530 --create-mapping search_mapping.ini --instance-name=enterprise-4
531
531
532 .. _tools-rhodecode-list-instance:
532 .. _tools-rhodecode-list-instance:
533
533
534 rhodecode-list-instances
534 rhodecode-list-instances
535 ------------------------
535 ------------------------
536
536
537 Use this command to list the instance details configured in the
537 Use this command to list the instance details configured in the
538 :file:`~/.rhoderc` file.
538 :file:`~/.rhoderc` file.
539
539
540 .. code-block:: bash
540 .. code-block:: bash
541
541
542 $ .rccontrol/enterprise-1/profile/bin/rhodecode-list-instances
542 $ .rccontrol/enterprise-1/profile/bin/rhodecode-list-instances
543 [instance:production] - Config only
543 [instance:production] - Config only
544 API-HOST: https://some.url.com
544 API-HOST: https://some.url.com
545 API-KEY: some.auth.token
545 API-KEY: some.auth.token
546
546
547 [instance:development] - Config only
547 [instance:development] - Config only
548 API-HOST: http://some.ip.address
548 API-HOST: http://some.ip.address
549 API-KEY: some.auth.token
549 API-KEY: some.auth.token
550
550
551
551
552 .. _tools-setup-config:
552 .. _tools-setup-config:
553
553
554 rhodecode-setup-config
554 rhodecode-setup-config
555 ----------------------
555 ----------------------
556
556
557 Use this command to create the ``~.rhoderc`` file required by |RCT| to access
557 Use this command to create the ``~.rhoderc`` file required by |RCT| to access
558 remote instances.
558 remote instances.
559
559
560 .. rst-class:: dl-horizontal
560 .. rst-class:: dl-horizontal
561
561
562 \- -instance-name <name>
562 \- -instance-name <name>
563 Specify the instance name in the :file:`~/.rhoderc`
563 Specify the instance name in the :file:`~/.rhoderc`
564
564
565 \api_host <hostname>
565 \api_host <hostname>
566 Create a configuration file. The default file is created
566 Create a configuration file. The default file is created
567 in ``~/.rhoderc``
567 in ``~/.rhoderc``
568
568
569 \api_key <auth-token>
569 \api_key <auth-token>
570 Create a configuration file. The default file is created
570 Create a configuration file. The default file is created
571 in ``~/.rhoderc``
571 in ``~/.rhoderc``
572
572
573
573
574 .. code-block:: bash
574 .. code-block:: bash
575
575
576 (venv)$ rhodecode-setup-config --instance-name=tea api_host=URL api_key=xyz
576 (venv)$ rhodecode-setup-config --instance-name=tea api_host=URL api_key=xyz
577 Config not found under /Users/username/.rhoderc, creating a new one
577 Config not found under /Users/username/.rhoderc, creating a new one
578 Wrote new configuration into /Users/username/.rhoderc
578 Wrote new configuration into /Users/username/.rhoderc
@@ -1,174 +1,174 b''
1 {
1 {
2 "dirs": {
2 "dirs": {
3 "css": {
3 "css": {
4 "src": "rhodecode/public/css",
4 "src": "rhodecode/public/css",
5 "dest": "rhodecode/public/css"
5 "dest": "rhodecode/public/css"
6 },
6 },
7 "js": {
7 "js": {
8 "src": "rhodecode/public/js/src",
8 "src": "rhodecode/public/js/src",
9 "src_rc": "rhodecode/public/js/rhodecode",
9 "src_rc": "rhodecode/public/js/rhodecode",
10 "dest": "rhodecode/public/js",
10 "dest": "rhodecode/public/js",
11 "node_modules": "node_modules"
11 "node_modules": "node_modules"
12 }
12 }
13 },
13 },
14 "copy": {
14 "copy": {
15 "main": {
15 "main": {
16 "files": [
16 "files": [
17 {
17 {
18 "expand": true,
18 "expand": true,
19 "cwd": "node_modules/@webcomponents",
19 "cwd": "node_modules/@webcomponents",
20 "src": "webcomponentsjs/*.*",
20 "src": "webcomponentsjs/*.*",
21 "dest": "<%= dirs.js.dest %>/vendors"
21 "dest": "<%= dirs.js.dest %>/vendors"
22 },
22 },
23 {
23 {
24 "src": "<%= dirs.css.src %>/style-polymer.css",
24 "src": "<%= dirs.css.src %>/style-polymer.css",
25 "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css"
25 "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css"
26 }
26 }
27 ]
27 ]
28 }
28 }
29 },
29 },
30 "concat": {
30 "concat": {
31 "dist": {
31 "dist": {
32 "src": [
32 "src": [
33 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
33 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
34 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
34 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
35 "<%= dirs.js.node_modules %>/moment/min/moment.min.js",
35 "<%= dirs.js.node_modules %>/moment/min/moment.min.js",
36 "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js",
36 "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js",
37 "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js",
37 "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js",
38 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js",
38 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js",
39 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
39 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
40 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
40 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
41 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
41 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
42 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
42 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
43 "<%= dirs.js.src %>/logging.js",
43 "<%= dirs.js.src %>/logging.js",
44 "<%= dirs.js.src %>/bootstrap.js",
44 "<%= dirs.js.src %>/bootstrap.js",
45 "<%= dirs.js.src %>/i18n_utils.js",
45 "<%= dirs.js.src %>/i18n_utils.js",
46 "<%= dirs.js.src %>/deform.js",
46 "<%= dirs.js.src %>/deform.js",
47 "<%= dirs.js.src %>/ejs.js",
47 "<%= dirs.js.src %>/ejs.js",
48 "<%= dirs.js.src %>/ejs_templates/utils.js",
48 "<%= dirs.js.src %>/ejs_templates/utils.js",
49 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
49 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
50 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
50 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
51 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
51 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
52 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
52 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
53 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
53 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
54 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
54 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
55 "<%= dirs.js.src %>/plugins/jquery.mark.js",
55 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
56 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
56 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
57 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
57 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
58 "<%= dirs.js.src %>/select2/select2.js",
58 "<%= dirs.js.src %>/select2/select2.js",
59 "<%= dirs.js.src %>/codemirror/codemirror.js",
59 "<%= dirs.js.src %>/codemirror/codemirror.js",
60 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
60 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
61 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
61 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
62 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
62 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
63 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
63 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
64 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
64 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
65 "<%= dirs.js.dest %>/mode/meta.js",
65 "<%= dirs.js.dest %>/mode/meta.js",
66 "<%= dirs.js.dest %>/mode/meta_ext.js",
66 "<%= dirs.js.dest %>/mode/meta_ext.js",
67 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
67 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
68 "<%= dirs.js.src %>/rhodecode/utils/array.js",
68 "<%= dirs.js.src %>/rhodecode/utils/array.js",
69 "<%= dirs.js.src %>/rhodecode/utils/string.js",
69 "<%= dirs.js.src %>/rhodecode/utils/string.js",
70 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
70 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
71 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
71 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
72 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
72 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
73 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
73 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
74 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
74 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
75 "<%= dirs.js.src %>/rhodecode/utils/os.js",
75 "<%= dirs.js.src %>/rhodecode/utils/os.js",
76 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
76 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
77 "<%= dirs.js.src %>/rhodecode/init.js",
77 "<%= dirs.js.src %>/rhodecode/init.js",
78 "<%= dirs.js.src %>/rhodecode/changelog.js",
78 "<%= dirs.js.src %>/rhodecode/changelog.js",
79 "<%= dirs.js.src %>/rhodecode/codemirror.js",
79 "<%= dirs.js.src %>/rhodecode/codemirror.js",
80 "<%= dirs.js.src %>/rhodecode/comments.js",
80 "<%= dirs.js.src %>/rhodecode/comments.js",
81 "<%= dirs.js.src %>/rhodecode/constants.js",
81 "<%= dirs.js.src %>/rhodecode/constants.js",
82 "<%= dirs.js.src %>/rhodecode/files.js",
82 "<%= dirs.js.src %>/rhodecode/files.js",
83 "<%= dirs.js.src %>/rhodecode/followers.js",
83 "<%= dirs.js.src %>/rhodecode/followers.js",
84 "<%= dirs.js.src %>/rhodecode/menus.js",
84 "<%= dirs.js.src %>/rhodecode/menus.js",
85 "<%= dirs.js.src %>/rhodecode/notifications.js",
85 "<%= dirs.js.src %>/rhodecode/notifications.js",
86 "<%= dirs.js.src %>/rhodecode/permissions.js",
86 "<%= dirs.js.src %>/rhodecode/permissions.js",
87 "<%= dirs.js.src %>/rhodecode/pjax.js",
87 "<%= dirs.js.src %>/rhodecode/pjax.js",
88 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
88 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
89 "<%= dirs.js.src %>/rhodecode/settings.js",
89 "<%= dirs.js.src %>/rhodecode/settings.js",
90 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
90 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
91 "<%= dirs.js.src %>/rhodecode/tooltips.js",
91 "<%= dirs.js.src %>/rhodecode/tooltips.js",
92 "<%= dirs.js.src %>/rhodecode/users.js",
92 "<%= dirs.js.src %>/rhodecode/users.js",
93 "<%= dirs.js.src %>/rhodecode/appenlight.js",
93 "<%= dirs.js.src %>/rhodecode/appenlight.js",
94 "<%= dirs.js.src %>/rhodecode.js",
94 "<%= dirs.js.src %>/rhodecode.js",
95 "<%= dirs.js.dest %>/rhodecode-components.js"
95 "<%= dirs.js.dest %>/rhodecode-components.js"
96 ],
96 ],
97 "dest": "<%= dirs.js.dest %>/scripts.js",
97 "dest": "<%= dirs.js.dest %>/scripts.js",
98 "nonull": true
98 "nonull": true
99 }
99 }
100 },
100 },
101 "less": {
101 "less": {
102 "development": {
102 "development": {
103 "options": {
103 "options": {
104 "compress": false,
104 "compress": false,
105 "yuicompress": false,
105 "yuicompress": false,
106 "optimization": 0
106 "optimization": 0
107 },
107 },
108 "files": {
108 "files": {
109 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
109 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
110 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
110 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
111 }
111 }
112 },
112 },
113 "production": {
113 "production": {
114 "options": {
114 "options": {
115 "compress": true,
115 "compress": true,
116 "yuicompress": true,
116 "yuicompress": true,
117 "optimization": 2
117 "optimization": 2
118 },
118 },
119 "files": {
119 "files": {
120 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
120 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
121 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
121 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
122 }
122 }
123 },
123 },
124 "components": {
124 "components": {
125 "files": [
125 "files": [
126 {
126 {
127 "cwd": "<%= dirs.js.src %>/components/",
127 "cwd": "<%= dirs.js.src %>/components/",
128 "dest": "<%= dirs.js.src %>/components/",
128 "dest": "<%= dirs.js.src %>/components/",
129 "src": [
129 "src": [
130 "**/*.less"
130 "**/*.less"
131 ],
131 ],
132 "expand": true,
132 "expand": true,
133 "ext": ".css"
133 "ext": ".css"
134 }
134 }
135 ]
135 ]
136 }
136 }
137 },
137 },
138 "watch": {
138 "watch": {
139 "less": {
139 "less": {
140 "files": [
140 "files": [
141 "<%= dirs.css.src %>/**/*.less",
141 "<%= dirs.css.src %>/**/*.less",
142 "<%= dirs.js.src %>/components/**/*.less"
142 "<%= dirs.js.src %>/components/**/*.less"
143 ],
143 ],
144 "tasks": [
144 "tasks": [
145 "less:development",
145 "less:development",
146 "less:components",
146 "less:components",
147 "concat:polymercss",
147 "concat:polymercss",
148 "webpack",
148 "webpack",
149 "concat:dist"
149 "concat:dist"
150 ]
150 ]
151 },
151 },
152 "js": {
152 "js": {
153 "files": [
153 "files": [
154 "!<%= dirs.js.src %>/components/root-styles.gen.html",
154 "!<%= dirs.js.src %>/components/root-styles.gen.html",
155 "<%= dirs.js.src %>/**/*.js",
155 "<%= dirs.js.src %>/**/*.js",
156 "<%= dirs.js.src %>/components/**/*.html"
156 "<%= dirs.js.src %>/components/**/*.html"
157 ],
157 ],
158 "tasks": [
158 "tasks": [
159 "less:components",
159 "less:components",
160 "concat:polymercss",
160 "concat:polymercss",
161 "webpack",
161 "webpack",
162 "concat:dist"
162 "concat:dist"
163 ]
163 ]
164 }
164 }
165 },
165 },
166 "jshint": {
166 "jshint": {
167 "rhodecode": {
167 "rhodecode": {
168 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
168 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
169 "options": {
169 "options": {
170 "jshintrc": ".jshintrc"
170 "jshintrc": ".jshintrc"
171 }
171 }
172 }
172 }
173 }
173 }
174 }
174 }
@@ -1,58 +1,59 b''
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "2.0.0",
3 "version": "2.0.0",
4 "private": true,
4 "private": true,
5 "description" : "RhodeCode JS packaged",
5 "description" : "RhodeCode JS packaged",
6 "license": "SEE LICENSE IN LICENSE.txt",
6 "license": "SEE LICENSE IN LICENSE.txt",
7 "repository" : {
7 "repository" : {
8 "type" : "hg",
8 "type" : "hg",
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
10 },
10 },
11 "devDependencies": {
11 "devDependencies": {
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
13 "clipboard": "^2.0.1",
13 "clipboard": "^2.0.1",
14 "exports-loader": "^0.6.4",
14 "exports-loader": "^0.6.4",
15 "favico.js": "^0.3.10",
15 "favico.js": "^0.3.10",
16 "grunt": "^0.4.5",
16 "grunt": "^0.4.5",
17 "grunt-cli": "^1.3.1",
17 "grunt-cli": "^1.3.1",
18 "grunt-contrib-concat": "^0.5.1",
18 "grunt-contrib-concat": "^0.5.1",
19 "grunt-contrib-copy": "^1.0.0",
19 "grunt-contrib-copy": "^1.0.0",
20 "grunt-contrib-jshint": "^0.12.0",
20 "grunt-contrib-jshint": "^0.12.0",
21 "grunt-contrib-less": "^1.1.0",
21 "grunt-contrib-less": "^1.1.0",
22 "grunt-contrib-watch": "^0.6.1",
22 "grunt-contrib-watch": "^0.6.1",
23 "grunt-webpack": "^3.1.3",
23 "grunt-webpack": "^3.1.3",
24 "jquery": "1.11.3",
24 "jquery": "1.11.3",
25 "mark.js": "8.11.1",
25 "jshint": "^2.9.1-rc3",
26 "jshint": "^2.9.1-rc3",
26 "moment": "^2.18.1",
27 "moment": "^2.18.1",
27 "mousetrap": "^1.6.1",
28 "mousetrap": "^1.6.1",
28 "qrious": "^4.0.2",
29 "qrious": "^4.0.2",
29 "sticky-sidebar": "3.3.1",
30 "sticky-sidebar": "3.3.1",
30 "waypoints": "4.0.1",
31 "waypoints": "4.0.1",
31 "webpack": "4.23.1",
32 "webpack": "4.23.1",
32 "webpack-cli": "3.1.2",
33 "webpack-cli": "3.1.2",
33 "babel-core": "^6.26.3",
34 "babel-core": "^6.26.3",
34 "babel-loader": "^7.1.2",
35 "babel-loader": "^7.1.2",
35 "babel-plugin-transform-object-rest-spread": "^6.26.0",
36 "babel-plugin-transform-object-rest-spread": "^6.26.0",
36 "babel-preset-env": "^1.6.0",
37 "babel-preset-env": "^1.6.0",
37 "copy-webpack-plugin": "^4.4.2",
38 "copy-webpack-plugin": "^4.4.2",
38 "css-loader": "^0.28.11",
39 "css-loader": "^0.28.11",
39 "html-loader": "^0.4.4",
40 "html-loader": "^0.4.4",
40 "html-webpack-plugin": "^3.2.0",
41 "html-webpack-plugin": "^3.2.0",
41 "imports-loader": "^0.7.1",
42 "imports-loader": "^0.7.1",
42 "polymer-webpack-loader": "^2.0.1",
43 "polymer-webpack-loader": "^2.0.1",
43 "style-loader": "^0.21.0",
44 "style-loader": "^0.21.0",
44 "webpack-uglify-js-plugin": "^1.1.9",
45 "webpack-uglify-js-plugin": "^1.1.9",
45 "raw-loader": "1.0.0-beta.0",
46 "raw-loader": "1.0.0-beta.0",
46 "ts-loader": "^1.3.3",
47 "ts-loader": "^1.3.3",
47 "@webcomponents/webcomponentsjs": "^2.0.0",
48 "@webcomponents/webcomponentsjs": "^2.0.0",
48 "@polymer/polymer": "^3.0.0",
49 "@polymer/polymer": "^3.0.0",
49 "@polymer/paper-button": "^3.0.0",
50 "@polymer/paper-button": "^3.0.0",
50 "@polymer/paper-spinner": "^3.0.0",
51 "@polymer/paper-spinner": "^3.0.0",
51 "@polymer/paper-tooltip": "^3.0.0",
52 "@polymer/paper-tooltip": "^3.0.0",
52 "@polymer/paper-toast": "^3.0.0",
53 "@polymer/paper-toast": "^3.0.0",
53 "@polymer/paper-toggle-button": "^3.0.0",
54 "@polymer/paper-toggle-button": "^3.0.0",
54 "@polymer/iron-ajax": "^3.0.0",
55 "@polymer/iron-ajax": "^3.0.0",
55 "@polymer/iron-autogrow-textarea": "^3.0.0",
56 "@polymer/iron-autogrow-textarea": "^3.0.0",
56 "@polymer/iron-a11y-keys": "^3.0.0"
57 "@polymer/iron-a11y-keys": "^3.0.0"
57 }
58 }
58 }
59 }
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/controllers/utils.py to rhodecode/lib/view_utils.py
NO CONTENT: file renamed from rhodecode/controllers/utils.py to rhodecode/lib/view_utils.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now