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

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

@@ -0,0 +1,28 b''
1 .. _repo-admin-set:
2 .. _permissions-info-add-group-ref:
3
4 Repository Administration
5 =========================
6
7 Repository permissions in |RCE| can be managed in a number of different ways.
8 This overview should give you an insight into how you could adopt particular
9 settings for your needs:
10
11 * Global |repo| permissions: This allows you to set the default permissions
12 for each new |repo| created within |RCE|, see :ref:`repo-default-ref`. All
13 |repos| created will inherit these permissions unless explicitly configured.
14 * Individual |repo| permissions: To set individual |repo| permissions,
15 see :ref:`set-repo-perms`.
16 * Repository Group permissions: This allows you to define the permissions for
17 a group, and all |repos| created within that group will inherit the same
18 permissions.
19
20 .. toctree::
21
22 repo_admin/repo-perm-steps
23 repo_admin/repo-extra-fields
24 repo_admin/repo-hooks
25 repo_admin/repo-issue-tracker
26 repo_admin/repo-vcs
27 repo_admin/restore-deleted-repositories
28 repo_admin/repo-admin-tasks No newline at end of file
@@ -0,0 +1,24 b''
1 .. _repo-admin-tasks:
2
3 Common Admin Tasks for Repositories
4 -----------------------------------
5
6
7 Manually Force Delete Repository
8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9
10 In case of attached forks or pull-requests repositories should be archived.
11 Here is how to force delete a repository and remove all dependent objects
12
13
14 .. code-block:: bash
15
16 # starts the ishell interactive prompt
17 $ rccontrol ishell enterprise-1
18
19 .. code-block:: python
20
21 In [4]: from rhodecode.model.repo import RepoModel
22 In [3]: repo = Repository.get_by_repo_name('test_repos/repo_with_prs')
23 In [5]: RepoModel().delete(repo, forks='detach', pull_requests='delete')
24 In [6]: Session().commit()
@@ -0,0 +1,24 b''
1 .. _user-admin-tasks:
2
3 Common Admin Tasks for Users
4 ----------------------------
5
6
7 Manually Set Personal Repository Group
8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9
10 Here is how to set a repository group as personal for a user using ishell.
11
12
13 .. code-block:: bash
14
15 # starts the ishell interactive prompt
16 $ rccontrol ishell enterprise-1
17
18 .. code-block:: python
19
20 In [1]: repo_group = RepoGroup.get_by_group_name('some_group_name')
21 In [2]: user = User.get_by_username('some_user')
22 In [3]: repo_group.user = user
23 In [4]: repo_group.personal = True
24 In [5]: Session().add(repo_group);Session().commit()
@@ -0,0 +1,35 b''
1 .. _search-methods-ref:
2
3 search methods
4 ==============
5
6 search
7 ------
8
9 .. py:function:: search(apiuser, search_query, search_type, page_limit=<Optional:10>, page=<Optional:1>, search_sort=<Optional:'newfirst'>, repo_name=<Optional:None>, repo_group_name=<Optional:None>)
10
11 Fetch Full Text Search results using API.
12
13 :param apiuser: This is filled automatically from the |authtoken|.
14 :type apiuser: AuthUser
15 :param search_query: Search query.
16 :type search_query: str
17 :param search_type: Search type. The following are valid options:
18 * commit
19 * content
20 * path
21 :type search_type: str
22 :param page_limit: Page item limit, from 1 to 500. Default 10 items.
23 :type page_limit: Optional(int)
24 :param page: Page number. Default first page.
25 :type page: Optional(int)
26 :param search_sort: Search sort order. Default newfirst. The following are valid options:
27 * newfirst
28 * oldfirst
29 :type search_sort: Optional(str)
30 :param repo_name: Filter by one repo. Default is all.
31 :type repo_name: Optional(str)
32 :param repo_group_name: Filter by one repo group. Default is all.
33 :type repo_group_name: Optional(str)
34
35
@@ -0,0 +1,85 b''
1 |RCE| 4.17.0 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2019-07-04
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13 - New artifacts feature.
14 Ability to store binary artifacts for repository with ACL
15 - UI/UX refresh for most of the pages. This includes multiple fixes and improvements.
16 - Diffs: store wide-diff mode in user sessions to store user preference for diff display.
17 - Mercurial: added support for Mercurial 4.9
18 - API: Added search API methods
19 - Files: adding/editing allows previews for generated content.
20 - Files: allowed multi file upload using UI.
21 - Repository Groups: last change is now smartly calculated based on latest change
22 from all it's children repositories.
23 - Archives: it's now currently possible to download partial directories from files view.
24 - SVN: allowed executing pre-commit code with rcextensions, also added example to
25 validate SVN file size and paths on pre-commit level.
26
27
28 General
29 ^^^^^^^
30 - Exception store: add filter for display and deletion.
31 - Files: loading history doesn't display hidden and obsolete commits anymore.
32 - Repositories: bring back missing watch action in summary view.
33 - Admin: user groups is now using pure DB filtering to speed up display
34 for large number of groups.
35 - Mercurial: enabled full evolve+topic extensions when evolve is enabled.
36 - Dependencies: bumped evolve to 8.5.1
37 - Dependencies: bumped pyramid to 1.10.4
38 - Dependencies: bumped psutil to 5.5.1
39 - Dependencies: bumped pygments to 2.4.2
40 - Dependencies: bumped pyramid to 1.10.4
41 - Dependencies: bumped psycopg2 to 2.8.3
42 - Dependencies [security]: updated colander to 1.7.0
43
44
45 Security
46 ^^^^^^^^
47
48 - SSH: replaced pycrypto with cryptography to generate SSH keys as pycrypto isn't
49 considered safe anymore.
50
51
52 Performance
53 ^^^^^^^^^^^
54
55 - Config: updated header limits on gunicorn to prevent errors on large Mercurial repositories.
56 - User sessions: added option to cleanup redis based sessions in user session interface.
57 - Authentication: reduced usage of raw auth calls inside templates to speed up rendering.
58 - Sessions: don't touch session for API calls. Before each API call created new session
59 object which wasn't required.
60
61
62 Fixes
63 ^^^^^
64
65 - hHooks: fixed more unicode problems with new pull-request link generator.
66 - Mercurial: fix ssh-server support for mercurial custom options.
67 - Pull requests: updated metadata information for failed merges with multiple heads.
68 - Pull requests: calculate ancestor in the same way as creation mode.
69 Fixed problem with updates generating wrong diffs in case of merges.
70 - Pull requests: fixed a bug in removal of multiple reviewers at once.
71 - Summary: fix timeout issues loading summary page without styling.
72 - SSH: fix invocation of custom hgrc.
73 - SSH: call custom hooks via SSH backend
74 - Markup: fix styling for check-lists.
75 - Archives: allows downloading refs that have slashes and special refs. e.g f/feat1 branch names.
76 - Files: ensure we generate archives with consistent hashing (except for .tar.gz which uses temp files names in header)
77 - Files: fixed rendering of readme files under non-ascii paths.
78
79
80 Upgrade notes
81 ^^^^^^^^^^^^^
82
83 - In this release we introduced new UI across the application.
84 In case of problems with the display on your systems please send us info to support@rhodecode.com.
85
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 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,6 +1,6 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.16.2
2 current_version = 4.17.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.16.2
21 version = 4.17.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,55 +1,64 b''
1
1
2 .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build generate-pkgs
2 .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build generate-pkgs
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' -o -iname '*.orig' \) -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:
54 generate-pkgs:
55 nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses"
55 nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses"
56
57 generate-js-pkgs:
58 rm -rf node_modules && \
59 nix-shell pkgs/shell-generate.nix --command "node2nix --input package.json -o pkgs/node-packages.nix -e pkgs/node-env.nix -c pkgs/node-default.nix -d --flatten --nodejs-8" && \
60 sed -i -e 's/http:\/\//https:\/\//g' pkgs/node-packages.nix
61
62 generate-license-meta:
63 nix-build pkgs/license-generate.nix -o result-license && \
64 cat result-license/licenses.json | python -m json.tool > rhodecode/config/licenses.json No newline at end of file
@@ -1,732 +1,741 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 concurrent 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 ## Pick algorithm for encryption. Either fernet (more secure) or aes (default)
137 ## fernet is safer, and we strongly recommend switching to it.
138 ## Due to backward compatibility aes is used as default.
139 #rhodecode.encrypted_values.algorithm = fernet
140
136 ## return gzipped responses from RhodeCode (static files/application)
141 ## return gzipped responses from RhodeCode (static files/application)
137 gzip_responses = false
142 gzip_responses = false
138
143
139 ## auto-generate javascript routes file on startup
144 ## auto-generate javascript routes file on startup
140 generate_js_files = false
145 generate_js_files = false
141
146
142 ## System global default language.
147 ## System global default language.
143 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
148 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
144 lang = en
149 lang = en
145
150
146 ## Perform a full repository scan and import on each server start.
151 ## Perform a full repository scan and import on each server start.
147 ## Settings this to true could lead to very long startup time.
152 ## Settings this to true could lead to very long startup time.
148 startup.import_repos = false
153 startup.import_repos = false
149
154
150 ## Uncomment and set this path to use archive download cache.
155 ## Uncomment and set this path to use archive download cache.
151 ## Once enabled, generated archives will be cached at this location
156 ## Once enabled, generated archives will be cached at this location
152 ## and served from the cache during subsequent requests for the same archive of
157 ## and served from the cache during subsequent requests for the same archive of
153 ## the repository.
158 ## the repository.
154 #archive_cache_dir = /tmp/tarballcache
159 #archive_cache_dir = /tmp/tarballcache
155
160
156 ## URL at which the application is running. This is used for Bootstrapping
161 ## 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
162 ## 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.
163 ## SSH calls. Set this for events to receive proper url for SSH calls.
159 app.base_url = http://rhodecode.local
164 app.base_url = http://rhodecode.local
160
165
161 ## Unique application ID. Should be a random unique string for security.
166 ## Unique application ID. Should be a random unique string for security.
162 app_instance_uuid = rc-production
167 app_instance_uuid = rc-production
163
168
164 ## Cut off limit for large diffs (size in bytes). If overall diff size on
169 ## 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
170 ## commit, or pull request exceeds this limit this diff will be displayed
166 ## partially. E.g 512000 == 512Kb
171 ## partially. E.g 512000 == 512Kb
167 cut_off_limit_diff = 512000
172 cut_off_limit_diff = 512000
168
173
169 ## Cut off limit for large files inside diffs (size in bytes). Each individual
174 ## 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.
175 ## file inside diff which exceeds this limit will be displayed partially.
171 ## E.g 128000 == 128Kb
176 ## E.g 128000 == 128Kb
172 cut_off_limit_file = 128000
177 cut_off_limit_file = 128000
173
178
174 ## use cached version of vcs repositories everywhere. Recommended to be `true`
179 ## use cached version of vcs repositories everywhere. Recommended to be `true`
175 vcs_full_cache = true
180 vcs_full_cache = true
176
181
177 ## Force https in RhodeCode, fixes https redirects, assumes it's always https.
182 ## 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
183 ## Normally this is controlled by proper http flags sent from http server
179 force_https = false
184 force_https = false
180
185
181 ## use Strict-Transport-Security headers
186 ## use Strict-Transport-Security headers
182 use_htsts = false
187 use_htsts = false
183
188
184 ## git rev filter option, --all is the default filter, if you need to
189 ## git rev filter option, --all is the default filter, if you need to
185 ## hide all refs in changelog switch this to --branches --tags
190 ## hide all refs in changelog switch this to --branches --tags
186 git_rev_filter = --branches --tags
191 git_rev_filter = --branches --tags
187
192
188 # Set to true if your repos are exposed using the dumb protocol
193 # Set to true if your repos are exposed using the dumb protocol
189 git_update_server_info = false
194 git_update_server_info = false
190
195
191 ## RSS/ATOM feed options
196 ## RSS/ATOM feed options
192 rss_cut_off_limit = 256000
197 rss_cut_off_limit = 256000
193 rss_items_per_page = 10
198 rss_items_per_page = 10
194 rss_include_diff = false
199 rss_include_diff = false
195
200
196 ## gist URL alias, used to create nicer urls for gist. This should be an
201 ## gist URL alias, used to create nicer urls for gist. This should be an
197 ## url that does rewrites to _admin/gists/{gistid}.
202 ## url that does rewrites to _admin/gists/{gistid}.
198 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
203 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
199 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
204 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
200 gist_alias_url =
205 gist_alias_url =
201
206
202 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
207 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
203 ## used for access.
208 ## used for access.
204 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
209 ## 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.
210 ## came from the the logged in user who own this authentication token.
206 ## Additionally @TOKEN syntax can be used to bound the view to specific
211 ## Additionally @TOKEN syntax can be used to bound the view to specific
207 ## authentication token. Such view would be only accessible when used together
212 ## authentication token. Such view would be only accessible when used together
208 ## with this authentication token
213 ## with this authentication token
209 ##
214 ##
210 ## list of all views can be found under `/_admin/permissions/auth_token_access`
215 ## list of all views can be found under `/_admin/permissions/auth_token_access`
211 ## The list should be "," separated and on a single line.
216 ## The list should be "," separated and on a single line.
212 ##
217 ##
213 ## Most common views to enable:
218 ## Most common views to enable:
214 # RepoCommitsView:repo_commit_download
219 # RepoCommitsView:repo_commit_download
215 # RepoCommitsView:repo_commit_patch
220 # RepoCommitsView:repo_commit_patch
216 # RepoCommitsView:repo_commit_raw
221 # RepoCommitsView:repo_commit_raw
217 # RepoCommitsView:repo_commit_raw@TOKEN
222 # RepoCommitsView:repo_commit_raw@TOKEN
218 # RepoFilesView:repo_files_diff
223 # RepoFilesView:repo_files_diff
219 # RepoFilesView:repo_archivefile
224 # RepoFilesView:repo_archivefile
220 # RepoFilesView:repo_file_raw
225 # RepoFilesView:repo_file_raw
221 # GistView:*
226 # GistView:*
222 api_access_controllers_whitelist =
227 api_access_controllers_whitelist =
223
228
224 ## Default encoding used to convert from and to unicode
229 ## Default encoding used to convert from and to unicode
225 ## can be also a comma separated list of encoding in case of mixed encodings
230 ## can be also a comma separated list of encoding in case of mixed encodings
226 default_encoding = UTF-8
231 default_encoding = UTF-8
227
232
228 ## instance-id prefix
233 ## instance-id prefix
229 ## a prefix key for this instance used for cache invalidation when running
234 ## a prefix key for this instance used for cache invalidation when running
230 ## multiple instances of RhodeCode, make sure it's globally unique for
235 ## multiple instances of RhodeCode, make sure it's globally unique for
231 ## all running RhodeCode instances. Leave empty if you don't use it
236 ## all running RhodeCode instances. Leave empty if you don't use it
232 instance_id =
237 instance_id =
233
238
234 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
239 ## 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.
240 ## 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
241 ## 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
242 ## authentication settings. Then you can enable e.g. the internal RhodeCode auth
238 ## module to log in again and fix the settings.
243 ## module to log in again and fix the settings.
239 ##
244 ##
240 ## Available builtin plugin IDs (hash is part of the ID):
245 ## Available builtin plugin IDs (hash is part of the ID):
241 ## egg:rhodecode-enterprise-ce#rhodecode
246 ## egg:rhodecode-enterprise-ce#rhodecode
242 ## egg:rhodecode-enterprise-ce#pam
247 ## egg:rhodecode-enterprise-ce#pam
243 ## egg:rhodecode-enterprise-ce#ldap
248 ## egg:rhodecode-enterprise-ce#ldap
244 ## egg:rhodecode-enterprise-ce#jasig_cas
249 ## egg:rhodecode-enterprise-ce#jasig_cas
245 ## egg:rhodecode-enterprise-ce#headers
250 ## egg:rhodecode-enterprise-ce#headers
246 ## egg:rhodecode-enterprise-ce#crowd
251 ## egg:rhodecode-enterprise-ce#crowd
247 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
252 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
248
253
249 ## alternative return HTTP header for failed authentication. Default HTTP
254 ## alternative return HTTP header for failed authentication. Default HTTP
250 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
255 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
251 ## handling that causing a series of failed authentication calls.
256 ## handling that causing a series of failed authentication calls.
252 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
257 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
253 ## This will be served instead of default 401 on bad authentication
258 ## This will be served instead of default 401 on bad authentication
254 auth_ret_code =
259 auth_ret_code =
255
260
256 ## use special detection method when serving auth_ret_code, instead of serving
261 ## use special detection method when serving auth_ret_code, instead of serving
257 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
262 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
258 ## and then serve auth_ret_code to clients
263 ## and then serve auth_ret_code to clients
259 auth_ret_code_detection = false
264 auth_ret_code_detection = false
260
265
261 ## locking return code. When repository is locked return this HTTP code. 2XX
266 ## locking return code. When repository is locked return this HTTP code. 2XX
262 ## codes don't break the transactions while 4XX codes do
267 ## codes don't break the transactions while 4XX codes do
263 lock_ret_code = 423
268 lock_ret_code = 423
264
269
265 ## allows to change the repository location in settings page
270 ## allows to change the repository location in settings page
266 allow_repo_location_change = true
271 allow_repo_location_change = true
267
272
268 ## allows to setup custom hooks in settings page
273 ## allows to setup custom hooks in settings page
269 allow_custom_hooks_settings = true
274 allow_custom_hooks_settings = true
270
275
271 ## Generated license token required for EE edition license.
276 ## Generated license token required for EE edition license.
272 ## New generated token value can be found in Admin > settings > license page.
277 ## New generated token value can be found in Admin > settings > license page.
273 license_token =
278 license_token =
274
279
275 ## supervisor connection uri, for managing supervisor and logs.
280 ## supervisor connection uri, for managing supervisor and logs.
276 supervisor.uri =
281 supervisor.uri =
277 ## supervisord group name/id we only want this RC instance to handle
282 ## supervisord group name/id we only want this RC instance to handle
278 supervisor.group_id = dev
283 supervisor.group_id = dev
279
284
280 ## Display extended labs settings
285 ## Display extended labs settings
281 labs_settings_active = true
286 labs_settings_active = true
282
287
283 ## Custom exception store path, defaults to TMPDIR
288 ## Custom exception store path, defaults to TMPDIR
284 ## This is used to store exception from RhodeCode in shared directory
289 ## This is used to store exception from RhodeCode in shared directory
285 #exception_tracker.store_path =
290 #exception_tracker.store_path =
286
291
287 ## File store configuration. This is used to store and serve uploaded files
292 ## File store configuration. This is used to store and serve uploaded files
288 file_store.enabled = true
293 file_store.enabled = true
289 ## Storage backend, available options are: local
294 ## Storage backend, available options are: local
290 file_store.backend = local
295 file_store.backend = local
291 ## path to store the uploaded binaries
296 ## path to store the uploaded binaries
292 file_store.storage_path = %(here)s/data/file_store
297 file_store.storage_path = %(here)s/data/file_store
293
298
294
299
295 ####################################
300 ####################################
296 ### CELERY CONFIG ####
301 ### CELERY CONFIG ####
297 ####################################
302 ####################################
298 ## run: /path/to/celery worker \
303 ## run: /path/to/celery worker \
299 ## -E --beat --app rhodecode.lib.celerylib.loader \
304 ## -E --beat --app rhodecode.lib.celerylib.loader \
300 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
305 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
301 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
306 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
302
307
303 use_celery = false
308 use_celery = false
304
309
305 ## connection url to the message broker (default rabbitmq)
310 ## connection url to the message broker (default rabbitmq)
306 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
311 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
307
312
308 ## maximum tasks to execute before worker restart
313 ## maximum tasks to execute before worker restart
309 celery.max_tasks_per_child = 100
314 celery.max_tasks_per_child = 100
310
315
311 ## tasks will never be sent to the queue, but executed locally instead.
316 ## tasks will never be sent to the queue, but executed locally instead.
312 celery.task_always_eager = false
317 celery.task_always_eager = false
313
318
314 #####################################
319 #####################################
315 ### DOGPILE CACHE ####
320 ### DOGPILE CACHE ####
316 #####################################
321 #####################################
317 ## Default cache dir for caches. Putting this into a ramdisk
322 ## Default cache dir for caches. Putting this into a ramdisk
318 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
323 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
319 ## large amount of space
324 ## large amount of space
320 cache_dir = %(here)s/data
325 cache_dir = %(here)s/data
321
326
322 ## `cache_perms` cache settings for permission tree, auth TTL.
327 ## `cache_perms` cache settings for permission tree, auth TTL.
323 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
328 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
324 rc_cache.cache_perms.expiration_time = 300
329 rc_cache.cache_perms.expiration_time = 300
325
330
326 ## alternative `cache_perms` redis backend with distributed lock
331 ## alternative `cache_perms` redis backend with distributed lock
327 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
332 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
328 #rc_cache.cache_perms.expiration_time = 300
333 #rc_cache.cache_perms.expiration_time = 300
329 ## redis_expiration_time needs to be greater then expiration_time
334 ## redis_expiration_time needs to be greater then expiration_time
330 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
335 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
331 #rc_cache.cache_perms.arguments.socket_timeout = 30
336 #rc_cache.cache_perms.arguments.socket_timeout = 30
332 #rc_cache.cache_perms.arguments.host = localhost
337 #rc_cache.cache_perms.arguments.host = localhost
333 #rc_cache.cache_perms.arguments.port = 6379
338 #rc_cache.cache_perms.arguments.port = 6379
334 #rc_cache.cache_perms.arguments.db = 0
339 #rc_cache.cache_perms.arguments.db = 0
335 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
340 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
336 #rc_cache.cache_perms.arguments.distributed_lock = true
341 #rc_cache.cache_perms.arguments.distributed_lock = true
337
342
338 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
343 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
339 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
344 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
340 rc_cache.cache_repo.expiration_time = 2592000
345 rc_cache.cache_repo.expiration_time = 2592000
341
346
342 ## alternative `cache_repo` redis backend with distributed lock
347 ## alternative `cache_repo` redis backend with distributed lock
343 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
348 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
344 #rc_cache.cache_repo.expiration_time = 2592000
349 #rc_cache.cache_repo.expiration_time = 2592000
345 ## redis_expiration_time needs to be greater then expiration_time
350 ## redis_expiration_time needs to be greater then expiration_time
346 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
351 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
347 #rc_cache.cache_repo.arguments.socket_timeout = 30
352 #rc_cache.cache_repo.arguments.socket_timeout = 30
348 #rc_cache.cache_repo.arguments.host = localhost
353 #rc_cache.cache_repo.arguments.host = localhost
349 #rc_cache.cache_repo.arguments.port = 6379
354 #rc_cache.cache_repo.arguments.port = 6379
350 #rc_cache.cache_repo.arguments.db = 1
355 #rc_cache.cache_repo.arguments.db = 1
351 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
356 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
352 #rc_cache.cache_repo.arguments.distributed_lock = true
357 #rc_cache.cache_repo.arguments.distributed_lock = true
353
358
354 ## cache settings for SQL queries, this needs to use memory type backend
359 ## cache settings for SQL queries, this needs to use memory type backend
355 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
360 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
356 rc_cache.sql_cache_short.expiration_time = 30
361 rc_cache.sql_cache_short.expiration_time = 30
357
362
358 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
363 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
359 ## type backend as the objects kept are not pickle serializable
364 ## type backend as the objects kept are not pickle serializable
360 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
365 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
361 ## by default we use 96H, this is using invalidation on push anyway
366 ## by default we use 96H, this is using invalidation on push anyway
362 rc_cache.cache_repo_longterm.expiration_time = 345600
367 rc_cache.cache_repo_longterm.expiration_time = 345600
363 ## max items in LRU cache, reduce this number to save memory, and expire last used
368 ## max items in LRU cache, reduce this number to save memory, and expire last used
364 ## cached objects
369 ## cached objects
365 rc_cache.cache_repo_longterm.max_size = 10000
370 rc_cache.cache_repo_longterm.max_size = 10000
366
371
367
372
368 ####################################
373 ####################################
369 ### BEAKER SESSION ####
374 ### BEAKER SESSION ####
370 ####################################
375 ####################################
371
376
372 ## .session.type is type of storage options for the session, current allowed
377 ## .session.type is type of storage options for the session, current allowed
373 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
378 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
374 beaker.session.type = file
379 beaker.session.type = file
375 beaker.session.data_dir = %(here)s/data/sessions
380 beaker.session.data_dir = %(here)s/data/sessions
376
381
382 ## redis sessions
383 #beaker.session.type = ext:redis
384 #beaker.session.url = redis://127.0.0.1:6379/2
385
377 ## db based session, fast, and allows easy management over logged in users
386 ## db based session, fast, and allows easy management over logged in users
378 #beaker.session.type = ext:database
387 #beaker.session.type = ext:database
379 #beaker.session.table_name = db_session
388 #beaker.session.table_name = db_session
380 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
389 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
381 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
390 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
382 #beaker.session.sa.pool_recycle = 3600
391 #beaker.session.sa.pool_recycle = 3600
383 #beaker.session.sa.echo = false
392 #beaker.session.sa.echo = false
384
393
385 beaker.session.key = rhodecode
394 beaker.session.key = rhodecode
386 beaker.session.secret = develop-rc-uytcxaz
395 beaker.session.secret = develop-rc-uytcxaz
387 beaker.session.lock_dir = %(here)s/data/sessions/lock
396 beaker.session.lock_dir = %(here)s/data/sessions/lock
388
397
389 ## Secure encrypted cookie. Requires AES and AES python libraries
398 ## Secure encrypted cookie. Requires AES and AES python libraries
390 ## you must disable beaker.session.secret to use this
399 ## you must disable beaker.session.secret to use this
391 #beaker.session.encrypt_key = key_for_encryption
400 #beaker.session.encrypt_key = key_for_encryption
392 #beaker.session.validate_key = validation_key
401 #beaker.session.validate_key = validation_key
393
402
394 ## sets session as invalid(also logging out user) if it haven not been
403 ## sets session as invalid(also logging out user) if it haven not been
395 ## accessed for given amount of time in seconds
404 ## accessed for given amount of time in seconds
396 beaker.session.timeout = 2592000
405 beaker.session.timeout = 2592000
397 beaker.session.httponly = true
406 beaker.session.httponly = true
398 ## Path to use for the cookie. Set to prefix if you use prefix middleware
407 ## Path to use for the cookie. Set to prefix if you use prefix middleware
399 #beaker.session.cookie_path = /custom_prefix
408 #beaker.session.cookie_path = /custom_prefix
400
409
401 ## uncomment for https secure cookie
410 ## uncomment for https secure cookie
402 beaker.session.secure = false
411 beaker.session.secure = false
403
412
404 ## auto save the session to not to use .save()
413 ## auto save the session to not to use .save()
405 beaker.session.auto = false
414 beaker.session.auto = false
406
415
407 ## default cookie expiration time in seconds, set to `true` to set expire
416 ## default cookie expiration time in seconds, set to `true` to set expire
408 ## at browser close
417 ## at browser close
409 #beaker.session.cookie_expires = 3600
418 #beaker.session.cookie_expires = 3600
410
419
411 ###################################
420 ###################################
412 ## SEARCH INDEXING CONFIGURATION ##
421 ## SEARCH INDEXING CONFIGURATION ##
413 ###################################
422 ###################################
414 ## Full text search indexer is available in rhodecode-tools under
423 ## Full text search indexer is available in rhodecode-tools under
415 ## `rhodecode-tools index` command
424 ## `rhodecode-tools index` command
416
425
417 ## WHOOSH Backend, doesn't require additional services to run
426 ## WHOOSH Backend, doesn't require additional services to run
418 ## it works good with few dozen repos
427 ## it works good with few dozen repos
419 search.module = rhodecode.lib.index.whoosh
428 search.module = rhodecode.lib.index.whoosh
420 search.location = %(here)s/data/index
429 search.location = %(here)s/data/index
421
430
422 ########################################
431 ########################################
423 ### CHANNELSTREAM CONFIG ####
432 ### CHANNELSTREAM CONFIG ####
424 ########################################
433 ########################################
425 ## channelstream enables persistent connections and live notification
434 ## channelstream enables persistent connections and live notification
426 ## in the system. It's also used by the chat system
435 ## in the system. It's also used by the chat system
427
436
428 channelstream.enabled = false
437 channelstream.enabled = false
429
438
430 ## server address for channelstream server on the backend
439 ## server address for channelstream server on the backend
431 channelstream.server = 127.0.0.1:9800
440 channelstream.server = 127.0.0.1:9800
432
441
433 ## location of the channelstream server from outside world
442 ## location of the channelstream server from outside world
434 ## use ws:// for http or wss:// for https. This address needs to be handled
443 ## use ws:// for http or wss:// for https. This address needs to be handled
435 ## by external HTTP server such as Nginx or Apache
444 ## by external HTTP server such as Nginx or Apache
436 ## see Nginx/Apache configuration examples in our docs
445 ## see Nginx/Apache configuration examples in our docs
437 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
446 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
438 channelstream.secret = secret
447 channelstream.secret = secret
439 channelstream.history.location = %(here)s/channelstream_history
448 channelstream.history.location = %(here)s/channelstream_history
440
449
441 ## Internal application path that Javascript uses to connect into.
450 ## Internal application path that Javascript uses to connect into.
442 ## If you use proxy-prefix the prefix should be added before /_channelstream
451 ## If you use proxy-prefix the prefix should be added before /_channelstream
443 channelstream.proxy_path = /_channelstream
452 channelstream.proxy_path = /_channelstream
444
453
445
454
446 ###################################
455 ###################################
447 ## APPENLIGHT CONFIG ##
456 ## APPENLIGHT CONFIG ##
448 ###################################
457 ###################################
449
458
450 ## Appenlight is tailored to work with RhodeCode, see
459 ## Appenlight is tailored to work with RhodeCode, see
451 ## http://appenlight.com for details how to obtain an account
460 ## http://appenlight.com for details how to obtain an account
452
461
453 ## Appenlight integration enabled
462 ## Appenlight integration enabled
454 appenlight = false
463 appenlight = false
455
464
456 appenlight.server_url = https://api.appenlight.com
465 appenlight.server_url = https://api.appenlight.com
457 appenlight.api_key = YOUR_API_KEY
466 appenlight.api_key = YOUR_API_KEY
458 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
467 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
459
468
460 ## used for JS client
469 ## used for JS client
461 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
470 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
462
471
463 ## TWEAK AMOUNT OF INFO SENT HERE
472 ## TWEAK AMOUNT OF INFO SENT HERE
464
473
465 ## enables 404 error logging (default False)
474 ## enables 404 error logging (default False)
466 appenlight.report_404 = false
475 appenlight.report_404 = false
467
476
468 ## time in seconds after request is considered being slow (default 1)
477 ## time in seconds after request is considered being slow (default 1)
469 appenlight.slow_request_time = 1
478 appenlight.slow_request_time = 1
470
479
471 ## record slow requests in application
480 ## record slow requests in application
472 ## (needs to be enabled for slow datastore recording and time tracking)
481 ## (needs to be enabled for slow datastore recording and time tracking)
473 appenlight.slow_requests = true
482 appenlight.slow_requests = true
474
483
475 ## enable hooking to application loggers
484 ## enable hooking to application loggers
476 appenlight.logging = true
485 appenlight.logging = true
477
486
478 ## minimum log level for log capture
487 ## minimum log level for log capture
479 appenlight.logging.level = WARNING
488 appenlight.logging.level = WARNING
480
489
481 ## send logs only from erroneous/slow requests
490 ## send logs only from erroneous/slow requests
482 ## (saves API quota for intensive logging)
491 ## (saves API quota for intensive logging)
483 appenlight.logging_on_error = false
492 appenlight.logging_on_error = false
484
493
485 ## list of additional keywords that should be grabbed from environ object
494 ## list of additional keywords that should be grabbed from environ object
486 ## can be string with comma separated list of words in lowercase
495 ## can be string with comma separated list of words in lowercase
487 ## (by default client will always send following info:
496 ## (by default client will always send following info:
488 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
497 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
489 ## start with HTTP* this list be extended with additional keywords here
498 ## start with HTTP* this list be extended with additional keywords here
490 appenlight.environ_keys_whitelist =
499 appenlight.environ_keys_whitelist =
491
500
492 ## list of keywords that should be blanked from request object
501 ## list of keywords that should be blanked from request object
493 ## can be string with comma separated list of words in lowercase
502 ## can be string with comma separated list of words in lowercase
494 ## (by default client will always blank keys that contain following words
503 ## (by default client will always blank keys that contain following words
495 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
504 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
496 ## this list be extended with additional keywords set here
505 ## this list be extended with additional keywords set here
497 appenlight.request_keys_blacklist =
506 appenlight.request_keys_blacklist =
498
507
499 ## list of namespaces that should be ignores when gathering log entries
508 ## list of namespaces that should be ignores when gathering log entries
500 ## can be string with comma separated list of namespaces
509 ## can be string with comma separated list of namespaces
501 ## (by default the client ignores own entries: appenlight_client.client)
510 ## (by default the client ignores own entries: appenlight_client.client)
502 appenlight.log_namespace_blacklist =
511 appenlight.log_namespace_blacklist =
503
512
504 # enable debug style page
513 # enable debug style page
505 debug_style = true
514 debug_style = true
506
515
507 ###########################################
516 ###########################################
508 ### MAIN RHODECODE DATABASE CONFIG ###
517 ### MAIN RHODECODE DATABASE CONFIG ###
509 ###########################################
518 ###########################################
510 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
519 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
511 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
520 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
512 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
521 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
513 # pymysql is an alternative driver for MySQL, use in case of problems with default one
522 # pymysql is an alternative driver for MySQL, use in case of problems with default one
514 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
523 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
515
524
516 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
525 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
517
526
518 # see sqlalchemy docs for other advanced settings
527 # see sqlalchemy docs for other advanced settings
519
528
520 ## print the sql statements to output
529 ## print the sql statements to output
521 sqlalchemy.db1.echo = false
530 sqlalchemy.db1.echo = false
522 ## recycle the connections after this amount of seconds
531 ## recycle the connections after this amount of seconds
523 sqlalchemy.db1.pool_recycle = 3600
532 sqlalchemy.db1.pool_recycle = 3600
524 sqlalchemy.db1.convert_unicode = true
533 sqlalchemy.db1.convert_unicode = true
525
534
526 ## the number of connections to keep open inside the connection pool.
535 ## the number of connections to keep open inside the connection pool.
527 ## 0 indicates no limit
536 ## 0 indicates no limit
528 #sqlalchemy.db1.pool_size = 5
537 #sqlalchemy.db1.pool_size = 5
529
538
530 ## the number of connections to allow in connection pool "overflow", that is
539 ## the number of connections to allow in connection pool "overflow", that is
531 ## connections that can be opened above and beyond the pool_size setting,
540 ## connections that can be opened above and beyond the pool_size setting,
532 ## which defaults to five.
541 ## which defaults to five.
533 #sqlalchemy.db1.max_overflow = 10
542 #sqlalchemy.db1.max_overflow = 10
534
543
535 ## Connection check ping, used to detect broken database connections
544 ## Connection check ping, used to detect broken database connections
536 ## could be enabled to better handle cases if MySQL has gone away errors
545 ## could be enabled to better handle cases if MySQL has gone away errors
537 #sqlalchemy.db1.ping_connection = true
546 #sqlalchemy.db1.ping_connection = true
538
547
539 ##################
548 ##################
540 ### VCS CONFIG ###
549 ### VCS CONFIG ###
541 ##################
550 ##################
542 vcs.server.enable = true
551 vcs.server.enable = true
543 vcs.server = localhost:9900
552 vcs.server = localhost:9900
544
553
545 ## Web server connectivity protocol, responsible for web based VCS operations
554 ## Web server connectivity protocol, responsible for web based VCS operations
546 ## Available protocols are:
555 ## Available protocols are:
547 ## `http` - use http-rpc backend (default)
556 ## `http` - use http-rpc backend (default)
548 vcs.server.protocol = http
557 vcs.server.protocol = http
549
558
550 ## Push/Pull operations protocol, available options are:
559 ## Push/Pull operations protocol, available options are:
551 ## `http` - use http-rpc backend (default)
560 ## `http` - use http-rpc backend (default)
552 vcs.scm_app_implementation = http
561 vcs.scm_app_implementation = http
553
562
554 ## Push/Pull operations hooks protocol, available options are:
563 ## Push/Pull operations hooks protocol, available options are:
555 ## `http` - use http-rpc backend (default)
564 ## `http` - use http-rpc backend (default)
556 vcs.hooks.protocol = http
565 vcs.hooks.protocol = http
557
566
558 ## Host on which this instance is listening for hooks. If vcsserver is in other location
567 ## Host on which this instance is listening for hooks. If vcsserver is in other location
559 ## this should be adjusted.
568 ## this should be adjusted.
560 vcs.hooks.host = 127.0.0.1
569 vcs.hooks.host = 127.0.0.1
561
570
562 vcs.server.log_level = debug
571 vcs.server.log_level = debug
563 ## Start VCSServer with this instance as a subprocess, useful for development
572 ## Start VCSServer with this instance as a subprocess, useful for development
564 vcs.start_server = false
573 vcs.start_server = false
565
574
566 ## List of enabled VCS backends, available options are:
575 ## List of enabled VCS backends, available options are:
567 ## `hg` - mercurial
576 ## `hg` - mercurial
568 ## `git` - git
577 ## `git` - git
569 ## `svn` - subversion
578 ## `svn` - subversion
570 vcs.backends = hg, git, svn
579 vcs.backends = hg, git, svn
571
580
572 vcs.connection_timeout = 3600
581 vcs.connection_timeout = 3600
573 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
582 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
574 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
583 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
575 #vcs.svn.compatible_version = pre-1.8-compatible
584 #vcs.svn.compatible_version = pre-1.8-compatible
576
585
577
586
578 ############################################################
587 ############################################################
579 ### Subversion proxy support (mod_dav_svn) ###
588 ### Subversion proxy support (mod_dav_svn) ###
580 ### Maps RhodeCode repo groups into SVN paths for Apache ###
589 ### Maps RhodeCode repo groups into SVN paths for Apache ###
581 ############################################################
590 ############################################################
582 ## Enable or disable the config file generation.
591 ## Enable or disable the config file generation.
583 svn.proxy.generate_config = false
592 svn.proxy.generate_config = false
584 ## Generate config file with `SVNListParentPath` set to `On`.
593 ## Generate config file with `SVNListParentPath` set to `On`.
585 svn.proxy.list_parent_path = true
594 svn.proxy.list_parent_path = true
586 ## Set location and file name of generated config file.
595 ## Set location and file name of generated config file.
587 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
596 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
588 ## alternative mod_dav config template. This needs to be a mako template
597 ## alternative mod_dav config template. This needs to be a mako template
589 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
598 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
590 ## Used as a prefix to the `Location` block in the generated config file.
599 ## Used as a prefix to the `Location` block in the generated config file.
591 ## In most cases it should be set to `/`.
600 ## In most cases it should be set to `/`.
592 svn.proxy.location_root = /
601 svn.proxy.location_root = /
593 ## Command to reload the mod dav svn configuration on change.
602 ## Command to reload the mod dav svn configuration on change.
594 ## Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
603 ## 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
604 ## Make sure user who runs RhodeCode process is allowed to reload Apache
596 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
605 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
597 ## If the timeout expires before the reload command finishes, the command will
606 ## If the timeout expires before the reload command finishes, the command will
598 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
607 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
599 #svn.proxy.reload_timeout = 10
608 #svn.proxy.reload_timeout = 10
600
609
601 ############################################################
610 ############################################################
602 ### SSH Support Settings ###
611 ### SSH Support Settings ###
603 ############################################################
612 ############################################################
604
613
605 ## Defines if a custom authorized_keys file should be created and written on
614 ## Defines if a custom authorized_keys file should be created and written on
606 ## any change user ssh keys. Setting this to false also disables possibility
615 ## any change user ssh keys. Setting this to false also disables possibility
607 ## of adding SSH keys by users from web interface. Super admins can still
616 ## of adding SSH keys by users from web interface. Super admins can still
608 ## manage SSH Keys.
617 ## manage SSH Keys.
609 ssh.generate_authorized_keyfile = false
618 ssh.generate_authorized_keyfile = false
610
619
611 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
620 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
612 # ssh.authorized_keys_ssh_opts =
621 # ssh.authorized_keys_ssh_opts =
613
622
614 ## Path to the authorized_keys file where the generate entries are placed.
623 ## Path to the authorized_keys file where the generate entries are placed.
615 ## It is possible to have multiple key files specified in `sshd_config` e.g.
624 ## It is possible to have multiple key files specified in `sshd_config` e.g.
616 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
625 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
617 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
626 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
618
627
619 ## Command to execute the SSH wrapper. The binary is available in the
628 ## Command to execute the SSH wrapper. The binary is available in the
620 ## RhodeCode installation directory.
629 ## RhodeCode installation directory.
621 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
630 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
622 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
631 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
623
632
624 ## Allow shell when executing the ssh-wrapper command
633 ## Allow shell when executing the ssh-wrapper command
625 ssh.wrapper_cmd_allow_shell = false
634 ssh.wrapper_cmd_allow_shell = false
626
635
627 ## Enables logging, and detailed output send back to the client during SSH
636 ## Enables logging, and detailed output send back to the client during SSH
628 ## operations. Useful for debugging, shouldn't be used in production.
637 ## operations. Useful for debugging, shouldn't be used in production.
629 ssh.enable_debug_logging = true
638 ssh.enable_debug_logging = true
630
639
631 ## Paths to binary executable, by default they are the names, but we can
640 ## Paths to binary executable, by default they are the names, but we can
632 ## override them if we want to use a custom one
641 ## override them if we want to use a custom one
633 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
642 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
634 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
643 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
635 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
644 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
636
645
637 ## Enables SSH key generator web interface. Disabling this still allows users
646 ## Enables SSH key generator web interface. Disabling this still allows users
638 ## to add their own keys.
647 ## to add their own keys.
639 ssh.enable_ui_key_generator = true
648 ssh.enable_ui_key_generator = true
640
649
641
650
642 ## Dummy marker to add new entries after.
651 ## Dummy marker to add new entries after.
643 ## Add any custom entries below. Please don't remove.
652 ## Add any custom entries below. Please don't remove.
644 custom.conf = 1
653 custom.conf = 1
645
654
646
655
647 ################################
656 ################################
648 ### LOGGING CONFIGURATION ####
657 ### LOGGING CONFIGURATION ####
649 ################################
658 ################################
650 [loggers]
659 [loggers]
651 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
660 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
652
661
653 [handlers]
662 [handlers]
654 keys = console, console_sql
663 keys = console, console_sql
655
664
656 [formatters]
665 [formatters]
657 keys = generic, color_formatter, color_formatter_sql
666 keys = generic, color_formatter, color_formatter_sql
658
667
659 #############
668 #############
660 ## LOGGERS ##
669 ## LOGGERS ##
661 #############
670 #############
662 [logger_root]
671 [logger_root]
663 level = NOTSET
672 level = NOTSET
664 handlers = console
673 handlers = console
665
674
666 [logger_sqlalchemy]
675 [logger_sqlalchemy]
667 level = INFO
676 level = INFO
668 handlers = console_sql
677 handlers = console_sql
669 qualname = sqlalchemy.engine
678 qualname = sqlalchemy.engine
670 propagate = 0
679 propagate = 0
671
680
672 [logger_beaker]
681 [logger_beaker]
673 level = DEBUG
682 level = DEBUG
674 handlers =
683 handlers =
675 qualname = beaker.container
684 qualname = beaker.container
676 propagate = 1
685 propagate = 1
677
686
678 [logger_rhodecode]
687 [logger_rhodecode]
679 level = DEBUG
688 level = DEBUG
680 handlers =
689 handlers =
681 qualname = rhodecode
690 qualname = rhodecode
682 propagate = 1
691 propagate = 1
683
692
684 [logger_ssh_wrapper]
693 [logger_ssh_wrapper]
685 level = DEBUG
694 level = DEBUG
686 handlers =
695 handlers =
687 qualname = ssh_wrapper
696 qualname = ssh_wrapper
688 propagate = 1
697 propagate = 1
689
698
690 [logger_celery]
699 [logger_celery]
691 level = DEBUG
700 level = DEBUG
692 handlers =
701 handlers =
693 qualname = celery
702 qualname = celery
694
703
695
704
696 ##############
705 ##############
697 ## HANDLERS ##
706 ## HANDLERS ##
698 ##############
707 ##############
699
708
700 [handler_console]
709 [handler_console]
701 class = StreamHandler
710 class = StreamHandler
702 args = (sys.stderr, )
711 args = (sys.stderr, )
703 level = DEBUG
712 level = DEBUG
704 formatter = color_formatter
713 formatter = color_formatter
705
714
706 [handler_console_sql]
715 [handler_console_sql]
707 # "level = DEBUG" logs SQL queries and results.
716 # "level = DEBUG" logs SQL queries and results.
708 # "level = INFO" logs SQL queries.
717 # "level = INFO" logs SQL queries.
709 # "level = WARN" logs neither. (Recommended for production systems.)
718 # "level = WARN" logs neither. (Recommended for production systems.)
710 class = StreamHandler
719 class = StreamHandler
711 args = (sys.stderr, )
720 args = (sys.stderr, )
712 level = WARN
721 level = WARN
713 formatter = color_formatter_sql
722 formatter = color_formatter_sql
714
723
715 ################
724 ################
716 ## FORMATTERS ##
725 ## FORMATTERS ##
717 ################
726 ################
718
727
719 [formatter_generic]
728 [formatter_generic]
720 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
729 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
721 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
730 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
722 datefmt = %Y-%m-%d %H:%M:%S
731 datefmt = %Y-%m-%d %H:%M:%S
723
732
724 [formatter_color_formatter]
733 [formatter_color_formatter]
725 class = rhodecode.lib.logging_formatter.ColorFormatter
734 class = rhodecode.lib.logging_formatter.ColorFormatter
726 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
735 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
727 datefmt = %Y-%m-%d %H:%M:%S
736 datefmt = %Y-%m-%d %H:%M:%S
728
737
729 [formatter_color_formatter_sql]
738 [formatter_color_formatter_sql]
730 class = rhodecode.lib.logging_formatter.ColorFormatterSql
739 class = rhodecode.lib.logging_formatter.ColorFormatterSql
731 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
740 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
732 datefmt = %Y-%m-%d %H:%M:%S
741 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,152 +1,154 b''
1 """
1 """
2 gunicorn config extension and hooks. Sets additional configuration that is
2 gunicorn config extension and hooks. Sets additional configuration that is
3 available post the .ini config.
3 available post the .ini config.
4
4
5 - workers = ${cpu_number}
5 - workers = ${cpu_number}
6 - threads = 1
6 - threads = 1
7 - proc_name = ${gunicorn_proc_name}
7 - proc_name = ${gunicorn_proc_name}
8 - worker_class = sync
8 - worker_class = sync
9 - worker_connections = 10
9 - worker_connections = 10
10 - max_requests = 1000
10 - max_requests = 1000
11 - max_requests_jitter = 30
11 - max_requests_jitter = 30
12 - timeout = 21600
12 - timeout = 21600
13
13
14 """
14 """
15
15
16 import multiprocessing
16 import multiprocessing
17 import sys
17 import sys
18 import time
18 import time
19 import datetime
19 import datetime
20 import threading
20 import threading
21 import traceback
21 import traceback
22 from gunicorn.glogging import Logger
22 from gunicorn.glogging import Logger
23
23
24
24
25 # GLOBAL
25 # GLOBAL
26 errorlog = '-'
26 errorlog = '-'
27 accesslog = '-'
27 accesslog = '-'
28 loglevel = 'debug'
28 loglevel = 'debug'
29
29
30 # SECURITY
30 # SECURITY
31
31
32 # The maximum size of HTTP request line in bytes.
32 # The maximum size of HTTP request line in bytes.
33 limit_request_line = 4094
33 # 0 for unlimited
34 limit_request_line = 0
34
35
35 # Limit the number of HTTP headers fields in a request.
36 # Limit the number of HTTP headers fields in a request.
36 limit_request_fields = 1024
37 # By default this value is 100 and can’t be larger than 32768.
38 limit_request_fields = 10240
37
39
38 # Limit the allowed size of an HTTP request header field.
40 # Limit the allowed size of an HTTP request header field.
39 # Value is a positive number or 0.
41 # Value is a positive number or 0.
40 # Setting it to 0 will allow unlimited header field sizes.
42 # Setting it to 0 will allow unlimited header field sizes.
41 limit_request_field_size = 0
43 limit_request_field_size = 0
42
44
43
45
44 # Timeout for graceful workers restart.
46 # Timeout for graceful workers restart.
45 # After receiving a restart signal, workers have this much time to finish
47 # After receiving a restart signal, workers have this much time to finish
46 # serving requests. Workers still alive after the timeout (starting from the
48 # serving requests. Workers still alive after the timeout (starting from the
47 # receipt of the restart signal) are force killed.
49 # receipt of the restart signal) are force killed.
48 graceful_timeout = 30
50 graceful_timeout = 30
49
51
50
52
51 # The number of seconds to wait for requests on a Keep-Alive connection.
53 # The number of seconds to wait for requests on a Keep-Alive connection.
52 # Generally set in the 1-5 seconds range.
54 # Generally set in the 1-5 seconds range.
53 keepalive = 2
55 keepalive = 2
54
56
55
57
56 # SERVER MECHANICS
58 # SERVER MECHANICS
57 # None == system temp dir
59 # None == system temp dir
58 # worker_tmp_dir is recommended to be set to some tmpfs
60 # worker_tmp_dir is recommended to be set to some tmpfs
59 worker_tmp_dir = None
61 worker_tmp_dir = None
60 tmp_upload_dir = None
62 tmp_upload_dir = None
61
63
62 # Custom log format
64 # Custom log format
63 access_log_format = (
65 access_log_format = (
64 '%(t)s [%(p)-8s] GNCRN %(h)-15s rqt:%(L)s %(s)s %(b)-6s "%(m)s:%(U)s %(q)s" usr:%(u)s "%(f)s" "%(a)s"')
66 '%(t)s [%(p)-8s] GNCRN %(h)-15s rqt:%(L)s %(s)s %(b)-6s "%(m)s:%(U)s %(q)s" usr:%(u)s "%(f)s" "%(a)s"')
65
67
66 # self adjust workers based on CPU count
68 # self adjust workers based on CPU count
67 # workers = multiprocessing.cpu_count() * 2 + 1
69 # workers = multiprocessing.cpu_count() * 2 + 1
68
70
69
71
70 def post_fork(server, worker):
72 def post_fork(server, worker):
71 server.log.info("[<%-10s>] WORKER spawned", worker.pid)
73 server.log.info("[<%-10s>] WORKER spawned", worker.pid)
72
74
73
75
74 def pre_fork(server, worker):
76 def pre_fork(server, worker):
75 pass
77 pass
76
78
77
79
78 def pre_exec(server):
80 def pre_exec(server):
79 server.log.info("Forked child, re-executing.")
81 server.log.info("Forked child, re-executing.")
80
82
81
83
82 def on_starting(server):
84 def on_starting(server):
83 server.log.info("Server is starting.")
85 server.log.info("Server is starting.")
84
86
85
87
86 def when_ready(server):
88 def when_ready(server):
87 server.log.info("Server is ready. Spawning workers")
89 server.log.info("Server is ready. Spawning workers")
88
90
89
91
90 def on_reload(server):
92 def on_reload(server):
91 pass
93 pass
92
94
93
95
94 def worker_int(worker):
96 def worker_int(worker):
95 worker.log.info("[<%-10s>] worker received INT or QUIT signal", worker.pid)
97 worker.log.info("[<%-10s>] worker received INT or QUIT signal", worker.pid)
96
98
97 # get traceback info, on worker crash
99 # get traceback info, on worker crash
98 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
100 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
99 code = []
101 code = []
100 for thread_id, stack in sys._current_frames().items():
102 for thread_id, stack in sys._current_frames().items():
101 code.append(
103 code.append(
102 "\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id))
104 "\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id))
103 for fname, lineno, name, line in traceback.extract_stack(stack):
105 for fname, lineno, name, line in traceback.extract_stack(stack):
104 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
106 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
105 if line:
107 if line:
106 code.append(" %s" % (line.strip()))
108 code.append(" %s" % (line.strip()))
107 worker.log.debug("\n".join(code))
109 worker.log.debug("\n".join(code))
108
110
109
111
110 def worker_abort(worker):
112 def worker_abort(worker):
111 worker.log.info("[<%-10s>] worker received SIGABRT signal", worker.pid)
113 worker.log.info("[<%-10s>] worker received SIGABRT signal", worker.pid)
112
114
113
115
114 def worker_exit(server, worker):
116 def worker_exit(server, worker):
115 worker.log.info("[<%-10s>] worker exit", worker.pid)
117 worker.log.info("[<%-10s>] worker exit", worker.pid)
116
118
117
119
118 def child_exit(server, worker):
120 def child_exit(server, worker):
119 worker.log.info("[<%-10s>] worker child exit", worker.pid)
121 worker.log.info("[<%-10s>] worker child exit", worker.pid)
120
122
121
123
122 def pre_request(worker, req):
124 def pre_request(worker, req):
123 worker.start_time = time.time()
125 worker.start_time = time.time()
124 worker.log.debug(
126 worker.log.debug(
125 "GNCRN PRE WORKER [cnt:%s]: %s %s", worker.nr, req.method, req.path)
127 "GNCRN PRE WORKER [cnt:%s]: %s %s", worker.nr, req.method, req.path)
126
128
127
129
128 def post_request(worker, req, environ, resp):
130 def post_request(worker, req, environ, resp):
129 total_time = time.time() - worker.start_time
131 total_time = time.time() - worker.start_time
130 worker.log.debug(
132 worker.log.debug(
131 "GNCRN POST WORKER [cnt:%s]: %s %s resp: %s, Load Time: %.3fs",
133 "GNCRN POST WORKER [cnt:%s]: %s %s resp: %s, Load Time: %.3fs",
132 worker.nr, req.method, req.path, resp.status_code, total_time)
134 worker.nr, req.method, req.path, resp.status_code, total_time)
133
135
134
136
135 class RhodeCodeLogger(Logger):
137 class RhodeCodeLogger(Logger):
136 """
138 """
137 Custom Logger that allows some customization that gunicorn doesn't allow
139 Custom Logger that allows some customization that gunicorn doesn't allow
138 """
140 """
139
141
140 datefmt = r"%Y-%m-%d %H:%M:%S"
142 datefmt = r"%Y-%m-%d %H:%M:%S"
141
143
142 def __init__(self, cfg):
144 def __init__(self, cfg):
143 Logger.__init__(self, cfg)
145 Logger.__init__(self, cfg)
144
146
145 def now(self):
147 def now(self):
146 """ return date in RhodeCode Log format """
148 """ return date in RhodeCode Log format """
147 now = time.time()
149 now = time.time()
148 msecs = int((now - long(now)) * 1000)
150 msecs = int((now - long(now)) * 1000)
149 return time.strftime(self.datefmt, time.localtime(now)) + '.{0:03d}'.format(msecs)
151 return time.strftime(self.datefmt, time.localtime(now)) + '.{0:03d}'.format(msecs)
150
152
151
153
152 logger_class = RhodeCodeLogger
154 logger_class = RhodeCodeLogger
@@ -1,705 +1,714 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 concurrent 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 ## Pick algorithm for encryption. Either fernet (more secure) or aes (default)
112 ## fernet is safer, and we strongly recommend switching to it.
113 ## Due to backward compatibility aes is used as default.
114 #rhodecode.encrypted_values.algorithm = fernet
115
111 ## return gzipped responses from RhodeCode (static files/application)
116 ## return gzipped responses from RhodeCode (static files/application)
112 gzip_responses = false
117 gzip_responses = false
113
118
114 ## auto-generate javascript routes file on startup
119 ## auto-generate javascript routes file on startup
115 generate_js_files = false
120 generate_js_files = false
116
121
117 ## System global default language.
122 ## System global default language.
118 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
123 ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
119 lang = en
124 lang = en
120
125
121 ## Perform a full repository scan and import on each server start.
126 ## Perform a full repository scan and import on each server start.
122 ## Settings this to true could lead to very long startup time.
127 ## Settings this to true could lead to very long startup time.
123 startup.import_repos = false
128 startup.import_repos = false
124
129
125 ## Uncomment and set this path to use archive download cache.
130 ## Uncomment and set this path to use archive download cache.
126 ## Once enabled, generated archives will be cached at this location
131 ## Once enabled, generated archives will be cached at this location
127 ## and served from the cache during subsequent requests for the same archive of
132 ## and served from the cache during subsequent requests for the same archive of
128 ## the repository.
133 ## the repository.
129 #archive_cache_dir = /tmp/tarballcache
134 #archive_cache_dir = /tmp/tarballcache
130
135
131 ## URL at which the application is running. This is used for Bootstrapping
136 ## 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
137 ## 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.
138 ## SSH calls. Set this for events to receive proper url for SSH calls.
134 app.base_url = http://rhodecode.local
139 app.base_url = http://rhodecode.local
135
140
136 ## Unique application ID. Should be a random unique string for security.
141 ## Unique application ID. Should be a random unique string for security.
137 app_instance_uuid = rc-production
142 app_instance_uuid = rc-production
138
143
139 ## Cut off limit for large diffs (size in bytes). If overall diff size on
144 ## 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
145 ## commit, or pull request exceeds this limit this diff will be displayed
141 ## partially. E.g 512000 == 512Kb
146 ## partially. E.g 512000 == 512Kb
142 cut_off_limit_diff = 512000
147 cut_off_limit_diff = 512000
143
148
144 ## Cut off limit for large files inside diffs (size in bytes). Each individual
149 ## 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.
150 ## file inside diff which exceeds this limit will be displayed partially.
146 ## E.g 128000 == 128Kb
151 ## E.g 128000 == 128Kb
147 cut_off_limit_file = 128000
152 cut_off_limit_file = 128000
148
153
149 ## use cached version of vcs repositories everywhere. Recommended to be `true`
154 ## use cached version of vcs repositories everywhere. Recommended to be `true`
150 vcs_full_cache = true
155 vcs_full_cache = true
151
156
152 ## Force https in RhodeCode, fixes https redirects, assumes it's always https.
157 ## 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
158 ## Normally this is controlled by proper http flags sent from http server
154 force_https = false
159 force_https = false
155
160
156 ## use Strict-Transport-Security headers
161 ## use Strict-Transport-Security headers
157 use_htsts = false
162 use_htsts = false
158
163
159 ## git rev filter option, --all is the default filter, if you need to
164 ## git rev filter option, --all is the default filter, if you need to
160 ## hide all refs in changelog switch this to --branches --tags
165 ## hide all refs in changelog switch this to --branches --tags
161 git_rev_filter = --branches --tags
166 git_rev_filter = --branches --tags
162
167
163 # Set to true if your repos are exposed using the dumb protocol
168 # Set to true if your repos are exposed using the dumb protocol
164 git_update_server_info = false
169 git_update_server_info = false
165
170
166 ## RSS/ATOM feed options
171 ## RSS/ATOM feed options
167 rss_cut_off_limit = 256000
172 rss_cut_off_limit = 256000
168 rss_items_per_page = 10
173 rss_items_per_page = 10
169 rss_include_diff = false
174 rss_include_diff = false
170
175
171 ## gist URL alias, used to create nicer urls for gist. This should be an
176 ## gist URL alias, used to create nicer urls for gist. This should be an
172 ## url that does rewrites to _admin/gists/{gistid}.
177 ## url that does rewrites to _admin/gists/{gistid}.
173 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
178 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
174 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
179 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
175 gist_alias_url =
180 gist_alias_url =
176
181
177 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
182 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
178 ## used for access.
183 ## used for access.
179 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
184 ## 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.
185 ## came from the the logged in user who own this authentication token.
181 ## Additionally @TOKEN syntax can be used to bound the view to specific
186 ## Additionally @TOKEN syntax can be used to bound the view to specific
182 ## authentication token. Such view would be only accessible when used together
187 ## authentication token. Such view would be only accessible when used together
183 ## with this authentication token
188 ## with this authentication token
184 ##
189 ##
185 ## list of all views can be found under `/_admin/permissions/auth_token_access`
190 ## list of all views can be found under `/_admin/permissions/auth_token_access`
186 ## The list should be "," separated and on a single line.
191 ## The list should be "," separated and on a single line.
187 ##
192 ##
188 ## Most common views to enable:
193 ## Most common views to enable:
189 # RepoCommitsView:repo_commit_download
194 # RepoCommitsView:repo_commit_download
190 # RepoCommitsView:repo_commit_patch
195 # RepoCommitsView:repo_commit_patch
191 # RepoCommitsView:repo_commit_raw
196 # RepoCommitsView:repo_commit_raw
192 # RepoCommitsView:repo_commit_raw@TOKEN
197 # RepoCommitsView:repo_commit_raw@TOKEN
193 # RepoFilesView:repo_files_diff
198 # RepoFilesView:repo_files_diff
194 # RepoFilesView:repo_archivefile
199 # RepoFilesView:repo_archivefile
195 # RepoFilesView:repo_file_raw
200 # RepoFilesView:repo_file_raw
196 # GistView:*
201 # GistView:*
197 api_access_controllers_whitelist =
202 api_access_controllers_whitelist =
198
203
199 ## Default encoding used to convert from and to unicode
204 ## Default encoding used to convert from and to unicode
200 ## can be also a comma separated list of encoding in case of mixed encodings
205 ## can be also a comma separated list of encoding in case of mixed encodings
201 default_encoding = UTF-8
206 default_encoding = UTF-8
202
207
203 ## instance-id prefix
208 ## instance-id prefix
204 ## a prefix key for this instance used for cache invalidation when running
209 ## a prefix key for this instance used for cache invalidation when running
205 ## multiple instances of RhodeCode, make sure it's globally unique for
210 ## multiple instances of RhodeCode, make sure it's globally unique for
206 ## all running RhodeCode instances. Leave empty if you don't use it
211 ## all running RhodeCode instances. Leave empty if you don't use it
207 instance_id =
212 instance_id =
208
213
209 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
214 ## 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.
215 ## 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
216 ## 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
217 ## authentication settings. Then you can enable e.g. the internal RhodeCode auth
213 ## module to log in again and fix the settings.
218 ## module to log in again and fix the settings.
214 ##
219 ##
215 ## Available builtin plugin IDs (hash is part of the ID):
220 ## Available builtin plugin IDs (hash is part of the ID):
216 ## egg:rhodecode-enterprise-ce#rhodecode
221 ## egg:rhodecode-enterprise-ce#rhodecode
217 ## egg:rhodecode-enterprise-ce#pam
222 ## egg:rhodecode-enterprise-ce#pam
218 ## egg:rhodecode-enterprise-ce#ldap
223 ## egg:rhodecode-enterprise-ce#ldap
219 ## egg:rhodecode-enterprise-ce#jasig_cas
224 ## egg:rhodecode-enterprise-ce#jasig_cas
220 ## egg:rhodecode-enterprise-ce#headers
225 ## egg:rhodecode-enterprise-ce#headers
221 ## egg:rhodecode-enterprise-ce#crowd
226 ## egg:rhodecode-enterprise-ce#crowd
222 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
227 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
223
228
224 ## alternative return HTTP header for failed authentication. Default HTTP
229 ## alternative return HTTP header for failed authentication. Default HTTP
225 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
230 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
226 ## handling that causing a series of failed authentication calls.
231 ## handling that causing a series of failed authentication calls.
227 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
232 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
228 ## This will be served instead of default 401 on bad authentication
233 ## This will be served instead of default 401 on bad authentication
229 auth_ret_code =
234 auth_ret_code =
230
235
231 ## use special detection method when serving auth_ret_code, instead of serving
236 ## use special detection method when serving auth_ret_code, instead of serving
232 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
237 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
233 ## and then serve auth_ret_code to clients
238 ## and then serve auth_ret_code to clients
234 auth_ret_code_detection = false
239 auth_ret_code_detection = false
235
240
236 ## locking return code. When repository is locked return this HTTP code. 2XX
241 ## locking return code. When repository is locked return this HTTP code. 2XX
237 ## codes don't break the transactions while 4XX codes do
242 ## codes don't break the transactions while 4XX codes do
238 lock_ret_code = 423
243 lock_ret_code = 423
239
244
240 ## allows to change the repository location in settings page
245 ## allows to change the repository location in settings page
241 allow_repo_location_change = true
246 allow_repo_location_change = true
242
247
243 ## allows to setup custom hooks in settings page
248 ## allows to setup custom hooks in settings page
244 allow_custom_hooks_settings = true
249 allow_custom_hooks_settings = true
245
250
246 ## Generated license token required for EE edition license.
251 ## Generated license token required for EE edition license.
247 ## New generated token value can be found in Admin > settings > license page.
252 ## New generated token value can be found in Admin > settings > license page.
248 license_token =
253 license_token =
249
254
250 ## supervisor connection uri, for managing supervisor and logs.
255 ## supervisor connection uri, for managing supervisor and logs.
251 supervisor.uri =
256 supervisor.uri =
252 ## supervisord group name/id we only want this RC instance to handle
257 ## supervisord group name/id we only want this RC instance to handle
253 supervisor.group_id = prod
258 supervisor.group_id = prod
254
259
255 ## Display extended labs settings
260 ## Display extended labs settings
256 labs_settings_active = true
261 labs_settings_active = true
257
262
258 ## Custom exception store path, defaults to TMPDIR
263 ## Custom exception store path, defaults to TMPDIR
259 ## This is used to store exception from RhodeCode in shared directory
264 ## This is used to store exception from RhodeCode in shared directory
260 #exception_tracker.store_path =
265 #exception_tracker.store_path =
261
266
262 ## File store configuration. This is used to store and serve uploaded files
267 ## File store configuration. This is used to store and serve uploaded files
263 file_store.enabled = true
268 file_store.enabled = true
264 ## Storage backend, available options are: local
269 ## Storage backend, available options are: local
265 file_store.backend = local
270 file_store.backend = local
266 ## path to store the uploaded binaries
271 ## path to store the uploaded binaries
267 file_store.storage_path = %(here)s/data/file_store
272 file_store.storage_path = %(here)s/data/file_store
268
273
269
274
270 ####################################
275 ####################################
271 ### CELERY CONFIG ####
276 ### CELERY CONFIG ####
272 ####################################
277 ####################################
273 ## run: /path/to/celery worker \
278 ## run: /path/to/celery worker \
274 ## -E --beat --app rhodecode.lib.celerylib.loader \
279 ## -E --beat --app rhodecode.lib.celerylib.loader \
275 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
280 ## --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler \
276 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
281 ## --loglevel DEBUG --ini /path/to/rhodecode.ini
277
282
278 use_celery = false
283 use_celery = false
279
284
280 ## connection url to the message broker (default rabbitmq)
285 ## connection url to the message broker (default rabbitmq)
281 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
286 celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
282
287
283 ## maximum tasks to execute before worker restart
288 ## maximum tasks to execute before worker restart
284 celery.max_tasks_per_child = 100
289 celery.max_tasks_per_child = 100
285
290
286 ## tasks will never be sent to the queue, but executed locally instead.
291 ## tasks will never be sent to the queue, but executed locally instead.
287 celery.task_always_eager = false
292 celery.task_always_eager = false
288
293
289 #####################################
294 #####################################
290 ### DOGPILE CACHE ####
295 ### DOGPILE CACHE ####
291 #####################################
296 #####################################
292 ## Default cache dir for caches. Putting this into a ramdisk
297 ## Default cache dir for caches. Putting this into a ramdisk
293 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
298 ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require
294 ## large amount of space
299 ## large amount of space
295 cache_dir = %(here)s/data
300 cache_dir = %(here)s/data
296
301
297 ## `cache_perms` cache settings for permission tree, auth TTL.
302 ## `cache_perms` cache settings for permission tree, auth TTL.
298 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
303 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
299 rc_cache.cache_perms.expiration_time = 300
304 rc_cache.cache_perms.expiration_time = 300
300
305
301 ## alternative `cache_perms` redis backend with distributed lock
306 ## alternative `cache_perms` redis backend with distributed lock
302 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
307 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
303 #rc_cache.cache_perms.expiration_time = 300
308 #rc_cache.cache_perms.expiration_time = 300
304 ## redis_expiration_time needs to be greater then expiration_time
309 ## redis_expiration_time needs to be greater then expiration_time
305 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
310 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
306 #rc_cache.cache_perms.arguments.socket_timeout = 30
311 #rc_cache.cache_perms.arguments.socket_timeout = 30
307 #rc_cache.cache_perms.arguments.host = localhost
312 #rc_cache.cache_perms.arguments.host = localhost
308 #rc_cache.cache_perms.arguments.port = 6379
313 #rc_cache.cache_perms.arguments.port = 6379
309 #rc_cache.cache_perms.arguments.db = 0
314 #rc_cache.cache_perms.arguments.db = 0
310 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
315 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
311 #rc_cache.cache_perms.arguments.distributed_lock = true
316 #rc_cache.cache_perms.arguments.distributed_lock = true
312
317
313 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
318 ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS
314 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
319 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
315 rc_cache.cache_repo.expiration_time = 2592000
320 rc_cache.cache_repo.expiration_time = 2592000
316
321
317 ## alternative `cache_repo` redis backend with distributed lock
322 ## alternative `cache_repo` redis backend with distributed lock
318 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
323 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
319 #rc_cache.cache_repo.expiration_time = 2592000
324 #rc_cache.cache_repo.expiration_time = 2592000
320 ## redis_expiration_time needs to be greater then expiration_time
325 ## redis_expiration_time needs to be greater then expiration_time
321 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
326 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
322 #rc_cache.cache_repo.arguments.socket_timeout = 30
327 #rc_cache.cache_repo.arguments.socket_timeout = 30
323 #rc_cache.cache_repo.arguments.host = localhost
328 #rc_cache.cache_repo.arguments.host = localhost
324 #rc_cache.cache_repo.arguments.port = 6379
329 #rc_cache.cache_repo.arguments.port = 6379
325 #rc_cache.cache_repo.arguments.db = 1
330 #rc_cache.cache_repo.arguments.db = 1
326 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
331 ## more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
327 #rc_cache.cache_repo.arguments.distributed_lock = true
332 #rc_cache.cache_repo.arguments.distributed_lock = true
328
333
329 ## cache settings for SQL queries, this needs to use memory type backend
334 ## cache settings for SQL queries, this needs to use memory type backend
330 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
335 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
331 rc_cache.sql_cache_short.expiration_time = 30
336 rc_cache.sql_cache_short.expiration_time = 30
332
337
333 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
338 ## `cache_repo_longterm` cache for repo object instances, this needs to use memory
334 ## type backend as the objects kept are not pickle serializable
339 ## type backend as the objects kept are not pickle serializable
335 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
340 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
336 ## by default we use 96H, this is using invalidation on push anyway
341 ## by default we use 96H, this is using invalidation on push anyway
337 rc_cache.cache_repo_longterm.expiration_time = 345600
342 rc_cache.cache_repo_longterm.expiration_time = 345600
338 ## max items in LRU cache, reduce this number to save memory, and expire last used
343 ## max items in LRU cache, reduce this number to save memory, and expire last used
339 ## cached objects
344 ## cached objects
340 rc_cache.cache_repo_longterm.max_size = 10000
345 rc_cache.cache_repo_longterm.max_size = 10000
341
346
342
347
343 ####################################
348 ####################################
344 ### BEAKER SESSION ####
349 ### BEAKER SESSION ####
345 ####################################
350 ####################################
346
351
347 ## .session.type is type of storage options for the session, current allowed
352 ## .session.type is type of storage options for the session, current allowed
348 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
353 ## types are file, ext:memcached, ext:redis, ext:database, and memory (default).
349 beaker.session.type = file
354 beaker.session.type = file
350 beaker.session.data_dir = %(here)s/data/sessions
355 beaker.session.data_dir = %(here)s/data/sessions
351
356
357 ## redis sessions
358 #beaker.session.type = ext:redis
359 #beaker.session.url = redis://127.0.0.1:6379/2
360
352 ## db based session, fast, and allows easy management over logged in users
361 ## db based session, fast, and allows easy management over logged in users
353 #beaker.session.type = ext:database
362 #beaker.session.type = ext:database
354 #beaker.session.table_name = db_session
363 #beaker.session.table_name = db_session
355 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
364 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
356 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
365 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
357 #beaker.session.sa.pool_recycle = 3600
366 #beaker.session.sa.pool_recycle = 3600
358 #beaker.session.sa.echo = false
367 #beaker.session.sa.echo = false
359
368
360 beaker.session.key = rhodecode
369 beaker.session.key = rhodecode
361 beaker.session.secret = production-rc-uytcxaz
370 beaker.session.secret = production-rc-uytcxaz
362 beaker.session.lock_dir = %(here)s/data/sessions/lock
371 beaker.session.lock_dir = %(here)s/data/sessions/lock
363
372
364 ## Secure encrypted cookie. Requires AES and AES python libraries
373 ## Secure encrypted cookie. Requires AES and AES python libraries
365 ## you must disable beaker.session.secret to use this
374 ## you must disable beaker.session.secret to use this
366 #beaker.session.encrypt_key = key_for_encryption
375 #beaker.session.encrypt_key = key_for_encryption
367 #beaker.session.validate_key = validation_key
376 #beaker.session.validate_key = validation_key
368
377
369 ## sets session as invalid(also logging out user) if it haven not been
378 ## sets session as invalid(also logging out user) if it haven not been
370 ## accessed for given amount of time in seconds
379 ## accessed for given amount of time in seconds
371 beaker.session.timeout = 2592000
380 beaker.session.timeout = 2592000
372 beaker.session.httponly = true
381 beaker.session.httponly = true
373 ## Path to use for the cookie. Set to prefix if you use prefix middleware
382 ## Path to use for the cookie. Set to prefix if you use prefix middleware
374 #beaker.session.cookie_path = /custom_prefix
383 #beaker.session.cookie_path = /custom_prefix
375
384
376 ## uncomment for https secure cookie
385 ## uncomment for https secure cookie
377 beaker.session.secure = false
386 beaker.session.secure = false
378
387
379 ## auto save the session to not to use .save()
388 ## auto save the session to not to use .save()
380 beaker.session.auto = false
389 beaker.session.auto = false
381
390
382 ## default cookie expiration time in seconds, set to `true` to set expire
391 ## default cookie expiration time in seconds, set to `true` to set expire
383 ## at browser close
392 ## at browser close
384 #beaker.session.cookie_expires = 3600
393 #beaker.session.cookie_expires = 3600
385
394
386 ###################################
395 ###################################
387 ## SEARCH INDEXING CONFIGURATION ##
396 ## SEARCH INDEXING CONFIGURATION ##
388 ###################################
397 ###################################
389 ## Full text search indexer is available in rhodecode-tools under
398 ## Full text search indexer is available in rhodecode-tools under
390 ## `rhodecode-tools index` command
399 ## `rhodecode-tools index` command
391
400
392 ## WHOOSH Backend, doesn't require additional services to run
401 ## WHOOSH Backend, doesn't require additional services to run
393 ## it works good with few dozen repos
402 ## it works good with few dozen repos
394 search.module = rhodecode.lib.index.whoosh
403 search.module = rhodecode.lib.index.whoosh
395 search.location = %(here)s/data/index
404 search.location = %(here)s/data/index
396
405
397 ########################################
406 ########################################
398 ### CHANNELSTREAM CONFIG ####
407 ### CHANNELSTREAM CONFIG ####
399 ########################################
408 ########################################
400 ## channelstream enables persistent connections and live notification
409 ## channelstream enables persistent connections and live notification
401 ## in the system. It's also used by the chat system
410 ## in the system. It's also used by the chat system
402
411
403 channelstream.enabled = false
412 channelstream.enabled = false
404
413
405 ## server address for channelstream server on the backend
414 ## server address for channelstream server on the backend
406 channelstream.server = 127.0.0.1:9800
415 channelstream.server = 127.0.0.1:9800
407
416
408 ## location of the channelstream server from outside world
417 ## location of the channelstream server from outside world
409 ## use ws:// for http or wss:// for https. This address needs to be handled
418 ## use ws:// for http or wss:// for https. This address needs to be handled
410 ## by external HTTP server such as Nginx or Apache
419 ## by external HTTP server such as Nginx or Apache
411 ## see Nginx/Apache configuration examples in our docs
420 ## see Nginx/Apache configuration examples in our docs
412 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
421 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
413 channelstream.secret = secret
422 channelstream.secret = secret
414 channelstream.history.location = %(here)s/channelstream_history
423 channelstream.history.location = %(here)s/channelstream_history
415
424
416 ## Internal application path that Javascript uses to connect into.
425 ## Internal application path that Javascript uses to connect into.
417 ## If you use proxy-prefix the prefix should be added before /_channelstream
426 ## If you use proxy-prefix the prefix should be added before /_channelstream
418 channelstream.proxy_path = /_channelstream
427 channelstream.proxy_path = /_channelstream
419
428
420
429
421 ###################################
430 ###################################
422 ## APPENLIGHT CONFIG ##
431 ## APPENLIGHT CONFIG ##
423 ###################################
432 ###################################
424
433
425 ## Appenlight is tailored to work with RhodeCode, see
434 ## Appenlight is tailored to work with RhodeCode, see
426 ## http://appenlight.com for details how to obtain an account
435 ## http://appenlight.com for details how to obtain an account
427
436
428 ## Appenlight integration enabled
437 ## Appenlight integration enabled
429 appenlight = false
438 appenlight = false
430
439
431 appenlight.server_url = https://api.appenlight.com
440 appenlight.server_url = https://api.appenlight.com
432 appenlight.api_key = YOUR_API_KEY
441 appenlight.api_key = YOUR_API_KEY
433 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
442 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
434
443
435 ## used for JS client
444 ## used for JS client
436 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
445 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
437
446
438 ## TWEAK AMOUNT OF INFO SENT HERE
447 ## TWEAK AMOUNT OF INFO SENT HERE
439
448
440 ## enables 404 error logging (default False)
449 ## enables 404 error logging (default False)
441 appenlight.report_404 = false
450 appenlight.report_404 = false
442
451
443 ## time in seconds after request is considered being slow (default 1)
452 ## time in seconds after request is considered being slow (default 1)
444 appenlight.slow_request_time = 1
453 appenlight.slow_request_time = 1
445
454
446 ## record slow requests in application
455 ## record slow requests in application
447 ## (needs to be enabled for slow datastore recording and time tracking)
456 ## (needs to be enabled for slow datastore recording and time tracking)
448 appenlight.slow_requests = true
457 appenlight.slow_requests = true
449
458
450 ## enable hooking to application loggers
459 ## enable hooking to application loggers
451 appenlight.logging = true
460 appenlight.logging = true
452
461
453 ## minimum log level for log capture
462 ## minimum log level for log capture
454 appenlight.logging.level = WARNING
463 appenlight.logging.level = WARNING
455
464
456 ## send logs only from erroneous/slow requests
465 ## send logs only from erroneous/slow requests
457 ## (saves API quota for intensive logging)
466 ## (saves API quota for intensive logging)
458 appenlight.logging_on_error = false
467 appenlight.logging_on_error = false
459
468
460 ## list of additional keywords that should be grabbed from environ object
469 ## list of additional keywords that should be grabbed from environ object
461 ## can be string with comma separated list of words in lowercase
470 ## can be string with comma separated list of words in lowercase
462 ## (by default client will always send following info:
471 ## (by default client will always send following info:
463 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
472 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
464 ## start with HTTP* this list be extended with additional keywords here
473 ## start with HTTP* this list be extended with additional keywords here
465 appenlight.environ_keys_whitelist =
474 appenlight.environ_keys_whitelist =
466
475
467 ## list of keywords that should be blanked from request object
476 ## list of keywords that should be blanked from request object
468 ## can be string with comma separated list of words in lowercase
477 ## can be string with comma separated list of words in lowercase
469 ## (by default client will always blank keys that contain following words
478 ## (by default client will always blank keys that contain following words
470 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
479 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
471 ## this list be extended with additional keywords set here
480 ## this list be extended with additional keywords set here
472 appenlight.request_keys_blacklist =
481 appenlight.request_keys_blacklist =
473
482
474 ## list of namespaces that should be ignores when gathering log entries
483 ## list of namespaces that should be ignores when gathering log entries
475 ## can be string with comma separated list of namespaces
484 ## can be string with comma separated list of namespaces
476 ## (by default the client ignores own entries: appenlight_client.client)
485 ## (by default the client ignores own entries: appenlight_client.client)
477 appenlight.log_namespace_blacklist =
486 appenlight.log_namespace_blacklist =
478
487
479
488
480 ###########################################
489 ###########################################
481 ### MAIN RHODECODE DATABASE CONFIG ###
490 ### MAIN RHODECODE DATABASE CONFIG ###
482 ###########################################
491 ###########################################
483 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
492 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
484 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
493 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
485 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
494 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
486 # pymysql is an alternative driver for MySQL, use in case of problems with default one
495 # pymysql is an alternative driver for MySQL, use in case of problems with default one
487 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
496 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
488
497
489 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
498 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
490
499
491 # see sqlalchemy docs for other advanced settings
500 # see sqlalchemy docs for other advanced settings
492
501
493 ## print the sql statements to output
502 ## print the sql statements to output
494 sqlalchemy.db1.echo = false
503 sqlalchemy.db1.echo = false
495 ## recycle the connections after this amount of seconds
504 ## recycle the connections after this amount of seconds
496 sqlalchemy.db1.pool_recycle = 3600
505 sqlalchemy.db1.pool_recycle = 3600
497 sqlalchemy.db1.convert_unicode = true
506 sqlalchemy.db1.convert_unicode = true
498
507
499 ## the number of connections to keep open inside the connection pool.
508 ## the number of connections to keep open inside the connection pool.
500 ## 0 indicates no limit
509 ## 0 indicates no limit
501 #sqlalchemy.db1.pool_size = 5
510 #sqlalchemy.db1.pool_size = 5
502
511
503 ## the number of connections to allow in connection pool "overflow", that is
512 ## the number of connections to allow in connection pool "overflow", that is
504 ## connections that can be opened above and beyond the pool_size setting,
513 ## connections that can be opened above and beyond the pool_size setting,
505 ## which defaults to five.
514 ## which defaults to five.
506 #sqlalchemy.db1.max_overflow = 10
515 #sqlalchemy.db1.max_overflow = 10
507
516
508 ## Connection check ping, used to detect broken database connections
517 ## Connection check ping, used to detect broken database connections
509 ## could be enabled to better handle cases if MySQL has gone away errors
518 ## could be enabled to better handle cases if MySQL has gone away errors
510 #sqlalchemy.db1.ping_connection = true
519 #sqlalchemy.db1.ping_connection = true
511
520
512 ##################
521 ##################
513 ### VCS CONFIG ###
522 ### VCS CONFIG ###
514 ##################
523 ##################
515 vcs.server.enable = true
524 vcs.server.enable = true
516 vcs.server = localhost:9900
525 vcs.server = localhost:9900
517
526
518 ## Web server connectivity protocol, responsible for web based VCS operations
527 ## Web server connectivity protocol, responsible for web based VCS operations
519 ## Available protocols are:
528 ## Available protocols are:
520 ## `http` - use http-rpc backend (default)
529 ## `http` - use http-rpc backend (default)
521 vcs.server.protocol = http
530 vcs.server.protocol = http
522
531
523 ## Push/Pull operations protocol, available options are:
532 ## Push/Pull operations protocol, available options are:
524 ## `http` - use http-rpc backend (default)
533 ## `http` - use http-rpc backend (default)
525 vcs.scm_app_implementation = http
534 vcs.scm_app_implementation = http
526
535
527 ## Push/Pull operations hooks protocol, available options are:
536 ## Push/Pull operations hooks protocol, available options are:
528 ## `http` - use http-rpc backend (default)
537 ## `http` - use http-rpc backend (default)
529 vcs.hooks.protocol = http
538 vcs.hooks.protocol = http
530
539
531 ## Host on which this instance is listening for hooks. If vcsserver is in other location
540 ## Host on which this instance is listening for hooks. If vcsserver is in other location
532 ## this should be adjusted.
541 ## this should be adjusted.
533 vcs.hooks.host = 127.0.0.1
542 vcs.hooks.host = 127.0.0.1
534
543
535 vcs.server.log_level = info
544 vcs.server.log_level = info
536 ## Start VCSServer with this instance as a subprocess, useful for development
545 ## Start VCSServer with this instance as a subprocess, useful for development
537 vcs.start_server = false
546 vcs.start_server = false
538
547
539 ## List of enabled VCS backends, available options are:
548 ## List of enabled VCS backends, available options are:
540 ## `hg` - mercurial
549 ## `hg` - mercurial
541 ## `git` - git
550 ## `git` - git
542 ## `svn` - subversion
551 ## `svn` - subversion
543 vcs.backends = hg, git, svn
552 vcs.backends = hg, git, svn
544
553
545 vcs.connection_timeout = 3600
554 vcs.connection_timeout = 3600
546 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
555 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
547 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
556 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
548 #vcs.svn.compatible_version = pre-1.8-compatible
557 #vcs.svn.compatible_version = pre-1.8-compatible
549
558
550
559
551 ############################################################
560 ############################################################
552 ### Subversion proxy support (mod_dav_svn) ###
561 ### Subversion proxy support (mod_dav_svn) ###
553 ### Maps RhodeCode repo groups into SVN paths for Apache ###
562 ### Maps RhodeCode repo groups into SVN paths for Apache ###
554 ############################################################
563 ############################################################
555 ## Enable or disable the config file generation.
564 ## Enable or disable the config file generation.
556 svn.proxy.generate_config = false
565 svn.proxy.generate_config = false
557 ## Generate config file with `SVNListParentPath` set to `On`.
566 ## Generate config file with `SVNListParentPath` set to `On`.
558 svn.proxy.list_parent_path = true
567 svn.proxy.list_parent_path = true
559 ## Set location and file name of generated config file.
568 ## Set location and file name of generated config file.
560 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
569 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
561 ## alternative mod_dav config template. This needs to be a mako template
570 ## alternative mod_dav config template. This needs to be a mako template
562 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
571 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
563 ## Used as a prefix to the `Location` block in the generated config file.
572 ## Used as a prefix to the `Location` block in the generated config file.
564 ## In most cases it should be set to `/`.
573 ## In most cases it should be set to `/`.
565 svn.proxy.location_root = /
574 svn.proxy.location_root = /
566 ## Command to reload the mod dav svn configuration on change.
575 ## Command to reload the mod dav svn configuration on change.
567 ## Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
576 ## 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
577 ## Make sure user who runs RhodeCode process is allowed to reload Apache
569 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
578 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
570 ## If the timeout expires before the reload command finishes, the command will
579 ## If the timeout expires before the reload command finishes, the command will
571 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
580 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
572 #svn.proxy.reload_timeout = 10
581 #svn.proxy.reload_timeout = 10
573
582
574 ############################################################
583 ############################################################
575 ### SSH Support Settings ###
584 ### SSH Support Settings ###
576 ############################################################
585 ############################################################
577
586
578 ## Defines if a custom authorized_keys file should be created and written on
587 ## Defines if a custom authorized_keys file should be created and written on
579 ## any change user ssh keys. Setting this to false also disables possibility
588 ## any change user ssh keys. Setting this to false also disables possibility
580 ## of adding SSH keys by users from web interface. Super admins can still
589 ## of adding SSH keys by users from web interface. Super admins can still
581 ## manage SSH Keys.
590 ## manage SSH Keys.
582 ssh.generate_authorized_keyfile = false
591 ssh.generate_authorized_keyfile = false
583
592
584 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
593 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
585 # ssh.authorized_keys_ssh_opts =
594 # ssh.authorized_keys_ssh_opts =
586
595
587 ## Path to the authorized_keys file where the generate entries are placed.
596 ## Path to the authorized_keys file where the generate entries are placed.
588 ## It is possible to have multiple key files specified in `sshd_config` e.g.
597 ## It is possible to have multiple key files specified in `sshd_config` e.g.
589 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
598 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
590 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
599 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
591
600
592 ## Command to execute the SSH wrapper. The binary is available in the
601 ## Command to execute the SSH wrapper. The binary is available in the
593 ## RhodeCode installation directory.
602 ## RhodeCode installation directory.
594 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
603 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
595 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
604 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
596
605
597 ## Allow shell when executing the ssh-wrapper command
606 ## Allow shell when executing the ssh-wrapper command
598 ssh.wrapper_cmd_allow_shell = false
607 ssh.wrapper_cmd_allow_shell = false
599
608
600 ## Enables logging, and detailed output send back to the client during SSH
609 ## Enables logging, and detailed output send back to the client during SSH
601 ## operations. Useful for debugging, shouldn't be used in production.
610 ## operations. Useful for debugging, shouldn't be used in production.
602 ssh.enable_debug_logging = false
611 ssh.enable_debug_logging = false
603
612
604 ## Paths to binary executable, by default they are the names, but we can
613 ## Paths to binary executable, by default they are the names, but we can
605 ## override them if we want to use a custom one
614 ## override them if we want to use a custom one
606 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
615 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
607 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
616 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
608 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
617 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
609
618
610 ## Enables SSH key generator web interface. Disabling this still allows users
619 ## Enables SSH key generator web interface. Disabling this still allows users
611 ## to add their own keys.
620 ## to add their own keys.
612 ssh.enable_ui_key_generator = true
621 ssh.enable_ui_key_generator = true
613
622
614
623
615 ## Dummy marker to add new entries after.
624 ## Dummy marker to add new entries after.
616 ## Add any custom entries below. Please don't remove.
625 ## Add any custom entries below. Please don't remove.
617 custom.conf = 1
626 custom.conf = 1
618
627
619
628
620 ################################
629 ################################
621 ### LOGGING CONFIGURATION ####
630 ### LOGGING CONFIGURATION ####
622 ################################
631 ################################
623 [loggers]
632 [loggers]
624 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
633 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
625
634
626 [handlers]
635 [handlers]
627 keys = console, console_sql
636 keys = console, console_sql
628
637
629 [formatters]
638 [formatters]
630 keys = generic, color_formatter, color_formatter_sql
639 keys = generic, color_formatter, color_formatter_sql
631
640
632 #############
641 #############
633 ## LOGGERS ##
642 ## LOGGERS ##
634 #############
643 #############
635 [logger_root]
644 [logger_root]
636 level = NOTSET
645 level = NOTSET
637 handlers = console
646 handlers = console
638
647
639 [logger_sqlalchemy]
648 [logger_sqlalchemy]
640 level = INFO
649 level = INFO
641 handlers = console_sql
650 handlers = console_sql
642 qualname = sqlalchemy.engine
651 qualname = sqlalchemy.engine
643 propagate = 0
652 propagate = 0
644
653
645 [logger_beaker]
654 [logger_beaker]
646 level = DEBUG
655 level = DEBUG
647 handlers =
656 handlers =
648 qualname = beaker.container
657 qualname = beaker.container
649 propagate = 1
658 propagate = 1
650
659
651 [logger_rhodecode]
660 [logger_rhodecode]
652 level = DEBUG
661 level = DEBUG
653 handlers =
662 handlers =
654 qualname = rhodecode
663 qualname = rhodecode
655 propagate = 1
664 propagate = 1
656
665
657 [logger_ssh_wrapper]
666 [logger_ssh_wrapper]
658 level = DEBUG
667 level = DEBUG
659 handlers =
668 handlers =
660 qualname = ssh_wrapper
669 qualname = ssh_wrapper
661 propagate = 1
670 propagate = 1
662
671
663 [logger_celery]
672 [logger_celery]
664 level = DEBUG
673 level = DEBUG
665 handlers =
674 handlers =
666 qualname = celery
675 qualname = celery
667
676
668
677
669 ##############
678 ##############
670 ## HANDLERS ##
679 ## HANDLERS ##
671 ##############
680 ##############
672
681
673 [handler_console]
682 [handler_console]
674 class = StreamHandler
683 class = StreamHandler
675 args = (sys.stderr, )
684 args = (sys.stderr, )
676 level = INFO
685 level = INFO
677 formatter = generic
686 formatter = generic
678
687
679 [handler_console_sql]
688 [handler_console_sql]
680 # "level = DEBUG" logs SQL queries and results.
689 # "level = DEBUG" logs SQL queries and results.
681 # "level = INFO" logs SQL queries.
690 # "level = INFO" logs SQL queries.
682 # "level = WARN" logs neither. (Recommended for production systems.)
691 # "level = WARN" logs neither. (Recommended for production systems.)
683 class = StreamHandler
692 class = StreamHandler
684 args = (sys.stderr, )
693 args = (sys.stderr, )
685 level = WARN
694 level = WARN
686 formatter = generic
695 formatter = generic
687
696
688 ################
697 ################
689 ## FORMATTERS ##
698 ## FORMATTERS ##
690 ################
699 ################
691
700
692 [formatter_generic]
701 [formatter_generic]
693 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
702 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
694 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
703 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
695 datefmt = %Y-%m-%d %H:%M:%S
704 datefmt = %Y-%m-%d %H:%M:%S
696
705
697 [formatter_color_formatter]
706 [formatter_color_formatter]
698 class = rhodecode.lib.logging_formatter.ColorFormatter
707 class = rhodecode.lib.logging_formatter.ColorFormatter
699 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
708 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
700 datefmt = %Y-%m-%d %H:%M:%S
709 datefmt = %Y-%m-%d %H:%M:%S
701
710
702 [formatter_color_formatter_sql]
711 [formatter_color_formatter_sql]
703 class = rhodecode.lib.logging_formatter.ColorFormatterSql
712 class = rhodecode.lib.logging_formatter.ColorFormatterSql
704 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
713 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
705 datefmt = %Y-%m-%d %H:%M:%S
714 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,296 +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 { system ? builtins.currentSystem
22 { system ? builtins.currentSystem
23 , pythonPackages ? "python27Packages"
23 , pythonPackages ? "python27Packages"
24 , pythonExternalOverrides ? self: super: {}
24 , pythonExternalOverrides ? self: super: {}
25 , doCheck ? false
25 , doCheck ? false
26 , ...
26 , ...
27 }:
27 }:
28
28
29 let
29 let
30 pkgs_ = args.pkgs or (import <nixpkgs> { inherit system; });
30 pkgs_ = args.pkgs or (import <nixpkgs> { inherit system; });
31 in
31 in
32
32
33 let
33 let
34 pkgs = import <nixpkgs> {
34 pkgs = import <nixpkgs> {
35 overlays = [
35 overlays = [
36 (import ./pkgs/overlays.nix)
36 (import ./pkgs/overlays.nix)
37 ];
37 ];
38 inherit
38 inherit
39 (pkgs_)
39 (pkgs_)
40 system;
40 system;
41 };
41 };
42
42
43 # 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
44 # variant.
44 # variant.
45 basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
45 basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
46 self: basePythonPackages.override (a: { inherit self; }));
46 self: basePythonPackages.override (a: { inherit self; }));
47
47
48 # Evaluates to the last segment of a file system path.
48 # Evaluates to the last segment of a file system path.
49 basename = path: with pkgs.lib; last (splitString "/" path);
49 basename = path: with pkgs.lib; last (splitString "/" path);
50
50
51 # source code filter used as arugment to builtins.filterSource.
51 # source code filter used as arugment to builtins.filterSource.
52 src-filter = path: type: with pkgs.lib;
52 src-filter = path: type: with pkgs.lib;
53 let
53 let
54 ext = last (splitString "." path);
54 ext = last (splitString "." path);
55 in
55 in
56 !builtins.elem (basename path) [
56 !builtins.elem (basename path) [
57 ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev"
57 ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev"
58 "node_modules" "node_binaries"
58 "node_modules" "node_binaries"
59 "build" "data" "result" "tmp"] &&
59 "build" "data" "result" "tmp"] &&
60 !builtins.elem ext ["egg-info" "pyc"] &&
60 !builtins.elem ext ["egg-info" "pyc"] &&
61 # 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,
62 # 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-*".
63 !hasPrefix "result" path;
63 !hasPrefix "result" path;
64
64
65 sources =
65 sources =
66 let
66 let
67 inherit
67 inherit
68 (pkgs.lib)
68 (pkgs.lib)
69 all
69 all
70 isString
70 isString
71 attrValues;
71 attrValues;
72 sourcesConfig = pkgs.config.rc.sources or {};
72 sourcesConfig = pkgs.config.rc.sources or {};
73 in
73 in
74 # Ensure that sources are configured as strings. Using a path
74 # Ensure that sources are configured as strings. Using a path
75 # would result in a copy into the nix store.
75 # would result in a copy into the nix store.
76 assert all isString (attrValues sourcesConfig);
76 assert all isString (attrValues sourcesConfig);
77 sourcesConfig;
77 sourcesConfig;
78
78
79 version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION";
79 version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION";
80 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
80 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
81
81
82 nodeEnv = import ./pkgs/node-default.nix {
82 nodeEnv = import ./pkgs/node-default.nix {
83 inherit
83 inherit
84 pkgs
84 pkgs
85 system;
85 system;
86 };
86 };
87 nodeDependencies = nodeEnv.shell.nodeDependencies;
87 nodeDependencies = nodeEnv.shell.nodeDependencies;
88
88
89 rhodecode-testdata-src = sources.rhodecode-testdata or (
89 rhodecode-testdata-src = sources.rhodecode-testdata or (
90 pkgs.fetchhg {
90 pkgs.fetchhg {
91 url = "https://code.rhodecode.com/upstream/rc_testdata";
91 url = "https://code.rhodecode.com/upstream/rc_testdata";
92 rev = "v0.10.0";
92 rev = "v0.10.0";
93 sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0";
93 sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0";
94 });
94 });
95
95
96 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
96 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
97 inherit
97 inherit
98 doCheck
98 doCheck
99 pkgs
99 pkgs
100 pythonPackages;
100 pythonPackages;
101 };
101 };
102
102
103 pythonLocalOverrides = self: super: {
103 pythonLocalOverrides = self: super: {
104 rhodecode-enterprise-ce =
104 rhodecode-enterprise-ce =
105 let
105 let
106 linkNodePackages = ''
106 linkNodePackages = ''
107 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
107 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
108
108
109 echo "[BEGIN]: Link node packages and binaries"
109 echo "[BEGIN]: Link node packages and binaries"
110 # johbo: Linking individual packages allows us to run "npm install"
110 # johbo: Linking individual packages allows us to run "npm install"
111 # 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
112 # restore a clean environment.
112 # restore a clean environment.
113 rm -fr node_modules
113 rm -fr node_modules
114 mkdir node_modules
114 mkdir node_modules
115 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
115 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
116 export NODE_PATH=./node_modules
116 export NODE_PATH=./node_modules
117
117
118 rm -fr node_binaries
118 rm -fr node_binaries
119 mkdir node_binaries
119 mkdir node_binaries
120 ln -s ${nodeDependencies}/bin/* node_binaries/
120 ln -s ${nodeDependencies}/bin/* node_binaries/
121 echo "[DONE ]: Link node packages and binaries"
121 echo "[DONE ]: Link node packages and binaries"
122 '';
122 '';
123
123
124 releaseName = "RhodeCodeEnterpriseCE-${version}";
124 releaseName = "RhodeCodeEnterpriseCE-${version}";
125 in super.rhodecode-enterprise-ce.override (attrs: {
125 in super.rhodecode-enterprise-ce.override (attrs: {
126 inherit
126 inherit
127 doCheck
127 doCheck
128 version;
128 version;
129
129
130 name = "rhodecode-enterprise-ce-${version}";
130 name = "rhodecode-enterprise-ce-${version}";
131 releaseName = releaseName;
131 releaseName = releaseName;
132 src = rhodecode-enterprise-ce-src;
132 src = rhodecode-enterprise-ce-src;
133 dontStrip = true; # prevent strip, we don't need it.
133 dontStrip = true; # prevent strip, we don't need it.
134
134
135 # expose following attributed outside
135 # expose following attributed outside
136 passthru = {
136 passthru = {
137 inherit
137 inherit
138 rhodecode-testdata
138 rhodecode-testdata
139 linkNodePackages
139 linkNodePackages
140 myPythonPackagesUnfix
140 myPythonPackagesUnfix
141 pythonLocalOverrides
141 pythonLocalOverrides
142 pythonCommunityOverrides;
142 pythonCommunityOverrides;
143
143
144 pythonPackages = self;
144 pythonPackages = self;
145 };
145 };
146
146
147 buildInputs =
147 buildInputs =
148 attrs.buildInputs or [] ++ [
148 attrs.buildInputs or [] ++ [
149 rhodecode-testdata
149 rhodecode-testdata
150 ];
150 ];
151
151
152 #NOTE: option to inject additional propagatedBuildInputs
152 #NOTE: option to inject additional propagatedBuildInputs
153 propagatedBuildInputs =
153 propagatedBuildInputs =
154 attrs.propagatedBuildInputs or [] ++ [
154 attrs.propagatedBuildInputs or [] ++ [
155
155
156 ];
156 ];
157
157
158 LC_ALL = "en_US.UTF-8";
158 LC_ALL = "en_US.UTF-8";
159 LOCALE_ARCHIVE =
159 LOCALE_ARCHIVE =
160 if pkgs.stdenv.isLinux
160 if pkgs.stdenv.isLinux
161 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
161 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
162 else "";
162 else "";
163
163
164 # Add bin directory to path so that tests can find 'rhodecode'.
164 # Add bin directory to path so that tests can find 'rhodecode'.
165 preCheck = ''
165 preCheck = ''
166 export PATH="$out/bin:$PATH"
166 export PATH="$out/bin:$PATH"
167 '';
167 '';
168
168
169 # custom check phase for testing
169 # custom check phase for testing
170 checkPhase = ''
170 checkPhase = ''
171 runHook preCheck
171 runHook preCheck
172 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
173 runHook postCheck
173 runHook postCheck
174 '';
174 '';
175
175
176 postCheck = ''
176 postCheck = ''
177 echo "Cleanup of rhodecode/tests"
177 echo "Cleanup of rhodecode/tests"
178 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
178 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
179 '';
179 '';
180
180
181 preBuild = ''
181 preBuild = ''
182 echo "[BEGIN]: Building frontend assets"
182 echo "[BEGIN]: Building frontend assets"
183 ${linkNodePackages}
183 ${linkNodePackages}
184 make web-build
184 make web-build
185 rm -fr node_modules
185 rm -fr node_modules
186 rm -fr node_binaries
186 rm -fr node_binaries
187 echo "[DONE ]: Building frontend assets"
187 echo "[DONE ]: Building frontend assets"
188 '';
188 '';
189
189
190 postInstall = ''
190 postInstall = ''
191 # check required files
191 # check required files
192 STATIC_CHECK="/robots.txt /502.html
192 STATIC_CHECK="/robots.txt /502.html
193 /js/scripts.js /js/rhodecode-components.js
193 /js/scripts.js /js/rhodecode-components.js
194 /css/style.css /css/style-polymer.css"
194 /css/style.css /css/style-polymer.css /css/style-ipython.css"
195
195
196 for file in $STATIC_CHECK;
196 for file in $STATIC_CHECK;
197 do
197 do
198 if [ ! -f rhodecode/public/$file ]; then
198 if [ ! -f rhodecode/public/$file ]; then
199 echo "Missing $file"
199 echo "Missing $file"
200 exit 1
200 exit 1
201 fi
201 fi
202 done
202 done
203
203
204 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"
205 mkdir -p $out/nix-support/rccontrol
205 mkdir -p $out/nix-support/rccontrol
206 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
206 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
207 echo "[DONE ]: enterprise-ce meta information for rccontrol written"
207 echo "[DONE ]: enterprise-ce meta information for rccontrol written"
208
208
209 mkdir -p $out/etc
209 mkdir -p $out/etc
210 cp configs/production.ini $out/etc
210 cp configs/production.ini $out/etc
211 echo "[DONE ]: saved enterprise-ce production.ini into $out/etc"
211 echo "[DONE ]: saved enterprise-ce production.ini into $out/etc"
212
212
213 cp -Rf rhodecode/config/rcextensions $out/etc/rcextensions.tmpl
213 cp -Rf rhodecode/config/rcextensions $out/etc/rcextensions.tmpl
214 echo "[DONE ]: saved enterprise-ce rcextensions into $out/etc/rcextensions.tmpl"
214 echo "[DONE ]: saved enterprise-ce rcextensions into $out/etc/rcextensions.tmpl"
215
215
216 # python based programs need to be wrapped
216 # python based programs need to be wrapped
217 mkdir -p $out/bin
217 mkdir -p $out/bin
218
218
219 # required binaries from dependencies
219 # required binaries from dependencies
220 ln -s ${self.supervisor}/bin/supervisorctl $out/bin/
220 ln -s ${self.supervisor}/bin/supervisorctl $out/bin/
221 ln -s ${self.supervisor}/bin/supervisord $out/bin/
221 ln -s ${self.supervisor}/bin/supervisord $out/bin/
222 ln -s ${self.pastescript}/bin/paster $out/bin/
222 ln -s ${self.pastescript}/bin/paster $out/bin/
223 ln -s ${self.channelstream}/bin/channelstream $out/bin/
223 ln -s ${self.channelstream}/bin/channelstream $out/bin/
224 ln -s ${self.celery}/bin/celery $out/bin/
224 ln -s ${self.celery}/bin/celery $out/bin/
225 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
225 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
226 ln -s ${self.pyramid}/bin/prequest $out/bin/
226 ln -s ${self.pyramid}/bin/prequest $out/bin/
227 ln -s ${self.pyramid}/bin/pserve $out/bin/
227 ln -s ${self.pyramid}/bin/pserve $out/bin/
228
228
229 echo "[DONE ]: created symlinks into $out/bin"
229 echo "[DONE ]: created symlinks into $out/bin"
230 DEPS="$out/bin/supervisorctl \
230 DEPS="$out/bin/supervisorctl \
231 $out/bin/supervisord \
231 $out/bin/supervisord \
232 $out/bin/paster \
232 $out/bin/paster \
233 $out/bin/channelstream \
233 $out/bin/channelstream \
234 $out/bin/celery \
234 $out/bin/celery \
235 $out/bin/gunicorn \
235 $out/bin/gunicorn \
236 $out/bin/prequest \
236 $out/bin/prequest \
237 $out/bin/pserve"
237 $out/bin/pserve"
238
238
239 # wrap only dependency scripts, they require to have full PYTHONPATH set
239 # wrap only dependency scripts, they require to have full PYTHONPATH set
240 # to be able to import all packages
240 # to be able to import all packages
241 for file in $DEPS;
241 for file in $DEPS;
242 do
242 do
243 wrapProgram $file \
243 wrapProgram $file \
244 --prefix PATH : $PATH \
244 --prefix PATH : $PATH \
245 --prefix PYTHONPATH : $PYTHONPATH \
245 --prefix PYTHONPATH : $PYTHONPATH \
246 --set PYTHONHASHSEED random
246 --set PYTHONHASHSEED random
247 done
247 done
248
248
249 echo "[DONE ]: enterprise-ce binary wrapping"
249 echo "[DONE ]: enterprise-ce binary wrapping"
250
250
251 # rhodecode-tools don't need wrapping
251 # rhodecode-tools don't need wrapping
252 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
252 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
253
253
254 # expose sources of CE
254 # expose sources of CE
255 ln -s $out $out/etc/rhodecode_enterprise_ce_source
255 ln -s $out $out/etc/rhodecode_enterprise_ce_source
256
256
257 # expose static files folder
257 # expose static files folder
258 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
259 chmod 755 -R $out/etc/static
259 chmod 755 -R $out/etc/static
260
260
261 '';
261 '';
262 });
262 });
263
263
264 };
264 };
265
265
266 basePythonPackages = with builtins;
266 basePythonPackages = with builtins;
267 if isAttrs pythonPackages then
267 if isAttrs pythonPackages then
268 pythonPackages
268 pythonPackages
269 else
269 else
270 getAttr pythonPackages pkgs;
270 getAttr pythonPackages pkgs;
271
271
272 pythonGeneratedPackages = import ./pkgs/python-packages.nix {
272 pythonGeneratedPackages = import ./pkgs/python-packages.nix {
273 inherit
273 inherit
274 pkgs;
274 pkgs;
275 inherit
275 inherit
276 (pkgs)
276 (pkgs)
277 fetchurl
277 fetchurl
278 fetchgit
278 fetchgit
279 fetchhg;
279 fetchhg;
280 };
280 };
281
281
282 pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix {
282 pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix {
283 inherit pkgs basePythonPackages;
283 inherit pkgs basePythonPackages;
284 };
284 };
285
285
286 # Apply all overrides and fix the final package set
286 # Apply all overrides and fix the final package set
287 myPythonPackagesUnfix = with pkgs.lib;
287 myPythonPackagesUnfix = with pkgs.lib;
288 (extends pythonExternalOverrides
288 (extends pythonExternalOverrides
289 (extends pythonLocalOverrides
289 (extends pythonLocalOverrides
290 (extends pythonCommunityOverrides
290 (extends pythonCommunityOverrides
291 (extends pythonGeneratedPackages
291 (extends pythonGeneratedPackages
292 basePythonPackagesUnfix))));
292 basePythonPackagesUnfix))));
293
293
294 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
294 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
295
295
296 in myPythonPackages.rhodecode-enterprise-ce
296 in myPythonPackages.rhodecode-enterprise-ce
@@ -1,77 +1,77 b''
1 .. _repo-xtra:
1 .. _repo-xtra:
2
2
3 Repository Extra Fields
3 Repository Extra Fields
4 =======================
4 =======================
5
5
6 Extra fields attached to a |repo| allow you to configure additional fields for
6 Extra fields attached to a |repo| allow you to configure additional fields for
7 each repository. This allows storing custom data per-repository.
7 each repository. This allows storing custom data per-repository.
8
8
9 It can be used in :ref:`integrations-webhook` or in |RCX|.
9 It can be used in :ref:`integrations-webhook` or in |RCX|.
10 To read more about |RCX|, see the :ref:`integrations-rcextensions` section.
10 To read more about |RCX|, see the :ref:`integrations-rcextensions` section.
11
11
12
12
13 Enabling Extra Fields
13 Enabling Extra Fields
14 ---------------------
14 ---------------------
15
15
16 To enable extra fields on |repos|, use the following steps:
16 To enable extra fields on |repos|, use the following steps:
17
17
18 1. Go to the :menuselection:`Admin --> Settings --> Visual` page.
18 1. Go to the :menuselection:`Admin --> Settings --> Visual` page.
19 2. Check the :guilabel:`Use repository extra fields` box.
19 2. Check the :guilabel:`Use repository extra fields` box.
20 3. Save your changes.
20 3. Save your changes.
21
21
22
22
23 Configuring Extra Fields
23 Configuring Extra Fields
24 ------------------------
24 ------------------------
25
25
26 To configure extra fields per repository, use the following steps:
26 To configure extra fields per repository, use the following steps:
27
27
28 1. Go to :menuselection:`Admin --> Repositories` and select :guilabel:`Edit`
28 1. Go to :menuselection:`Admin --> Repositories` and select :guilabel:`Edit`
29 beside the |repo| to which you wish to add extra fields.
29 beside the |repo| to which you wish to add extra fields.
30 2. On the |repo| settings page, select the :guilabel:`Extra fields` tab.
30 2. On the |repo| settings page, select the :guilabel:`Extra fields` tab.
31
31
32 .. image:: ../images/extra-repo-fields.png
32 .. image:: ../../images/extra-repo-fields.png
33
33
34 The most important is the `New field key` variable which under the value will
34 The most important is the `New field key` variable which under the value will
35 be stored. It needs to be unique for each repository. The label and description
35 be stored. It needs to be unique for each repository. The label and description
36 will be generated in repository settings where users can actually save some
36 will be generated in repository settings where users can actually save some
37 values inside generated extra fields.
37 values inside generated extra fields.
38
38
39
39
40 Example Usage in extensions
40 Example Usage in extensions
41 ---------------------------
41 ---------------------------
42
42
43 To use the extra fields in an extension, see the example below. For more
43 To use the extra fields in an extension, see the example below. For more
44 information and examples, see the :ref:`extensions-hooks-ref` section.
44 information and examples, see the :ref:`extensions-hooks-ref` section.
45
45
46 .. code-block:: python
46 .. code-block:: python
47
47
48 call = load_extension('http_notify.py')
48 call = load_extension('http_notify.py')
49 if call:
49 if call:
50 url = 'http://default.url' # <url for post data>
50 url = 'http://default.url' # <url for post data>
51
51
52 # possibly extract the URL from extra fields
52 # possibly extract the URL from extra fields
53 call = load_extension('extra_fields.py')
53 call = load_extension('extra_fields.py')
54 if call:
54 if call:
55 repo_extra_fields = call(**kwargs)
55 repo_extra_fields = call(**kwargs)
56 # now update if we have extra fields, they have precedence
56 # now update if we have extra fields, they have precedence
57 # this way users can store any configuration inside the database per
57 # this way users can store any configuration inside the database per
58 # repo
58 # repo
59 for key, data in repo_extra_fields.items():
59 for key, data in repo_extra_fields.items():
60 kwargs[key] = data['field_value']
60 kwargs[key] = data['field_value']
61
61
62 # an endpoint url data will be sent to, fetched from extra fields
62 # an endpoint url data will be sent to, fetched from extra fields
63 # if exists, or fallback to default
63 # if exists, or fallback to default
64 kwargs['URL'] = kwargs.pop('webhook_url', None) or url
64 kwargs['URL'] = kwargs.pop('webhook_url', None) or url
65
65
66 # fetch pushed commits, from commit_ids list
66 # fetch pushed commits, from commit_ids list
67 call = load_extension('extract_commits.py')
67 call = load_extension('extract_commits.py')
68 extracted_commits = {}
68 extracted_commits = {}
69 if call:
69 if call:
70 extracted_commits = call(**kwargs)
70 extracted_commits = call(**kwargs)
71 # store the commits for the next call chain
71 # store the commits for the next call chain
72 kwargs['COMMITS'] = extracted_commits
72 kwargs['COMMITS'] = extracted_commits
73
73
74 # set additional keys and values to be sent via POST to given URL
74 # set additional keys and values to be sent via POST to given URL
75 kwargs['caller_type'] = 'rhodecode'
75 kwargs['caller_type'] = 'rhodecode'
76 kwargs['date'] = time.time() # import time before
76 kwargs['date'] = time.time() # import time before
77 call(**kwargs)
77 call(**kwargs)
1 NO CONTENT: file renamed from docs/admin/repo-hooks.rst to docs/admin/repo_admin/repo-hooks.rst
NO CONTENT: file renamed from docs/admin/repo-hooks.rst to docs/admin/repo_admin/repo-hooks.rst
1 NO CONTENT: file renamed from docs/admin/repo-issue-tracker.rst to docs/admin/repo_admin/repo-issue-tracker.rst
NO CONTENT: file renamed from docs/admin/repo-issue-tracker.rst to docs/admin/repo_admin/repo-issue-tracker.rst
1 NO CONTENT: file renamed from docs/admin/repo-perm-steps.rst to docs/admin/repo_admin/repo-perm-steps.rst
NO CONTENT: file renamed from docs/admin/repo-perm-steps.rst to docs/admin/repo_admin/repo-perm-steps.rst
1 NO CONTENT: file renamed from docs/admin/repo-vcs.rst to docs/admin/repo_admin/repo-vcs.rst
NO CONTENT: file renamed from docs/admin/repo-vcs.rst to docs/admin/repo_admin/repo-vcs.rst
1 NO CONTENT: file renamed from docs/admin/restore-deleted-repositories.rst to docs/admin/repo_admin/restore-deleted-repositories.rst
NO CONTENT: file renamed from docs/admin/restore-deleted-repositories.rst to docs/admin/repo_admin/restore-deleted-repositories.rst
@@ -1,34 +1,32 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 system_admin/config-files-overview
20 vcs-server
20 system_admin/vcs-server
21 svn-http
21 system_admin/svn-http
22 svn-path-permissions
22 system_admin/svn-path-permissions
23 gunicorn-ssl-support
23 system_admin/gunicorn-ssl-support
24 apache-config
24 system_admin/apache-config
25 nginx-config
25 system_admin/nginx-config
26 backup-restore
26 system_admin/backup-restore
27 tuning-rhodecode
27 system_admin/tuning-rhodecode
28 indexing
28 system_admin/indexing
29 reset-information
29 system_admin/reset-information
30 enable-debug
30 system_admin/enable-debug
31 admin-tricks
31 system_admin/admin-tricks
32 cleanup-cmds
32 system_admin/cleanup-cmds
33 restore-deleted-repositories
34
@@ -1,241 +1,264 b''
1 .. _admin-tricks:
1 .. _admin-tricks:
2
2
3 One-time Admin Tasks
3 One-time Admin Tasks
4 --------------------
4 --------------------
5
5
6 * :ref:`web-analytics`
6 * :ref:`web-analytics`
7 * :ref:`admin-tricks-license`
7 * :ref:`admin-tricks-license`
8 * :ref:`announcements`
8 * :ref:`announcements`
9 * :ref:`md-rst`
9 * :ref:`md-rst`
10 * :ref:`repo-stats`
10 * :ref:`repo-stats`
11 * :ref:`server-side-merge`
11 * :ref:`server-side-merge`
12 * :ref:`remap-rescan`
12 * :ref:`remap-rescan`
13 * :ref:`custom-hooks`
13 * :ref:`custom-hooks`
14 * :ref:`clear-repo-cache`
14 * :ref:`clear-repo-cache`
15 * :ref:`set-repo-pub`
15 * :ref:`set-repo-pub`
16 * :ref:`ping`
16 * :ref:`ping`
17
17
18 .. _web-analytics:
18 .. _web-analytics:
19
19
20 Adding Web Analytics
20 Adding Web Analytics
21 ^^^^^^^^^^^^^^^^^^^^
21 ^^^^^^^^^^^^^^^^^^^^
22
22
23 If you wish to add a Google Analytics, or any other kind of tracker to your
23 If you wish to add a Google Analytics, or any other kind of tracker to your
24 |RCE| instance you can add the necessary codes to the header or footer
24 |RCE| instance you can add the necessary codes to the header or footer
25 section of each instance using the following steps:
25 section of each instance using the following steps:
26
26
27 1. From the |RCE| interface, select
27 1. From the |RCE| interface, select
28 :menuselection:`Admin --> Settings --> Global`
28 :menuselection:`Admin --> Settings --> Global`
29 2. To add a tracking code to you instance, enter it in the header or footer
29 2. To add a tracking code to you instance, enter it in the header or footer
30 section and select **Save**
30 section and select **Save**
31
31
32 Use the example templates in the drop-down menu to set up your configuration.
32 Use the example templates in the drop-down menu to set up your configuration.
33
33
34 .. _admin-tricks-license:
34 .. _admin-tricks-license:
35
35
36 Licence Key Management
36 Licence Key Management
37 ^^^^^^^^^^^^^^^^^^^^^^
37 ^^^^^^^^^^^^^^^^^^^^^^
38
38
39 To manage your license key, go to
39 To manage your license key, go to
40 :menuselection:`Admin --> Settings --> License`.
40 :menuselection:`Admin --> Settings --> License`.
41 On this page you can see the license key details. If you need a new license,
41 On this page you can see the license key details. If you need a new license,
42 or have questions about your current one, contact support@rhodecode.com
42 or have questions about your current one, contact support@rhodecode.com
43
43
44 .. _announcements:
44 .. _announcements:
45
45
46 Server-wide Announcements
46 Server-wide Announcements
47 ^^^^^^^^^^^^^^^^^^^^^^^^^
47 ^^^^^^^^^^^^^^^^^^^^^^^^^
48
48
49 If you need to make a server-wide announcement to all users,
49 If you need to make a server-wide announcement to all users,
50 you can add a message to be displayed using the following steps:
50 you can add a message to be displayed using the following steps:
51
51
52 1. From the |RCE| interface, select
52 1. From the |RCE| interface, select
53 :menuselection:`Admin --> Settings --> Global`
53 :menuselection:`Admin --> Settings --> Global`
54 2. To add a message that will be displayed to all users,
54 2. To add a message that will be displayed to all users,
55 select :guilabel:`Server Announcement` from the drop-down menu and
55 select :guilabel:`Server Announcement` from the drop-down menu and
56 change the ``var message = "TYPE YOUR MESSAGE HERE";`` example line.
56 change the ``var message = "TYPE YOUR MESSAGE HERE";`` example line.
57 3. Select :guilabel:`Save`, and you will see the message once your page
57 3. Select :guilabel:`Save`, and you will see the message once your page
58 refreshes.
58 refreshes.
59
59
60 .. image:: ../images/server-wide-announcement.png
60 .. image:: ../../images/server-wide-announcement.png
61 :alt: Server Wide Announcement
61 :alt: Server Wide Announcement
62
62
63 .. _md-rst:
63 .. _md-rst:
64
64
65
65
66 Suppress license warnings or errors
66 Suppress license warnings or errors
67 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
67 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
68
68
69 In case you're running on maximum allowed users, RhodeCode will display a
69 In case you're running on maximum allowed users, RhodeCode will display a
70 warning message on pages that you're close to the license limits.
70 warning message on pages that you're close to the license limits.
71 It's often not desired to show that all the time. Here's how you can suppress
71 It's often not desired to show that all the time. Here's how you can suppress
72 the license messages.
72 the license messages.
73
73
74 1. From the |RCE| interface, select
74 1. From the |RCE| interface, select
75 :menuselection:`Admin --> Settings --> Global`
75 :menuselection:`Admin --> Settings --> Global`
76 2. Select :guilabel:`Flash message filtering` from the drop-down menu.
76 2. Select :guilabel:`Flash message filtering` from the drop-down menu.
77 3. Select :guilabel:`Save`, and you will no longer see the license message
77 3. Select :guilabel:`Save`, and you will no longer see the license message
78 once your page refreshes.
78 once your page refreshes.
79
79
80 .. _admin-tricks-suppress-license-messages:
80 .. _admin-tricks-suppress-license-messages:
81
81
82
82
83 Markdown or RST Rendering
83 Markdown or RST Rendering
84 ^^^^^^^^^^^^^^^^^^^^^^^^^
84 ^^^^^^^^^^^^^^^^^^^^^^^^^
85
85
86 |RCE| can use `Markdown`_ or `reStructured Text`_ in commit message,
86 |RCE| can use `Markdown`_ or `reStructured Text`_ in commit message,
87 code review messages, and inline comments. To set the default to either,
87 code review messages, and inline comments. To set the default to either,
88 select your preference from the drop-down menu on the
88 select your preference from the drop-down menu on the
89 :menuselection:`Admin --> Settings --> Visual` page and select
89 :menuselection:`Admin --> Settings --> Visual` page and select
90 :guilabel:`Save settings`.
90 :guilabel:`Save settings`.
91
91
92 .. _repo-stats:
92 .. _repo-stats:
93
93
94 Enabling Repository Statistics
94 Enabling Repository Statistics
95 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
95 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
96
96
97 To enable |repo| statistics, use the following steps:
97 To enable |repo| statistics, use the following steps:
98
98
99 1. From the |RCE| interface, open
99 1. From the |RCE| interface, open
100 :menuselection:`Admin --> Repositories` and select
100 :menuselection:`Admin --> Repositories` and select
101 :guilabel:`Edit` beside the |repo| for which you wish to enable statistics.
101 :guilabel:`Edit` beside the |repo| for which you wish to enable statistics.
102 2. Check the :guilabel:`Enable statistics` box, and select :guilabel:`Save`
102 2. Check the :guilabel:`Enable statistics` box, and select :guilabel:`Save`
103
103
104 .. _server-side-merge:
104 .. _server-side-merge:
105
105
106 Enabling Server-side Merging
106 Enabling Server-side Merging
107 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
107 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
108
108
109 To enable server-side merging, use the following steps:
109 To enable server-side merging, use the following steps:
110
110
111 1. From the |RCE| interface, open :menuselection:`Admin --> Settings --> VCS`
111 1. From the |RCE| interface, open :menuselection:`Admin --> Settings --> VCS`
112 2. Check the :guilabel:`Server-side merge` box, and select
112 2. Check the :guilabel:`Server-side merge` box, and select
113 :guilabel:`Save Settings`
113 :guilabel:`Save Settings`
114
114
115 If you encounter slow performance with server-side merging enabled, check the
115 If you encounter slow performance with server-side merging enabled, check the
116 speed at which your server is performing actions. When server-side merging is
116 speed at which your server is performing actions. When server-side merging is
117 enabled, the following actions occurs on the server.
117 enabled, the following actions occurs on the server.
118
118
119 * A |pr| is created in the database.
119 * A |pr| is created in the database.
120 * A shadow |repo| is created as a working environment for the |pr|.
120 * A shadow |repo| is created as a working environment for the |pr|.
121 * On display, |RCE| checks if the |pr| can be merged.
121 * On display, |RCE| checks if the |pr| can be merged.
122
122
123 To check how fast the shadow |repo| creation is occurring on your server, use
123 To check how fast the shadow |repo| creation is occurring on your server, use
124 the following steps:
124 the following steps:
125
125
126 1. Log into your server and create a directory in your |repos| folder.
126 1. Log into your server and create a directory in your |repos| folder.
127 2. Clone a |repo| that is showing slow performance and time the action.
127 2. Clone a |repo| that is showing slow performance and time the action.
128
128
129 .. code-block:: bash
129 .. code-block:: bash
130
130
131 # One option is to use the time command
131 # One option is to use the time command
132 $ time hg clone SOURCE_REPO TARGET
132 $ time hg clone SOURCE_REPO TARGET
133
133
134 .. _remap-rescan:
134 .. _remap-rescan:
135
135
136 Remap and Rescan Repositories
136 Remap and Rescan Repositories
137 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
137 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
138
138
139 You may want to Remap and rescan the |repos| that |RCE| is managing to ensure
139 You may want to Remap and rescan the |repos| that |RCE| is managing to ensure
140 the system is always up-to-date. This is useful after importing, deleting,
140 the system is always up-to-date. This is useful after importing, deleting,
141 or carrying out general cleaning up operations. To do this use the
141 or carrying out general cleaning up operations. To do this use the
142 following steps:
142 following steps:
143
143
144 1. From the |RCE|, open
144 1. From the |RCE|, open
145 :menuselection:`Admin --> Settings --> Remap and rescan`
145 :menuselection:`Admin --> Settings --> Remap and rescan`
146 2. Click :guilabel:`Rescan Repositories`
146 2. Click :guilabel:`Rescan Repositories`
147
147
148 Check the additional options if needed:
148 Check the additional options if needed:
149
149
150 * :guilabel:`Destroy old data`: Useful for purging deleted repository
150 * :guilabel:`Destroy old data`: Useful for purging deleted repository
151 information from the database.
151 information from the database.
152 * :guilabel:`Invalidate cache for all repositories`: Use this to completely
152 * :guilabel:`Invalidate cache for all repositories`: Use this to completely
153 remap all |repos|. Useful when importing or migrating |repos| to ensure all
153 remap all |repos|. Useful when importing or migrating |repos| to ensure all
154 new information is picked up.
154 new information is picked up.
155
155
156 .. _custom-hooks:
156 .. _custom-hooks:
157
157
158 Adding Custom Hooks
158 Adding Custom Hooks
159 ^^^^^^^^^^^^^^^^^^^
159 ^^^^^^^^^^^^^^^^^^^
160
160
161 To add custom hooks to your instance, use the following steps:
161 To add custom hooks to your instance, use the following steps:
162
162
163 1. Open :menuselection:`Admin --> Settings --> Hooks`
163 1. Open :menuselection:`Admin --> Settings --> Hooks`
164 2. Add your custom hook details, you can use a file path to specify custom
164 2. Add your custom hook details, you can use a file path to specify custom
165 hook scripts, for example:
165 hook scripts, for example:
166 ``pretxnchangegroup.example`` with value ``python:/path/to/custom_hook.py:my_func_name``
166 ``pretxnchangegroup.example`` with value ``python:/path/to/custom_hook.py:my_func_name``
167 3. Select :guilabel:`Save`
167 3. Select :guilabel:`Save`
168
168
169 Also, see the RhodeCode Extensions section of the :ref:`rc-tools` guide. RhodeCode
169 Also, see the RhodeCode Extensions section of the :ref:`rc-tools` guide. RhodeCode
170 Extensions can be used to add additional hooks to your instance and comes
170 Extensions can be used to add additional hooks to your instance and comes
171 with a number of pre-built plugins if you chose to install them.
171 with a number of pre-built plugins if you chose to install them.
172
172
173 .. _clear-repo-cache:
173 .. _clear-repo-cache:
174
174
175 Clearing |repo| cache
175 Clearing |repo| cache
176 ^^^^^^^^^^^^^^^^^^^^^
176 ^^^^^^^^^^^^^^^^^^^^^
177
177
178 If you need to clear the cache for a particular |repo|, use the following steps:
178 If you need to clear the cache for a particular |repo|, use the following steps:
179
179
180 1. Open :menuselection:`Admin --> Repositories` and select :guilabel:`Edit`
180 1. Open :menuselection:`Admin --> Repositories` and select :guilabel:`Edit`
181 beside the |repo| whose cache you wish to clear.
181 beside the |repo| whose cache you wish to clear.
182 2. On the |repo| settings page, go to the :guilabel:`Caches` tab and select
182 2. On the |repo| settings page, go to the :guilabel:`Caches` tab and select
183 :guilabel:`Invalidate repository cache`.
183 :guilabel:`Invalidate repository cache`.
184
184
185 .. _set-lang:
185 .. _set-lang:
186
186
187 Changing Default Language
187 Changing Default Language
188 ^^^^^^^^^^^^^^^^^^^^^^^^^
188 ^^^^^^^^^^^^^^^^^^^^^^^^^
189
189
190 To change the default language of a |RCE| instance, change the language code
190 To change the default language of a |RCE| instance, change the language code
191 in the :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. To
191 in the :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. To
192 do this, use the following steps.
192 do this, use the following steps.
193
193
194 1. Open the :file:`rhodecode.ini` file and set the required language code.
194 1. Open the :file:`rhodecode.ini` file and set the required language code.
195
195
196 .. code-block:: ini
196 .. code-block:: ini
197
197
198 ## Optional Languages
198 ## Optional Languages
199 ## en(default), de, fr, it, ja, pl, pt, ru, zh
199 ## en(default), de, fr, it, ja, pl, pt, ru, zh
200 lang = de
200 lang = de
201
201
202 2. Restart the |RCE| instance and check that the language has been updated.
202 2. Restart the |RCE| instance and check that the language has been updated.
203
203
204 .. code-block:: bash
204 .. code-block:: bash
205
205
206 $ rccontrol restart enterprise-2
206 $ rccontrol restart enterprise-2
207 Instance "enterprise-2" successfully stopped.
207 Instance "enterprise-2" successfully stopped.
208 Instance "enterprise-2" successfully started.
208 Instance "enterprise-2" successfully started.
209
209
210 .. image:: ../images/language.png
210 .. image:: ../../images/language.png
211
211
212 .. _set-repo-pub:
212 .. _set-repo-pub:
213
213
214 Setting Repositories to Publish
214 Setting Repositories to Publish
215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
216
216
217 To automatically promote your local |repos| to public after pushing to |RCE|,
217 To automatically promote your local |repos| to public after pushing to |RCE|,
218 enable the :guilabel:`Set repositories as publishing` option on the
218 enable the :guilabel:`Set repositories as publishing` option on the
219 :menuselection:`Admin --> Settings --> VCS` page.
219 :menuselection:`Admin --> Settings --> VCS` page.
220
220
221 .. note::
221 .. note::
222
222
223 This option is enabled by default on most |RCE| versions, but if upgrading
223 This option is enabled by default on most |RCE| versions, but if upgrading
224 from a 1.7.x version it could be disabled on upgrade due to inheriting
224 from a 1.7.x version it could be disabled on upgrade due to inheriting
225 older default settings.
225 older default settings.
226
226
227 .. _ping:
227 .. _ping:
228
228
229 Pinging the |RCE| Server
229 Pinging the |RCE| Server
230 ^^^^^^^^^^^^^^^^^^^^^^^^
230 ^^^^^^^^^^^^^^^^^^^^^^^^
231
231
232 You can check the IP Address of your |RCE| instance using the
232 You can check the IP Address of your |RCE| instance using the
233 following URL: ``{instance-URL}/_admin/ping``.
233 following URL: ``{instance-URL}/_admin/ping``.
234
234
235 .. code-block:: bash
235 .. code-block:: bash
236
236
237 $ curl https://your.rhodecode.url/_admin/ping
237 $ curl https://your.rhodecode.url/_admin/ping
238 pong[rce-7880] => 203.0.113.23
238 pong[rce-7880] => 203.0.113.23
239
239
240 .. _Markdown: http://daringfireball.net/projects/markdown/
240 .. _Markdown: http://daringfireball.net/projects/markdown/
241 .. _reStructured Text: http://docutils.sourceforge.net/docs/index.html
241 .. _reStructured Text: http://docutils.sourceforge.net/docs/index.html
242
243
244 Unarchiving a repository
245 ^^^^^^^^^^^^^^^^^^^^^^^^^
246
247 Archive operation for the repository is similar as delete. Archive keeps the data for future references
248 but makes the repository read-only. After archiving the repository it shouldn't be modified in any way.
249 This is why repository settings are disabled for an archived repository.
250
251 If there's a need for unarchiving a repository for some reasons, the interactive
252 ishell interface should be used.
253
254 .. code-block:: bash
255
256 # Open iShell from the terminal
257 $ rccontrol ishell enterprise-1/community-1
258
259 .. code-block:: python
260
261 # Set repository as un-archived
262 In [1]: repo = Repository.get_by_repo_name('SOME_REPO_NAME')
263 In [2]: repo.archived = False
264 In [3]: Session().add(repo);Session().commit()
@@ -1,14 +1,14 b''
1 .. _apache-ws-ref:
1 .. _apache-ws-ref:
2
2
3 Apache HTTP Server Configuration
3 Apache HTTP Server Configuration
4 --------------------------------
4 --------------------------------
5
5
6 To set up your Apache Web Server for optimal performance and security, use
6 To set up your Apache Web Server for optimal performance and security, use
7 the information in the following sections.
7 the information in the following sections.
8
8
9 .. toctree::
9 .. toctree::
10
10
11 apache-conf-example
11 apache/apache-conf-example
12 apache-diffie-hellman
12 apache/apache-diffie-hellman
13 apache-subdirectory
13 apache/apache-subdirectory
14 apache-wsgi-coding
14 apache/apache-wsgi-coding
@@ -1,103 +1,107 b''
1 .. _apache-conf-eg:
1 .. _apache-conf-eg:
2
2
3 Apache Configuration Example
3 Apache Configuration Example
4 ----------------------------
4 ----------------------------
5
5
6 Use the following example to configure Apache as a your web server.
6 Use the following example to configure Apache as a your web server.
7 Below config if for an Apache Reverse Proxy configuration.
7 Below config if for an Apache Reverse Proxy configuration.
8
8
9 .. note::
9 .. note::
10
10
11 Apache requires the following modules to be enabled. Below is an example
11 Apache requires the following modules to be enabled. Below is an example
12 how to enable them on Ubuntu Server
12 how to enable them on Ubuntu Server
13
13
14
14
15 .. code-block:: bash
15 .. code-block:: bash
16
16
17 $ sudo a2enmod proxy
17 $ sudo a2enmod proxy
18 $ sudo a2enmod proxy_http
18 $ sudo a2enmod proxy_http
19 $ sudo a2enmod proxy_balancer
19 $ sudo a2enmod proxy_balancer
20 $ sudo a2enmod headers
20 $ sudo a2enmod headers
21 $ sudo a2enmod ssl
21 $ sudo a2enmod ssl
22 $ sudo a2enmod rewrite
22 $ sudo a2enmod rewrite
23
23
24 # requires Apache 2.4+, required to handle websockets/channelstream
24 # requires Apache 2.4+, required to handle websockets/channelstream
25 $ sudo a2enmod proxy_wstunnel
25 $ sudo a2enmod proxy_wstunnel
26
26
27
27
28 .. code-block:: apache
28 .. code-block:: apache
29
29
30 ## HTTP to HTTPS rewrite
30 ## HTTP to HTTPS rewrite
31 <VirtualHost *:80>
31 <VirtualHost *:80>
32 ServerName rhodecode.myserver.com
32 ServerName rhodecode.myserver.com
33 DocumentRoot /var/www/html
33 DocumentRoot /var/www/html
34 Redirect permanent / https://rhodecode.myserver.com/
34 Redirect permanent / https://rhodecode.myserver.com/
35 </VirtualHost>
35 </VirtualHost>
36
36
37 ## MAIN SSL enabled server
37 ## MAIN SSL enabled server
38 <VirtualHost *:443>
38 <VirtualHost *:443>
39
39
40 ServerName rhodecode.myserver.com
40 ServerName rhodecode.myserver.com
41 ServerAlias rhodecode.myserver.com
41 ServerAlias rhodecode.myserver.com
42
42
43 ## Skip ProxyPass the _static to backend server
43 ## Skip ProxyPass the _static to backend server
44 #ProxyPass /_static !
44 #ProxyPass /_static !
45
45
46 ## serve static files by Apache, recommended for performance
46 ## serve static files by Apache, recommended for performance
47 #Alias /_static/rhodecode /home/ubuntu/.rccontrol/community-1/static
47 #Alias /_static/rhodecode /home/ubuntu/.rccontrol/community-1/static
48
48
49 ## Allow Apache to access the static files in this directory
49 ## Allow Apache to access the static files in this directory
50 #<Directory /home/ubuntu/.rccontrol/community-1/static/>
50 #<Directory /home/ubuntu/.rccontrol/community-1/static/>
51 # AllowOverride none
51 # AllowOverride none
52 # Require all granted
52 # Require all granted
53 #</Directory>
53 #</Directory>
54
54
55 RequestHeader set X-Forwarded-Proto "https"
55 RequestHeader set X-Forwarded-Proto "https"
56
56
57 ## channelstream websocket handling
57 ## channelstream websocket handling
58 ProxyPass /_channelstream ws://localhost:9800
58 ProxyPass /_channelstream ws://localhost:9800
59 ProxyPassReverse /_channelstream ws://localhost:9800
59 ProxyPassReverse /_channelstream ws://localhost:9800
60
60
61 <Proxy *>
61 <Proxy *>
62 Order allow,deny
62 Order allow,deny
63 Allow from all
63 Allow from all
64 </Proxy>
64 </Proxy>
65
65
66 # Directive to properly generate url (clone url) for RhodeCode
66 # Directive to properly generate url (clone url) for RhodeCode
67 ProxyPreserveHost On
67 ProxyPreserveHost On
68
68
69 # It allows request bodies to be sent to the backend using chunked transfer encoding.
70 SetEnv proxy-sendchunked 1
71
72 # Increase headers size for large Mercurial headers sent with many branches
73 LimitRequestLine 16380
74
69 # Url to running RhodeCode instance. This is shown as `- URL:` when
75 # Url to running RhodeCode instance. This is shown as `- URL:` when
70 # running rccontrol status.
76 # running rccontrol status.
77
71 ProxyPass / http://127.0.0.1:10002/ timeout=7200 Keepalive=On
78 ProxyPass / http://127.0.0.1:10002/ timeout=7200 Keepalive=On
72 ProxyPassReverse / http://127.0.0.1:10002/
79 ProxyPassReverse / http://127.0.0.1:10002/
73
80
74 # Increase headers for large Mercurial headers
75 LimitRequestLine 16380
76
77 # strict http prevents from https -> http downgrade
81 # strict http prevents from https -> http downgrade
78 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
82 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
79
83
80 # Set x-frame options
84 # Set x-frame options
81 Header always append X-Frame-Options SAMEORIGIN
85 Header always append X-Frame-Options SAMEORIGIN
82
86
83 # To enable https use line below
87 # To enable https use line below
84 # SetEnvIf X-Url-Scheme https HTTPS=1
88 # SetEnvIf X-Url-Scheme https HTTPS=1
85
89
86 # SSL setup
90 # SSL setup
87 SSLEngine On
91 SSLEngine On
88 SSLCertificateFile /etc/apache2/ssl/rhodecode.myserver.pem
92 SSLCertificateFile /etc/apache2/ssl/rhodecode.myserver.pem
89 SSLCertificateKeyFile /etc/apache2/ssl/rhodecode.myserver.key
93 SSLCertificateKeyFile /etc/apache2/ssl/rhodecode.myserver.key
90
94
91 SSLProtocol all -SSLv2 -SSLv3
95 SSLProtocol all -SSLv2 -SSLv3
92 SSLCipherSuite 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
96 SSLCipherSuite 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
93 SSLHonorCipherOrder on
97 SSLHonorCipherOrder on
94
98
95 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
99 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
96 #SSLOpenSSLConfCmd DHParameters "/etc/apache2/dhparam.pem"
100 #SSLOpenSSLConfCmd DHParameters "/etc/apache2/dhparam.pem"
97
101
98 ## custom 502 error page. Will be displayed while RhodeCode server
102 ## custom 502 error page. Will be displayed while RhodeCode server
99 ## is turned off
103 ## is turned off
100 ErrorDocument 502 /path/to/.rccontrol/enterprise-1/static/502.html
104 ErrorDocument 502 /path/to/.rccontrol/enterprise-1/static/502.html
101
105
102 </VirtualHost>
106 </VirtualHost>
103
107
1 NO CONTENT: file renamed from docs/admin/apache-diffie-hellman.rst to docs/admin/system_admin/apache/apache-diffie-hellman.rst
NO CONTENT: file renamed from docs/admin/apache-diffie-hellman.rst to docs/admin/system_admin/apache/apache-diffie-hellman.rst
1 NO CONTENT: file renamed from docs/admin/apache-subdirectory.rst to docs/admin/system_admin/apache/apache-subdirectory.rst
NO CONTENT: file renamed from docs/admin/apache-subdirectory.rst to docs/admin/system_admin/apache/apache-subdirectory.rst
1 NO CONTENT: file renamed from docs/admin/apache-wsgi-coding.rst to docs/admin/system_admin/apache/apache-wsgi-coding.rst
NO CONTENT: file renamed from docs/admin/apache-wsgi-coding.rst to docs/admin/system_admin/apache/apache-wsgi-coding.rst
1 NO CONTENT: file renamed from docs/admin/backup-restore.rst to docs/admin/system_admin/backup-restore.rst
NO CONTENT: file renamed from docs/admin/backup-restore.rst to docs/admin/system_admin/backup-restore.rst
1 NO CONTENT: file renamed from docs/admin/cleanup-cmds.rst to docs/admin/system_admin/cleanup-cmds.rst
NO CONTENT: file renamed from docs/admin/cleanup-cmds.rst to docs/admin/system_admin/cleanup-cmds.rst
1 NO CONTENT: file renamed from docs/admin/config-files-overview.rst to docs/admin/system_admin/config-files-overview.rst
NO CONTENT: file renamed from docs/admin/config-files-overview.rst to docs/admin/system_admin/config-files-overview.rst
1 NO CONTENT: file renamed from docs/admin/enable-debug.rst to docs/admin/system_admin/enable-debug.rst
NO CONTENT: file renamed from docs/admin/enable-debug.rst to docs/admin/system_admin/enable-debug.rst
1 NO CONTENT: file renamed from docs/admin/gunicorn-ssl-support.rst to docs/admin/system_admin/gunicorn-ssl-support.rst
NO CONTENT: file renamed from docs/admin/gunicorn-ssl-support.rst to docs/admin/system_admin/gunicorn-ssl-support.rst
1 NO CONTENT: file renamed from docs/admin/indexing.rst to docs/admin/system_admin/indexing.rst
NO CONTENT: file renamed from docs/admin/indexing.rst to docs/admin/system_admin/indexing.rst
@@ -1,14 +1,14 b''
1 .. _nginx-ws-ref:
1 .. _nginx-ws-ref:
2
2
3 Nginx HTTP Server Configuration
3 Nginx HTTP Server Configuration
4 -------------------------------
4 -------------------------------
5
5
6 To set up your Nginx Web Server for optimal performance and security, use
6 To set up your Nginx Web Server for optimal performance and security, use
7 the information in the following sections.
7 the information in the following sections.
8
8
9 .. toctree::
9 .. toctree::
10
10
11 nginx-config-example
11 nginx/nginx-config-example
12 nginx-diffie-hellman
12 nginx/nginx-diffie-hellman
13 nginx-proxy-conf
13 nginx/nginx-proxy-conf
14 nginx-url-prefix
14 nginx/nginx-url-prefix
1 NO CONTENT: file renamed from docs/admin/nginx-config-example.rst to docs/admin/system_admin/nginx/nginx-config-example.rst
NO CONTENT: file renamed from docs/admin/nginx-config-example.rst to docs/admin/system_admin/nginx/nginx-config-example.rst
1 NO CONTENT: file renamed from docs/admin/nginx-diffie-hellman.rst to docs/admin/system_admin/nginx/nginx-diffie-hellman.rst
NO CONTENT: file renamed from docs/admin/nginx-diffie-hellman.rst to docs/admin/system_admin/nginx/nginx-diffie-hellman.rst
1 NO CONTENT: file renamed from docs/admin/nginx-proxy-conf.rst to docs/admin/system_admin/nginx/nginx-proxy-conf.rst
NO CONTENT: file renamed from docs/admin/nginx-proxy-conf.rst to docs/admin/system_admin/nginx/nginx-proxy-conf.rst
1 NO CONTENT: file renamed from docs/admin/nginx-url-prefix.rst to docs/admin/system_admin/nginx/nginx-url-prefix.rst
NO CONTENT: file renamed from docs/admin/nginx-url-prefix.rst to docs/admin/system_admin/nginx/nginx-url-prefix.rst
1 NO CONTENT: file renamed from docs/admin/reset-information.rst to docs/admin/system_admin/reset-information.rst
NO CONTENT: file renamed from docs/admin/reset-information.rst to docs/admin/system_admin/reset-information.rst
1 NO CONTENT: file renamed from docs/admin/svn-http.rst to docs/admin/system_admin/svn-http.rst
NO CONTENT: file renamed from docs/admin/svn-http.rst to docs/admin/system_admin/svn-http.rst
1 NO CONTENT: file renamed from docs/admin/svn-path-permissions.rst to docs/admin/system_admin/svn-path-permissions.rst
NO CONTENT: file renamed from docs/admin/svn-path-permissions.rst to docs/admin/system_admin/svn-path-permissions.rst
@@ -1,21 +1,21 b''
1 .. _rhodecode-tuning-ref:
1 .. _rhodecode-tuning-ref:
2
2
3 Tuning |RCE|
3 Tuning |RCE|
4 ============
4 ============
5
5
6 To customize your |RCE| |version| installation for maximum performance you
6 To customize your |RCE| |version| installation for maximum performance you
7 may find some of the following methods useful.
7 may find some of the following methods useful.
8
8
9 .. toctree::
9 .. toctree::
10
10
11 tuning-gunicorn
11 tuning/tuning-gunicorn
12 tuning-vcs-memory-cache
12 tuning/tuning-vcs-memory-cache
13 tuning-user-sessions-performance
13 tuning/tuning-user-sessions-performance
14 tuning-increase-db-performance
14 tuning/tuning-increase-db-performance
15 tuning-scale-horizontally-cluster
15 tuning/tuning-scale-horizontally-cluster
16 tuning-mount-cache-memory
16 tuning/tuning-mount-cache-memory
17 tuning-change-encoding
17 tuning/tuning-change-encoding
18 tuning-change-large-file-dir
18 tuning/tuning-change-large-file-dir
19 tuning-change-lfs-dir
19 tuning/tuning-change-lfs-dir
20 tuning-hg-auth-loop
20 tuning/tuning-hg-auth-loop
21
21
1 NO CONTENT: file renamed from docs/admin/tuning-change-encoding.rst to docs/admin/system_admin/tuning/tuning-change-encoding.rst
NO CONTENT: file renamed from docs/admin/tuning-change-encoding.rst to docs/admin/system_admin/tuning/tuning-change-encoding.rst
1 NO CONTENT: file renamed from docs/admin/tuning-change-large-file-dir.rst to docs/admin/system_admin/tuning/tuning-change-large-file-dir.rst
NO CONTENT: file renamed from docs/admin/tuning-change-large-file-dir.rst to docs/admin/system_admin/tuning/tuning-change-large-file-dir.rst
1 NO CONTENT: file renamed from docs/admin/tuning-change-lfs-dir.rst to docs/admin/system_admin/tuning/tuning-change-lfs-dir.rst
NO CONTENT: file renamed from docs/admin/tuning-change-lfs-dir.rst to docs/admin/system_admin/tuning/tuning-change-lfs-dir.rst
@@ -1,126 +1,126 b''
1 .. _increase-gunicorn:
1 .. _increase-gunicorn:
2
2
3 Configure Gunicorn Workers
3 Configure Gunicorn Workers
4 --------------------------
4 --------------------------
5
5
6
6
7 |RCE| comes with `Gunicorn`_ which is a Python WSGI HTTP Server for UNIX.
7 |RCE| comes with `Gunicorn`_ which is a Python WSGI HTTP Server for UNIX.
8
8
9 To improve |RCE| performance you can increase the number of `Gunicorn`_ workers.
9 To improve |RCE| performance you can increase the number of `Gunicorn`_ workers.
10 This allows to handle more connections concurrently, and provide better
10 This allows to handle more connections concurrently, and provide better
11 responsiveness and performance.
11 responsiveness and performance.
12
12
13 By default during installation |RCC| tries to detect how many CPUs are
13 By default during installation |RCC| tries to detect how many CPUs are
14 available in the system, and set the number workers based on that information.
14 available in the system, and set the number workers based on that information.
15 However sometimes it's better to manually set the number of workers.
15 However sometimes it's better to manually set the number of workers.
16
16
17 To do this, use the following steps:
17 To do this, use the following steps:
18
18
19 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
19 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
20 2. In the ``[server:main]`` section, change the number of Gunicorn
20 2. In the ``[server:main]`` section, change the number of Gunicorn
21 ``workers`` using the following default formula :math:`(2 * Cores) + 1`.
21 ``workers`` using the following default formula :math:`(2 * Cores) + 1`.
22 We however not recommend using more than 8-12 workers per server. It's better
22 We however not recommend using more than 8-12 workers per server. It's better
23 to start using the :ref:`scale-horizontal-cluster` in case that performance
23 to start using the :ref:`scale-horizontal-cluster` in case that performance
24 with 8-12 workers is not enough.
24 with 8-12 workers is not enough.
25
25
26 .. code-block:: ini
26 .. code-block:: ini
27
27
28 use = egg:gunicorn#main
28 use = egg:gunicorn#main
29 ## Sets the number of process workers. You must set `instance_id = *`
29 ## Sets the number of process workers. You must set `instance_id = *`
30 ## when this option is set to more than one worker, recommended
30 ## when this option is set to more than one worker, recommended
31 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
31 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
32 ## The `instance_id = *` must be set in the [app:main] section below
32 ## The `instance_id = *` must be set in the [app:main] section below
33 workers = 4
33 workers = 4
34 ## process name
34 ## process name
35 proc_name = rhodecode
35 proc_name = rhodecode
36 ## type of worker class, one of sync, gevent
36 ## type of worker class, one of sync, gevent
37 ## recommended for bigger setup is using of of other than sync one
37 ## recommended for bigger setup is using of of other than sync one
38 worker_class = sync
38 worker_class = sync
39 ## The maximum number of simultaneous clients. Valid only for Gevent
39 ## The maximum number of simultaneous clients. Valid only for Gevent
40 #worker_connections = 10
40 #worker_connections = 10
41 ## max number of requests that worker will handle before being gracefully
41 ## max number of requests that worker will handle before being gracefully
42 ## restarted, could prevent memory leaks
42 ## restarted, could prevent memory leaks
43 max_requests = 1000
43 max_requests = 1000
44 max_requests_jitter = 30
44 max_requests_jitter = 30
45 ## amount of time a worker can spend with handling a request before it
45 ## amount of time a worker can spend with handling a request tuning-change-lfs-dir.before it
46 ## gets killed and restarted. Set to 6hrs
46 ## gets killed and restarted. Set to 6hrs
47 timeout = 21600
47 timeout = 21600
48
48
49 3. In the ``[app:main]`` section, set the ``instance_id`` property to ``*``.
49 3. In the ``[app:main]`` section, set the ``instance_id`` property to ``*``.
50
50
51 .. code-block:: ini
51 .. code-block:: ini
52
52
53 # In the [app:main] section
53 # In the [app:main] section
54 [app:main]
54 [app:main]
55 # You must set `instance_id = *`
55 # You must set `instance_id = *`
56 instance_id = *
56 instance_id = *
57
57
58 4. Change the VCSServer workers too. Open the
58 4. Change the VCSServer workers too. Open the
59 :file:`home/{user}/.rccontrol/{instance-id}/vcsserver.ini` file.
59 :file:`home/{user}/.rccontrol/{instance-id}/vcsserver.ini` file.
60
60
61 5. In the ``[server:main]`` section, increase the number of Gunicorn
61 5. In the ``[server:main]`` section, increase the number of Gunicorn
62 ``workers`` using the following formula :math:`(2 * Cores) + 1`.
62 ``workers`` using the following formula :math:`(2 * Cores) + 1`.
63
63
64 .. code-block:: ini
64 .. code-block:: ini
65
65
66 ## run with gunicorn --log-config vcsserver.ini --paste vcsserver.ini
66 ## run with gunicorn --log-config vcsserver.ini --paste vcsserver.ini
67 use = egg:gunicorn#main
67 use = egg:gunicorn#main
68 ## Sets the number of process workers. Recommended
68 ## Sets the number of process workers. Recommended
69 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
69 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
70 workers = 4
70 workers = 4
71 ## process name
71 ## process name
72 proc_name = rhodecode_vcsserver
72 proc_name = rhodecode_vcsserver
73 ## type of worker class, currently `sync` is the only option allowed.
73 ## type of worker class, currently `sync` is the only option allowed.
74 worker_class = sync
74 worker_class = sync
75 ## The maximum number of simultaneous clients. Valid only for Gevent
75 ## The maximum number of simultaneous clients. Valid only for Gevent
76 #worker_connections = 10
76 #worker_connections = 10
77 ## max number of requests that worker will handle before being gracefully
77 ## max number of requests that worker will handle before being gracefully
78 ## restarted, could prevent memory leaks
78 ## restarted, could prevent memory leaks
79 max_requests = 1000
79 max_requests = 1000
80 max_requests_jitter = 30
80 max_requests_jitter = 30
81 ## amount of time a worker can spend with handling a request before it
81 ## amount of time a worker can spend with handling a request before it
82 ## gets killed and restarted. Set to 6hrs
82 ## gets killed and restarted. Set to 6hrs
83 timeout = 21600
83 timeout = 21600
84
84
85 6. Save your changes.
85 6. Save your changes.
86 7. Restart your |RCE| instances, using the following command:
86 7. Restart your |RCE| instances, using the following command:
87
87
88 .. code-block:: bash
88 .. code-block:: bash
89
89
90 $ rccontrol restart '*'
90 $ rccontrol restart '*'
91
91
92
92
93 Gunicorn Gevent Backend
93 Gunicorn Gevent Backend
94 -----------------------
94 -----------------------
95
95
96 Gevent is an asynchronous worker type for Gunicorn. It allows accepting multiple
96 Gevent is an asynchronous worker type for Gunicorn. It allows accepting multiple
97 connections on a single `Gunicorn`_ worker. This means you can handle 100s
97 connections on a single `Gunicorn`_ worker. This means you can handle 100s
98 of concurrent clones, or API calls using just few workers. A setting called
98 of concurrent clones, or API calls using just few workers. A setting called
99 `worker_connections` defines on how many connections each worker can
99 `worker_connections` defines on how many connections each worker can
100 handle using `Gevent`.
100 handle using `Gevent`.
101
101
102
102
103 To enable `Gevent` on |RCE| do the following:
103 To enable `Gevent` on |RCE| do the following:
104
104
105
105
106 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
106 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
107 2. In the ``[server:main]`` section, change `worker_class` for Gunicorn.
107 2. In the ``[server:main]`` section, change `worker_class` for Gunicorn.
108
108
109
109
110 .. code-block:: ini
110 .. code-block:: ini
111
111
112 ## type of worker class, one of sync, gevent
112 ## type of worker class, one of sync, gevent
113 ## recommended for bigger setup is using of of other than sync one
113 ## recommended for bigger setup is using of of other than sync one
114 worker_class = gevent
114 worker_class = gevent
115 ## The maximum number of simultaneous clients. Valid only for Gevent
115 ## The maximum number of simultaneous clients. Valid only for Gevent
116 worker_connections = 30
116 worker_connections = 30
117
117
118
118
119 .. note::
119 .. note::
120
120
121 `Gevent` is currently only supported for Enterprise/Community instances.
121 `Gevent` is currently only supported for Enterprise/Community instances.
122 VCSServer doesn't yet support gevent.
122 VCSServer doesn't yet support gevent.
123
123
124
124
125
125
126 .. _Gunicorn: http://gunicorn.org/
126 .. _Gunicorn: http://gunicorn.org/
1 NO CONTENT: file renamed from docs/admin/tuning-hg-auth-loop.rst to docs/admin/system_admin/tuning/tuning-hg-auth-loop.rst
NO CONTENT: file renamed from docs/admin/tuning-hg-auth-loop.rst to docs/admin/system_admin/tuning/tuning-hg-auth-loop.rst
1 NO CONTENT: file renamed from docs/admin/tuning-increase-db-performance.rst to docs/admin/system_admin/tuning/tuning-increase-db-performance.rst
NO CONTENT: file renamed from docs/admin/tuning-increase-db-performance.rst to docs/admin/system_admin/tuning/tuning-increase-db-performance.rst
1 NO CONTENT: file renamed from docs/admin/tuning-mount-cache-memory.rst to docs/admin/system_admin/tuning/tuning-mount-cache-memory.rst
NO CONTENT: file renamed from docs/admin/tuning-mount-cache-memory.rst to docs/admin/system_admin/tuning/tuning-mount-cache-memory.rst
1 NO CONTENT: file renamed from docs/admin/tuning-scale-horizontally-cluster.rst to docs/admin/system_admin/tuning/tuning-scale-horizontally-cluster.rst
NO CONTENT: file renamed from docs/admin/tuning-scale-horizontally-cluster.rst to docs/admin/system_admin/tuning/tuning-scale-horizontally-cluster.rst
1 NO CONTENT: file renamed from docs/admin/tuning-user-sessions-performance.rst to docs/admin/system_admin/tuning/tuning-user-sessions-performance.rst
NO CONTENT: file renamed from docs/admin/tuning-user-sessions-performance.rst to docs/admin/system_admin/tuning/tuning-user-sessions-performance.rst
1 NO CONTENT: file renamed from docs/admin/tuning-vcs-memory-cache.rst to docs/admin/system_admin/tuning/tuning-vcs-memory-cache.rst
NO CONTENT: file renamed from docs/admin/tuning-vcs-memory-cache.rst to docs/admin/system_admin/tuning/tuning-vcs-memory-cache.rst
1 NO CONTENT: file renamed from docs/admin/vcs-server.rst to docs/admin/system_admin/vcs-server.rst
NO CONTENT: file renamed from docs/admin/vcs-server.rst to docs/admin/system_admin/vcs-server.rst
@@ -1,23 +1,24 b''
1 .. _user-admin-set:
1 .. _user-admin-set:
2
2
3 User Administration
3 User Administration
4 ===================
4 ===================
5
5
6 |RCE| enables you to define permissions for the following entities within the
6 |RCE| enables you to define permissions for the following entities within the
7 system; **users**, **user groups**, **repositories**, **repository groups**.
7 system; **users**, **user groups**, **repositories**, **repository groups**.
8
8
9 Within each one of these entities you can set default settings,
9 Within each one of these entities you can set default settings,
10 and then all users or |repos| inherit those default permission settings
10 and then all users or |repos| inherit those default permission settings
11 unless individually defined. Each of these entities can have the following
11 unless individually defined. Each of these entities can have the following
12 permissions applied to it; |perm|.
12 permissions applied to it; |perm|.
13
13
14 .. toctree::
14 .. toctree::
15
15
16 public-access
16 user_admin/public-access
17 default-user-perms
17 user_admin/default-user-perms
18 adding-anonymous-user
18 user_admin/adding-anonymous-user
19 adding-new-user
19 user_admin/adding-new-user
20 setting-default-permissions
20 user_admin/setting-default-permissions
21 setting-usergroup-permissions
21 user_admin/setting-usergroup-permissions
22 user_admin/user-admin-tasks
22
23
23 .. |perm| replace:: **None**, **Read**, **Write**, or **Admin** No newline at end of file
24 .. |perm| replace:: **None**, **Read**, **Write**, or **Admin**
1 NO CONTENT: file renamed from docs/admin/adding-anonymous-user.rst to docs/admin/user_admin/adding-anonymous-user.rst
NO CONTENT: file renamed from docs/admin/adding-anonymous-user.rst to docs/admin/user_admin/adding-anonymous-user.rst
1 NO CONTENT: file renamed from docs/admin/adding-new-user.rst to docs/admin/user_admin/adding-new-user.rst
NO CONTENT: file renamed from docs/admin/adding-new-user.rst to docs/admin/user_admin/adding-new-user.rst
1 NO CONTENT: file renamed from docs/admin/default-user-perms.rst to docs/admin/user_admin/default-user-perms.rst
NO CONTENT: file renamed from docs/admin/default-user-perms.rst to docs/admin/user_admin/default-user-perms.rst
1 NO CONTENT: file renamed from docs/admin/public-access.rst to docs/admin/user_admin/public-access.rst
NO CONTENT: file renamed from docs/admin/public-access.rst to docs/admin/user_admin/public-access.rst
1 NO CONTENT: file renamed from docs/admin/setting-default-permissions.rst to docs/admin/user_admin/setting-default-permissions.rst
NO CONTENT: file renamed from docs/admin/setting-default-permissions.rst to docs/admin/user_admin/setting-default-permissions.rst
1 NO CONTENT: file renamed from docs/admin/setting-usergroup-permissions.rst to docs/admin/user_admin/setting-usergroup-permissions.rst
NO CONTENT: file renamed from docs/admin/setting-usergroup-permissions.rst to docs/admin/user_admin/setting-usergroup-permissions.rst
@@ -1,209 +1,210 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/repo-methods
199 methods/repo-methods
200 methods/store-methods
200 methods/store-methods
201 methods/license-methods
201 methods/license-methods
202 methods/deprecated-methods
202 methods/deprecated-methods
203 methods/gist-methods
203 methods/gist-methods
204 methods/pull-request-methods
204 methods/pull-request-methods
205 methods/repo-methods
205 methods/repo-methods
206 methods/repo-group-methods
206 methods/repo-group-methods
207 methods/search-methods
207 methods/server-methods
208 methods/server-methods
208 methods/user-methods
209 methods/user-methods
209 methods/user-group-methods
210 methods/user-group-methods
@@ -1,1134 +1,1133 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_comments
397 get_repo_comments
398 -----------------
398 -----------------
399
399
400 .. py:function:: get_repo_comments(apiuser, repoid, commit_id=<Optional:None>, comment_type=<Optional:None>, userid=<Optional:None>)
400 .. py:function:: get_repo_comments(apiuser, repoid, commit_id=<Optional:None>, comment_type=<Optional:None>, userid=<Optional:None>)
401
401
402 Get all comments for a repository
402 Get all comments for a repository
403
403
404 :param apiuser: This is filled automatically from the |authtoken|.
404 :param apiuser: This is filled automatically from the |authtoken|.
405 :type apiuser: AuthUser
405 :type apiuser: AuthUser
406 :param repoid: Set the repository name or repository ID.
406 :param repoid: Set the repository name or repository ID.
407 :type repoid: str or int
407 :type repoid: str or int
408 :param commit_id: Optionally filter the comments by the commit_id
408 :param commit_id: Optionally filter the comments by the commit_id
409 :type commit_id: Optional(str), default: None
409 :type commit_id: Optional(str), default: None
410 :param comment_type: Optionally filter the comments by the comment_type
410 :param comment_type: Optionally filter the comments by the comment_type
411 one of: 'note', 'todo'
411 one of: 'note', 'todo'
412 :type comment_type: Optional(str), default: None
412 :type comment_type: Optional(str), default: None
413 :param userid: Optionally filter the comments by the author of comment
413 :param userid: Optionally filter the comments by the author of comment
414 :type userid: Optional(str or int), Default: None
414 :type userid: Optional(str or int), Default: None
415
415
416 Example error output:
416 Example error output:
417
417
418 .. code-block:: bash
418 .. code-block:: bash
419
419
420 {
420 {
421 "id" : <id_given_in_input>,
421 "id" : <id_given_in_input>,
422 "result" : [
422 "result" : [
423 {
423 {
424 "comment_author": <USER_DETAILS>,
424 "comment_author": <USER_DETAILS>,
425 "comment_created_on": "2017-02-01T14:38:16.309",
425 "comment_created_on": "2017-02-01T14:38:16.309",
426 "comment_f_path": "file.txt",
426 "comment_f_path": "file.txt",
427 "comment_id": 282,
427 "comment_id": 282,
428 "comment_lineno": "n1",
428 "comment_lineno": "n1",
429 "comment_resolved_by": null,
429 "comment_resolved_by": null,
430 "comment_status": [],
430 "comment_status": [],
431 "comment_text": "This file needs a header",
431 "comment_text": "This file needs a header",
432 "comment_type": "todo"
432 "comment_type": "todo"
433 }
433 }
434 ],
434 ],
435 "error" : null
435 "error" : null
436 }
436 }
437
437
438
438
439 get_repo_file
439 get_repo_file
440 -------------
440 -------------
441
441
442 .. py:function:: get_repo_file(apiuser, repoid, commit_id, file_path, max_file_bytes=<Optional:None>, details=<Optional:'basic'>, cache=<Optional:True>)
442 .. py:function:: get_repo_file(apiuser, repoid, commit_id, file_path, max_file_bytes=<Optional:None>, details=<Optional:'basic'>, cache=<Optional:True>)
443
443
444 Returns a single file from repository at given revision.
444 Returns a single file from repository at given revision.
445
445
446 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,
447 or users with at least read rights to |repos|.
447 or users with at least read rights to |repos|.
448
448
449 :param apiuser: This is filled automatically from the |authtoken|.
449 :param apiuser: This is filled automatically from the |authtoken|.
450 :type apiuser: AuthUser
450 :type apiuser: AuthUser
451 :param repoid: The repository name or repository ID.
451 :param repoid: The repository name or repository ID.
452 :type repoid: str or int
452 :type repoid: str or int
453 :param commit_id: The revision for which listing should be done.
453 :param commit_id: The revision for which listing should be done.
454 :type commit_id: str
454 :type commit_id: str
455 :param file_path: The path from which to start displaying.
455 :param file_path: The path from which to start displaying.
456 :type file_path: str
456 :type file_path: str
457 :param details: Returns different set of information about nodes.
457 :param details: Returns different set of information about nodes.
458 The valid options are ``minimal`` ``basic`` and ``full``.
458 The valid options are ``minimal`` ``basic`` and ``full``.
459 :type details: Optional(str)
459 :type details: Optional(str)
460 :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
461 :type max_file_bytes: Optional(int)
461 :type max_file_bytes: Optional(int)
462 :param cache: Use internal caches for fetching files. If disabled fetching
462 :param cache: Use internal caches for fetching files. If disabled fetching
463 files is slower but more memory efficient
463 files is slower but more memory efficient
464 :type cache: Optional(bool)
464 :type cache: Optional(bool)
465
465 Example output:
466 Example output:
466
467
467 .. code-block:: bash
468 .. code-block:: bash
468
469
469 id : <id_given_in_input>
470 id : <id_given_in_input>
470 result: {
471 result: {
471 "binary": false,
472 "binary": false,
472 "extension": "py",
473 "extension": "py",
473 "lines": 35,
474 "lines": 35,
474 "content": "....",
475 "content": "....",
475 "md5": "76318336366b0f17ee249e11b0c99c41",
476 "md5": "76318336366b0f17ee249e11b0c99c41",
476 "mimetype": "text/x-python",
477 "mimetype": "text/x-python",
477 "name": "python.py",
478 "name": "python.py",
478 "size": 817,
479 "size": 817,
479 "type": "file",
480 "type": "file",
480 }
481 }
481 error: null
482 error: null
482
483
483
484
484 get_repo_fts_tree
485 get_repo_fts_tree
485 -----------------
486 -----------------
486
487
487 .. py:function:: get_repo_fts_tree(apiuser, repoid, commit_id, root_path)
488 .. py:function:: get_repo_fts_tree(apiuser, repoid, commit_id, root_path)
488
489
489 Returns a list of tree nodes for path at given revision. This api is built
490 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 strictly for usage in full text search building, and shouldn't be consumed
491
492
492 This command can only be run using an |authtoken| with admin rights,
493 This command can only be run using an |authtoken| with admin rights,
493 or users with at least read rights to |repos|.
494 or users with at least read rights to |repos|.
494
495
495
496
496 get_repo_nodes
497 get_repo_nodes
497 --------------
498 --------------
498
499
499 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
500 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
500
501
501 Returns a list of nodes and children in a flat list for a given
502 Returns a list of nodes and children in a flat list for a given
502 path at given revision.
503 path at given revision.
503
504
504 It's possible to specify ret_type to show only `files` or `dirs`.
505 It's possible to specify ret_type to show only `files` or `dirs`.
505
506
506 This command can only be run using an |authtoken| with admin rights,
507 This command can only be run using an |authtoken| with admin rights,
507 or users with at least read rights to |repos|.
508 or users with at least read rights to |repos|.
508
509
509 :param apiuser: This is filled automatically from the |authtoken|.
510 :param apiuser: This is filled automatically from the |authtoken|.
510 :type apiuser: AuthUser
511 :type apiuser: AuthUser
511 :param repoid: The repository name or repository ID.
512 :param repoid: The repository name or repository ID.
512 :type repoid: str or int
513 :type repoid: str or int
513 :param revision: The revision for which listing should be done.
514 :param revision: The revision for which listing should be done.
514 :type revision: str
515 :type revision: str
515 :param root_path: The path from which to start displaying.
516 :param root_path: The path from which to start displaying.
516 :type root_path: str
517 :type root_path: str
517 :param ret_type: Set the return type. Valid options are
518 :param ret_type: Set the return type. Valid options are
518 ``all`` (default), ``files`` and ``dirs``.
519 ``all`` (default), ``files`` and ``dirs``.
519 :type ret_type: Optional(str)
520 :type ret_type: Optional(str)
520 :param details: Returns extended information about nodes, such as
521 :param details: Returns extended information about nodes, such as
521 md5, binary, and or content.
522 md5, binary, and or content.
522 The valid options are ``basic`` and ``full``.
523 The valid options are ``basic`` and ``full``.
523 :type details: Optional(str)
524 :type details: Optional(str)
524 :param max_file_bytes: Only return file content under this file size bytes
525 :param max_file_bytes: Only return file content under this file size bytes
525 :type details: Optional(int)
526 :type details: Optional(int)
526
527 Example output:
528
527
529 .. code-block:: bash
528 Example output:
529
530 .. code-block:: bash
530
531
531 id : <id_given_in_input>
532 id : <id_given_in_input>
532 result: [
533 result: [
533 {
534 {
534 "binary": false,
535 "binary": false,
535 "content": "File line
536 "content": "File line",
536 Line2
537 "extension": "md",
537 ",
538 "lines": 2,
538 "extension": "md",
539 "md5": "059fa5d29b19c0657e384749480f6422",
539 "lines": 2,
540 "mimetype": "text/x-minidsrc",
540 "md5": "059fa5d29b19c0657e384749480f6422",
541 "name": "file.md",
541 "mimetype": "text/x-minidsrc",
542 "size": 580,
542 "name": "file.md",
543 "type": "file"
543 "size": 580,
544 },
544 "type": "file"
545 ...
545 },
546 ]
546 ...
547 error: null
547 ]
548 error: null
549
548
550
549
551 get_repo_refs
550 get_repo_refs
552 -------------
551 -------------
553
552
554 .. py:function:: get_repo_refs(apiuser, repoid)
553 .. py:function:: get_repo_refs(apiuser, repoid)
555
554
556 Returns a dictionary of current references. It returns
555 Returns a dictionary of current references. It returns
557 bookmarks, branches, closed_branches, and tags for given repository
556 bookmarks, branches, closed_branches, and tags for given repository
558
557
559 It's possible to specify ret_type to show only `files` or `dirs`.
558 It's possible to specify ret_type to show only `files` or `dirs`.
560
559
561 This command can only be run using an |authtoken| with admin rights,
560 This command can only be run using an |authtoken| with admin rights,
562 or users with at least read rights to |repos|.
561 or users with at least read rights to |repos|.
563
562
564 :param apiuser: This is filled automatically from the |authtoken|.
563 :param apiuser: This is filled automatically from the |authtoken|.
565 :type apiuser: AuthUser
564 :type apiuser: AuthUser
566 :param repoid: The repository name or repository ID.
565 :param repoid: The repository name or repository ID.
567 :type repoid: str or int
566 :type repoid: str or int
568
567
569 Example output:
568 Example output:
570
569
571 .. code-block:: bash
570 .. code-block:: bash
572
571
573 id : <id_given_in_input>
572 id : <id_given_in_input>
574 "result": {
573 "result": {
575 "bookmarks": {
574 "bookmarks": {
576 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
575 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
577 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
576 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
578 },
577 },
579 "branches": {
578 "branches": {
580 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
579 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
581 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
580 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
582 },
581 },
583 "branches_closed": {},
582 "branches_closed": {},
584 "tags": {
583 "tags": {
585 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
584 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
586 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
585 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
587 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
586 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
588 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
587 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
589 }
588 }
590 }
589 }
591 error: null
590 error: null
592
591
593
592
594 get_repo_settings
593 get_repo_settings
595 -----------------
594 -----------------
596
595
597 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
596 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
598
597
599 Returns all settings for a repository. If key is given it only returns the
598 Returns all settings for a repository. If key is given it only returns the
600 setting identified by the key or null.
599 setting identified by the key or null.
601
600
602 :param apiuser: This is filled automatically from the |authtoken|.
601 :param apiuser: This is filled automatically from the |authtoken|.
603 :type apiuser: AuthUser
602 :type apiuser: AuthUser
604 :param repoid: The repository name or repository id.
603 :param repoid: The repository name or repository id.
605 :type repoid: str or int
604 :type repoid: str or int
606 :param key: Key of the setting to return.
605 :param key: Key of the setting to return.
607 :type: key: Optional(str)
606 :type: key: Optional(str)
608
607
609 Example output:
608 Example output:
610
609
611 .. code-block:: bash
610 .. code-block:: bash
612
611
613 {
612 {
614 "error": null,
613 "error": null,
615 "id": 237,
614 "id": 237,
616 "result": {
615 "result": {
617 "extensions_largefiles": true,
616 "extensions_largefiles": true,
618 "extensions_evolve": true,
617 "extensions_evolve": true,
619 "hooks_changegroup_push_logger": true,
618 "hooks_changegroup_push_logger": true,
620 "hooks_changegroup_repo_size": false,
619 "hooks_changegroup_repo_size": false,
621 "hooks_outgoing_pull_logger": true,
620 "hooks_outgoing_pull_logger": true,
622 "phases_publish": "True",
621 "phases_publish": "True",
623 "rhodecode_hg_use_rebase_for_merging": true,
622 "rhodecode_hg_use_rebase_for_merging": true,
624 "rhodecode_pr_merge_enabled": true,
623 "rhodecode_pr_merge_enabled": true,
625 "rhodecode_use_outdated_comments": true
624 "rhodecode_use_outdated_comments": true
626 }
625 }
627 }
626 }
628
627
629
628
630 get_repos
629 get_repos
631 ---------
630 ---------
632
631
633 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
632 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
634
633
635 Lists all existing repositories.
634 Lists all existing repositories.
636
635
637 This command can only be run using an |authtoken| with admin rights,
636 This command can only be run using an |authtoken| with admin rights,
638 or users with at least read rights to |repos|.
637 or users with at least read rights to |repos|.
639
638
640 :param apiuser: This is filled automatically from the |authtoken|.
639 :param apiuser: This is filled automatically from the |authtoken|.
641 :type apiuser: AuthUser
640 :type apiuser: AuthUser
642 :param root: specify root repository group to fetch repositories.
641 :param root: specify root repository group to fetch repositories.
643 filters the returned repositories to be members of given root group.
642 filters the returned repositories to be members of given root group.
644 :type root: Optional(None)
643 :type root: Optional(None)
645 :param traverse: traverse given root into subrepositories. With this flag
644 :param traverse: traverse given root into subrepositories. With this flag
646 set to False, it will only return top-level repositories from `root`.
645 set to False, it will only return top-level repositories from `root`.
647 if root is empty it will return just top-level repositories.
646 if root is empty it will return just top-level repositories.
648 :type traverse: Optional(True)
647 :type traverse: Optional(True)
649
648
650
649
651 Example output:
650 Example output:
652
651
653 .. code-block:: bash
652 .. code-block:: bash
654
653
655 id : <id_given_in_input>
654 id : <id_given_in_input>
656 result: [
655 result: [
657 {
656 {
658 "repo_id" : "<repo_id>",
657 "repo_id" : "<repo_id>",
659 "repo_name" : "<reponame>"
658 "repo_name" : "<reponame>"
660 "repo_type" : "<repo_type>",
659 "repo_type" : "<repo_type>",
661 "clone_uri" : "<clone_uri>",
660 "clone_uri" : "<clone_uri>",
662 "private": : "<bool>",
661 "private": : "<bool>",
663 "created_on" : "<datetimecreated>",
662 "created_on" : "<datetimecreated>",
664 "description" : "<description>",
663 "description" : "<description>",
665 "landing_rev": "<landing_rev>",
664 "landing_rev": "<landing_rev>",
666 "owner": "<repo_owner>",
665 "owner": "<repo_owner>",
667 "fork_of": "<name_of_fork_parent>",
666 "fork_of": "<name_of_fork_parent>",
668 "enable_downloads": "<bool>",
667 "enable_downloads": "<bool>",
669 "enable_locking": "<bool>",
668 "enable_locking": "<bool>",
670 "enable_statistics": "<bool>",
669 "enable_statistics": "<bool>",
671 },
670 },
672 ...
671 ...
673 ]
672 ]
674 error: null
673 error: null
675
674
676
675
677 grant_user_group_permission
676 grant_user_group_permission
678 ---------------------------
677 ---------------------------
679
678
680 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
679 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
681
680
682 Grant permission for a user group on the specified repository,
681 Grant permission for a user group on the specified repository,
683 or update existing permissions.
682 or update existing permissions.
684
683
685 This command can only be run using an |authtoken| with admin
684 This command can only be run using an |authtoken| with admin
686 permissions on the |repo|.
685 permissions on the |repo|.
687
686
688 :param apiuser: This is filled automatically from the |authtoken|.
687 :param apiuser: This is filled automatically from the |authtoken|.
689 :type apiuser: AuthUser
688 :type apiuser: AuthUser
690 :param repoid: Set the repository name or repository ID.
689 :param repoid: Set the repository name or repository ID.
691 :type repoid: str or int
690 :type repoid: str or int
692 :param usergroupid: Specify the ID of the user group.
691 :param usergroupid: Specify the ID of the user group.
693 :type usergroupid: str or int
692 :type usergroupid: str or int
694 :param perm: Set the user group permissions using the following
693 :param perm: Set the user group permissions using the following
695 format: (repository.(none|read|write|admin))
694 format: (repository.(none|read|write|admin))
696 :type perm: str
695 :type perm: str
697
696
698 Example output:
697 Example output:
699
698
700 .. code-block:: bash
699 .. code-block:: bash
701
700
702 id : <id_given_in_input>
701 id : <id_given_in_input>
703 result : {
702 result : {
704 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
703 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
705 "success": true
704 "success": true
706
705
707 }
706 }
708 error : null
707 error : null
709
708
710 Example error output:
709 Example error output:
711
710
712 .. code-block:: bash
711 .. code-block:: bash
713
712
714 id : <id_given_in_input>
713 id : <id_given_in_input>
715 result : null
714 result : null
716 error : {
715 error : {
717 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
716 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
718 }
717 }
719
718
720
719
721 grant_user_permission
720 grant_user_permission
722 ---------------------
721 ---------------------
723
722
724 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
723 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
725
724
726 Grant permissions for the specified user on the given repository,
725 Grant permissions for the specified user on the given repository,
727 or update existing permissions if found.
726 or update existing permissions if found.
728
727
729 This command can only be run using an |authtoken| with admin
728 This command can only be run using an |authtoken| with admin
730 permissions on the |repo|.
729 permissions on the |repo|.
731
730
732 :param apiuser: This is filled automatically from the |authtoken|.
731 :param apiuser: This is filled automatically from the |authtoken|.
733 :type apiuser: AuthUser
732 :type apiuser: AuthUser
734 :param repoid: Set the repository name or repository ID.
733 :param repoid: Set the repository name or repository ID.
735 :type repoid: str or int
734 :type repoid: str or int
736 :param userid: Set the user name.
735 :param userid: Set the user name.
737 :type userid: str
736 :type userid: str
738 :param perm: Set the user permissions, using the following format
737 :param perm: Set the user permissions, using the following format
739 ``(repository.(none|read|write|admin))``
738 ``(repository.(none|read|write|admin))``
740 :type perm: str
739 :type perm: str
741
740
742 Example output:
741 Example output:
743
742
744 .. code-block:: bash
743 .. code-block:: bash
745
744
746 id : <id_given_in_input>
745 id : <id_given_in_input>
747 result: {
746 result: {
748 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
747 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
749 "success": true
748 "success": true
750 }
749 }
751 error: null
750 error: null
752
751
753
752
754 invalidate_cache
753 invalidate_cache
755 ----------------
754 ----------------
756
755
757 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
756 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
758
757
759 Invalidates the cache for the specified repository.
758 Invalidates the cache for the specified repository.
760
759
761 This command can only be run using an |authtoken| with admin rights to
760 This command can only be run using an |authtoken| with admin rights to
762 the specified repository.
761 the specified repository.
763
762
764 This command takes the following options:
763 This command takes the following options:
765
764
766 :param apiuser: This is filled automatically from |authtoken|.
765 :param apiuser: This is filled automatically from |authtoken|.
767 :type apiuser: AuthUser
766 :type apiuser: AuthUser
768 :param repoid: Sets the repository name or repository ID.
767 :param repoid: Sets the repository name or repository ID.
769 :type repoid: str or int
768 :type repoid: str or int
770 :param delete_keys: This deletes the invalidated keys instead of
769 :param delete_keys: This deletes the invalidated keys instead of
771 just flagging them.
770 just flagging them.
772 :type delete_keys: Optional(``True`` | ``False``)
771 :type delete_keys: Optional(``True`` | ``False``)
773
772
774 Example output:
773 Example output:
775
774
776 .. code-block:: bash
775 .. code-block:: bash
777
776
778 id : <id_given_in_input>
777 id : <id_given_in_input>
779 result : {
778 result : {
780 'msg': Cache for repository `<repository name>` was invalidated,
779 'msg': Cache for repository `<repository name>` was invalidated,
781 'repository': <repository name>
780 'repository': <repository name>
782 }
781 }
783 error : null
782 error : null
784
783
785 Example error output:
784 Example error output:
786
785
787 .. code-block:: bash
786 .. code-block:: bash
788
787
789 id : <id_given_in_input>
788 id : <id_given_in_input>
790 result : null
789 result : null
791 error : {
790 error : {
792 'Error occurred during cache invalidation action'
791 'Error occurred during cache invalidation action'
793 }
792 }
794
793
795
794
796 lock
795 lock
797 ----
796 ----
798
797
799 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
798 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
800
799
801 Sets the lock state of the specified |repo| by the given user.
800 Sets the lock state of the specified |repo| by the given user.
802 From more information, see :ref:`repo-locking`.
801 From more information, see :ref:`repo-locking`.
803
802
804 * If the ``userid`` option is not set, the repository is locked to the
803 * If the ``userid`` option is not set, the repository is locked to the
805 user who called the method.
804 user who called the method.
806 * If the ``locked`` parameter is not set, the current lock state of the
805 * If the ``locked`` parameter is not set, the current lock state of the
807 repository is displayed.
806 repository is displayed.
808
807
809 This command can only be run using an |authtoken| with admin rights to
808 This command can only be run using an |authtoken| with admin rights to
810 the specified repository.
809 the specified repository.
811
810
812 This command takes the following options:
811 This command takes the following options:
813
812
814 :param apiuser: This is filled automatically from the |authtoken|.
813 :param apiuser: This is filled automatically from the |authtoken|.
815 :type apiuser: AuthUser
814 :type apiuser: AuthUser
816 :param repoid: Sets the repository name or repository ID.
815 :param repoid: Sets the repository name or repository ID.
817 :type repoid: str or int
816 :type repoid: str or int
818 :param locked: Sets the lock state.
817 :param locked: Sets the lock state.
819 :type locked: Optional(``True`` | ``False``)
818 :type locked: Optional(``True`` | ``False``)
820 :param userid: Set the repository lock to this user.
819 :param userid: Set the repository lock to this user.
821 :type userid: Optional(str or int)
820 :type userid: Optional(str or int)
822
821
823 Example error output:
822 Example error output:
824
823
825 .. code-block:: bash
824 .. code-block:: bash
826
825
827 id : <id_given_in_input>
826 id : <id_given_in_input>
828 result : {
827 result : {
829 'repo': '<reponame>',
828 'repo': '<reponame>',
830 'locked': <bool: lock state>,
829 'locked': <bool: lock state>,
831 'locked_since': <int: lock timestamp>,
830 'locked_since': <int: lock timestamp>,
832 'locked_by': <username of person who made the lock>,
831 'locked_by': <username of person who made the lock>,
833 'lock_reason': <str: reason for locking>,
832 'lock_reason': <str: reason for locking>,
834 'lock_state_changed': <bool: True if lock state has been changed in this request>,
833 'lock_state_changed': <bool: True if lock state has been changed in this request>,
835 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
834 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
836 or
835 or
837 'msg': 'Repo `<repository name>` not locked.'
836 'msg': 'Repo `<repository name>` not locked.'
838 or
837 or
839 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
838 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
840 }
839 }
841 error : null
840 error : null
842
841
843 Example error output:
842 Example error output:
844
843
845 .. code-block:: bash
844 .. code-block:: bash
846
845
847 id : <id_given_in_input>
846 id : <id_given_in_input>
848 result : null
847 result : null
849 error : {
848 error : {
850 'Error occurred locking repository `<reponame>`'
849 'Error occurred locking repository `<reponame>`'
851 }
850 }
852
851
853
852
854 maintenance
853 maintenance
855 -----------
854 -----------
856
855
857 .. py:function:: maintenance(apiuser, repoid)
856 .. py:function:: maintenance(apiuser, repoid)
858
857
859 Triggers a maintenance on the given repository.
858 Triggers a maintenance on the given repository.
860
859
861 This command can only be run using an |authtoken| with admin
860 This command can only be run using an |authtoken| with admin
862 rights to the specified repository. For more information,
861 rights to the specified repository. For more information,
863 see :ref:`config-token-ref`.
862 see :ref:`config-token-ref`.
864
863
865 This command takes the following options:
864 This command takes the following options:
866
865
867 :param apiuser: This is filled automatically from the |authtoken|.
866 :param apiuser: This is filled automatically from the |authtoken|.
868 :type apiuser: AuthUser
867 :type apiuser: AuthUser
869 :param repoid: The repository name or repository ID.
868 :param repoid: The repository name or repository ID.
870 :type repoid: str or int
869 :type repoid: str or int
871
870
872 Example output:
871 Example output:
873
872
874 .. code-block:: bash
873 .. code-block:: bash
875
874
876 id : <id_given_in_input>
875 id : <id_given_in_input>
877 result : {
876 result : {
878 "msg": "executed maintenance command",
877 "msg": "executed maintenance command",
879 "executed_actions": [
878 "executed_actions": [
880 <action_message>, <action_message2>...
879 <action_message>, <action_message2>...
881 ],
880 ],
882 "repository": "<repository name>"
881 "repository": "<repository name>"
883 }
882 }
884 error : null
883 error : null
885
884
886 Example error output:
885 Example error output:
887
886
888 .. code-block:: bash
887 .. code-block:: bash
889
888
890 id : <id_given_in_input>
889 id : <id_given_in_input>
891 result : null
890 result : null
892 error : {
891 error : {
893 "Unable to execute maintenance on `<reponame>`"
892 "Unable to execute maintenance on `<reponame>`"
894 }
893 }
895
894
896
895
897 pull
896 pull
898 ----
897 ----
899
898
900 .. py:function:: pull(apiuser, repoid, remote_uri=<Optional:None>)
899 .. py:function:: pull(apiuser, repoid, remote_uri=<Optional:None>)
901
900
902 Triggers a pull on the given repository from a remote location. You
901 Triggers a pull on the given repository from a remote location. You
903 can use this to keep remote repositories up-to-date.
902 can use this to keep remote repositories up-to-date.
904
903
905 This command can only be run using an |authtoken| with admin
904 This command can only be run using an |authtoken| with admin
906 rights to the specified repository. For more information,
905 rights to the specified repository. For more information,
907 see :ref:`config-token-ref`.
906 see :ref:`config-token-ref`.
908
907
909 This command takes the following options:
908 This command takes the following options:
910
909
911 :param apiuser: This is filled automatically from the |authtoken|.
910 :param apiuser: This is filled automatically from the |authtoken|.
912 :type apiuser: AuthUser
911 :type apiuser: AuthUser
913 :param repoid: The repository name or repository ID.
912 :param repoid: The repository name or repository ID.
914 :type repoid: str or int
913 :type repoid: str or int
915 :param remote_uri: Optional remote URI to pass in for pull
914 :param remote_uri: Optional remote URI to pass in for pull
916 :type remote_uri: str
915 :type remote_uri: str
917
916
918 Example output:
917 Example output:
919
918
920 .. code-block:: bash
919 .. code-block:: bash
921
920
922 id : <id_given_in_input>
921 id : <id_given_in_input>
923 result : {
922 result : {
924 "msg": "Pulled from url `<remote_url>` on repo `<repository name>`"
923 "msg": "Pulled from url `<remote_url>` on repo `<repository name>`"
925 "repository": "<repository name>"
924 "repository": "<repository name>"
926 }
925 }
927 error : null
926 error : null
928
927
929 Example error output:
928 Example error output:
930
929
931 .. code-block:: bash
930 .. code-block:: bash
932
931
933 id : <id_given_in_input>
932 id : <id_given_in_input>
934 result : null
933 result : null
935 error : {
934 error : {
936 "Unable to push changes from `<remote_url>`"
935 "Unable to push changes from `<remote_url>`"
937 }
936 }
938
937
939
938
940 remove_field_from_repo
939 remove_field_from_repo
941 ----------------------
940 ----------------------
942
941
943 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
942 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
944
943
945 Removes an extra field from a repository.
944 Removes an extra field from a repository.
946
945
947 This command can only be run using an |authtoken| with at least
946 This command can only be run using an |authtoken| with at least
948 write permissions to the |repo|.
947 write permissions to the |repo|.
949
948
950 :param apiuser: This is filled automatically from the |authtoken|.
949 :param apiuser: This is filled automatically from the |authtoken|.
951 :type apiuser: AuthUser
950 :type apiuser: AuthUser
952 :param repoid: Set the repository name or repository ID.
951 :param repoid: Set the repository name or repository ID.
953 :type repoid: str or int
952 :type repoid: str or int
954 :param key: Set the unique field key for this repository.
953 :param key: Set the unique field key for this repository.
955 :type key: str
954 :type key: str
956
955
957
956
958 revoke_user_group_permission
957 revoke_user_group_permission
959 ----------------------------
958 ----------------------------
960
959
961 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
960 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
962
961
963 Revoke the permissions of a user group on a given repository.
962 Revoke the permissions of a user group on a given repository.
964
963
965 This command can only be run using an |authtoken| with admin
964 This command can only be run using an |authtoken| with admin
966 permissions on the |repo|.
965 permissions on the |repo|.
967
966
968 :param apiuser: This is filled automatically from the |authtoken|.
967 :param apiuser: This is filled automatically from the |authtoken|.
969 :type apiuser: AuthUser
968 :type apiuser: AuthUser
970 :param repoid: Set the repository name or repository ID.
969 :param repoid: Set the repository name or repository ID.
971 :type repoid: str or int
970 :type repoid: str or int
972 :param usergroupid: Specify the user group ID.
971 :param usergroupid: Specify the user group ID.
973 :type usergroupid: str or int
972 :type usergroupid: str or int
974
973
975 Example output:
974 Example output:
976
975
977 .. code-block:: bash
976 .. code-block:: bash
978
977
979 id : <id_given_in_input>
978 id : <id_given_in_input>
980 result: {
979 result: {
981 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
980 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
982 "success": true
981 "success": true
983 }
982 }
984 error: null
983 error: null
985
984
986
985
987 revoke_user_permission
986 revoke_user_permission
988 ----------------------
987 ----------------------
989
988
990 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
989 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
991
990
992 Revoke permission for a user on the specified repository.
991 Revoke permission for a user on the specified repository.
993
992
994 This command can only be run using an |authtoken| with admin
993 This command can only be run using an |authtoken| with admin
995 permissions on the |repo|.
994 permissions on the |repo|.
996
995
997 :param apiuser: This is filled automatically from the |authtoken|.
996 :param apiuser: This is filled automatically from the |authtoken|.
998 :type apiuser: AuthUser
997 :type apiuser: AuthUser
999 :param repoid: Set the repository name or repository ID.
998 :param repoid: Set the repository name or repository ID.
1000 :type repoid: str or int
999 :type repoid: str or int
1001 :param userid: Set the user name of revoked user.
1000 :param userid: Set the user name of revoked user.
1002 :type userid: str or int
1001 :type userid: str or int
1003
1002
1004 Example error output:
1003 Example error output:
1005
1004
1006 .. code-block:: bash
1005 .. code-block:: bash
1007
1006
1008 id : <id_given_in_input>
1007 id : <id_given_in_input>
1009 result: {
1008 result: {
1010 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
1009 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
1011 "success": true
1010 "success": true
1012 }
1011 }
1013 error: null
1012 error: null
1014
1013
1015
1014
1016 set_repo_settings
1015 set_repo_settings
1017 -----------------
1016 -----------------
1018
1017
1019 .. py:function:: set_repo_settings(apiuser, repoid, settings)
1018 .. py:function:: set_repo_settings(apiuser, repoid, settings)
1020
1019
1021 Update repository settings. Returns true on success.
1020 Update repository settings. Returns true on success.
1022
1021
1023 :param apiuser: This is filled automatically from the |authtoken|.
1022 :param apiuser: This is filled automatically from the |authtoken|.
1024 :type apiuser: AuthUser
1023 :type apiuser: AuthUser
1025 :param repoid: The repository name or repository id.
1024 :param repoid: The repository name or repository id.
1026 :type repoid: str or int
1025 :type repoid: str or int
1027 :param settings: The new settings for the repository.
1026 :param settings: The new settings for the repository.
1028 :type: settings: dict
1027 :type: settings: dict
1029
1028
1030 Example output:
1029 Example output:
1031
1030
1032 .. code-block:: bash
1031 .. code-block:: bash
1033
1032
1034 {
1033 {
1035 "error": null,
1034 "error": null,
1036 "id": 237,
1035 "id": 237,
1037 "result": true
1036 "result": true
1038 }
1037 }
1039
1038
1040
1039
1041 strip
1040 strip
1042 -----
1041 -----
1043
1042
1044 .. py:function:: strip(apiuser, repoid, revision, branch)
1043 .. py:function:: strip(apiuser, repoid, revision, branch)
1045
1044
1046 Strips the given revision from the specified repository.
1045 Strips the given revision from the specified repository.
1047
1046
1048 * This will remove the revision and all of its decendants.
1047 * This will remove the revision and all of its decendants.
1049
1048
1050 This command can only be run using an |authtoken| with admin rights to
1049 This command can only be run using an |authtoken| with admin rights to
1051 the specified repository.
1050 the specified repository.
1052
1051
1053 This command takes the following options:
1052 This command takes the following options:
1054
1053
1055 :param apiuser: This is filled automatically from the |authtoken|.
1054 :param apiuser: This is filled automatically from the |authtoken|.
1056 :type apiuser: AuthUser
1055 :type apiuser: AuthUser
1057 :param repoid: The repository name or repository ID.
1056 :param repoid: The repository name or repository ID.
1058 :type repoid: str or int
1057 :type repoid: str or int
1059 :param revision: The revision you wish to strip.
1058 :param revision: The revision you wish to strip.
1060 :type revision: str
1059 :type revision: str
1061 :param branch: The branch from which to strip the revision.
1060 :param branch: The branch from which to strip the revision.
1062 :type branch: str
1061 :type branch: str
1063
1062
1064 Example output:
1063 Example output:
1065
1064
1066 .. code-block:: bash
1065 .. code-block:: bash
1067
1066
1068 id : <id_given_in_input>
1067 id : <id_given_in_input>
1069 result : {
1068 result : {
1070 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
1069 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
1071 "repository": "<repository name>"
1070 "repository": "<repository name>"
1072 }
1071 }
1073 error : null
1072 error : null
1074
1073
1075 Example error output:
1074 Example error output:
1076
1075
1077 .. code-block:: bash
1076 .. code-block:: bash
1078
1077
1079 id : <id_given_in_input>
1078 id : <id_given_in_input>
1080 result : null
1079 result : null
1081 error : {
1080 error : {
1082 "Unable to strip commit <commit_hash> from repo `<repository name>`"
1081 "Unable to strip commit <commit_hash> from repo `<repository name>`"
1083 }
1082 }
1084
1083
1085
1084
1086 update_repo
1085 update_repo
1087 -----------
1086 -----------
1088
1087
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:''>)
1088 .. 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:''>)
1090
1089
1091 Updates a repository with the given information.
1090 Updates a repository with the given information.
1092
1091
1093 This command can only be run using an |authtoken| with at least
1092 This command can only be run using an |authtoken| with at least
1094 admin permissions to the |repo|.
1093 admin permissions to the |repo|.
1095
1094
1096 * If the repository name contains "/", repository will be updated
1095 * If the repository name contains "/", repository will be updated
1097 accordingly with a repository group or nested repository groups
1096 accordingly with a repository group or nested repository groups
1098
1097
1099 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1098 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1100 called "repo-test" and place it inside group "foo/bar".
1099 called "repo-test" and place it inside group "foo/bar".
1101 You have to have permissions to access and write to the last repository
1100 You have to have permissions to access and write to the last repository
1102 group ("bar" in this example)
1101 group ("bar" in this example)
1103
1102
1104 :param apiuser: This is filled automatically from the |authtoken|.
1103 :param apiuser: This is filled automatically from the |authtoken|.
1105 :type apiuser: AuthUser
1104 :type apiuser: AuthUser
1106 :param repoid: repository name or repository ID.
1105 :param repoid: repository name or repository ID.
1107 :type repoid: str or int
1106 :type repoid: str or int
1108 :param repo_name: Update the |repo| name, including the
1107 :param repo_name: Update the |repo| name, including the
1109 repository group it's in.
1108 repository group it's in.
1110 :type repo_name: str
1109 :type repo_name: str
1111 :param owner: Set the |repo| owner.
1110 :param owner: Set the |repo| owner.
1112 :type owner: str
1111 :type owner: str
1113 :param fork_of: Set the |repo| as fork of another |repo|.
1112 :param fork_of: Set the |repo| as fork of another |repo|.
1114 :type fork_of: str
1113 :type fork_of: str
1115 :param description: Update the |repo| description.
1114 :param description: Update the |repo| description.
1116 :type description: str
1115 :type description: str
1117 :param private: Set the |repo| as private. (True | False)
1116 :param private: Set the |repo| as private. (True | False)
1118 :type private: bool
1117 :type private: bool
1119 :param clone_uri: Update the |repo| clone URI.
1118 :param clone_uri: Update the |repo| clone URI.
1120 :type clone_uri: str
1119 :type clone_uri: str
1121 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
1120 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
1122 :type landing_rev: str
1121 :type landing_rev: str
1123 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1122 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1124 :type enable_statistics: bool
1123 :type enable_statistics: bool
1125 :param enable_locking: Enable |repo| locking.
1124 :param enable_locking: Enable |repo| locking.
1126 :type enable_locking: bool
1125 :type enable_locking: bool
1127 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1126 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1128 :type enable_downloads: bool
1127 :type enable_downloads: bool
1129 :param fields: Add extra fields to the |repo|. Use the following
1128 :param fields: Add extra fields to the |repo|. Use the following
1130 example format: ``field_key=field_val,field_key2=fieldval2``.
1129 example format: ``field_key=field_val,field_key2=fieldval2``.
1131 Escape ', ' with \,
1130 Escape ', ' with \,
1132 :type fields: str
1131 :type fields: str
1133
1132
1134
1133
@@ -1,88 +1,88 b''
1 .. _auth-saml-bulk-enroll-users-ref:
1 .. _auth-saml-bulk-enroll-users-ref:
2
2
3
3
4 Bulk enroll multiple existing users
4 Bulk enroll multiple existing users
5 -----------------------------------
5 -----------------------------------
6
6
7
7
8 RhodeCode Supports standard SAML 2.0 SSO for the web-application part.
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.
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.
10 This method simply enables SAML authentication for many users at once.
11
11
12
12
13 From the server RhodeCode Enterprise is running run ishell on the instance which we
13 From the server RhodeCode Enterprise is running run ishell on the instance which we
14 want to apply the SAML migration::
14 want to apply the SAML migration::
15
15
16 rccontrol ishell enterprise-1
16 rccontrol ishell enterprise-1
17
17
18 Follow these steps to enable SAML authentication for multiple users.
18 Follow these steps to enable SAML authentication for multiple users.
19
19
20
20
21 1) Create a user_id => attribute mapping
21 1) Create a user_id => attribute mapping
22
22
23
23
24 `saml2user` is a mapping of external ID from SAML provider such as OneLogin, DuoSecurity, Google.
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
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.
26 account to internal rhodecode user.
27 For example, 123 is local rhodecode user_id, and '48253211' is OneLogin ID.
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
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.
29 The most important this id needs to be unique for each user.
30
30
31 .. code-block:: python
31 .. code-block:: python
32
32
33 In [1]: saml2user = {
33 In [1]: saml2user = {
34 ...: # OneLogin, uses externalID available to read from in the UI
34 ...: # OneLogin, uses externalID available to read from in the UI
35 ...: 123: {'id: '48253211'},
35 ...: 123: {'id': '48253211'},
36 ...: # for Google/DuoSecurity email is also an option for unique ID
36 ...: # for Google/DuoSecurity email is also an option for unique ID
37 ...: 124: {'id: 'email@domain.com'},
37 ...: 124: {'id': 'email@domain.com'},
38 ...: }
38 ...: }
39
39
40
40
41 2) Import the plugin you want to run migration for.
41 2) Import the plugin you want to run migration for.
42
42
43 From available options pick only one and run the `import` statement
43 From available options pick only one and run the `import` statement
44
44
45 .. code-block:: python
45 .. code-block:: python
46
46
47 # for Duo Security
47 # for Duo Security
48 In [2]: from rc_auth_plugins.auth_duo_security import RhodeCodeAuthPlugin
48 In [2]: from rc_auth_plugins.auth_duo_security import RhodeCodeAuthPlugin
49 # for OneLogin
49 # for OneLogin
50 In [2]: from rc_auth_plugins.auth_onelogin import RhodeCodeAuthPlugin
50 In [2]: from rc_auth_plugins.auth_onelogin import RhodeCodeAuthPlugin
51 # generic SAML plugin
51 # generic SAML plugin
52 In [2]: from rc_auth_plugins.auth_saml import RhodeCodeAuthPlugin
52 In [2]: from rc_auth_plugins.auth_saml import RhodeCodeAuthPlugin
53
53
54 3) Run the migration based on saml2user mapping.
54 3) Run the migration based on saml2user mapping.
55
55
56 Enter in the ishell prompt
56 Enter in the ishell prompt
57
57
58 .. code-block:: python
58 .. code-block:: python
59
59
60 In [3]: for user in User.get_all():
60 In [3]: for user in User.get_all():
61 ...: existing_identity = ExternalIdentity().query().filter(ExternalIdentity.local_user_id == user.user_id).scalar()
61 ...: existing_identity = ExternalIdentity().query().filter(ExternalIdentity.local_user_id == user.user_id).scalar()
62 ...: attrs = saml2user.get(user.user_id)
62 ...: attrs = saml2user.get(user.user_id)
63 ...: provider = RhodeCodeAuthPlugin.uid
63 ...: provider = RhodeCodeAuthPlugin.uid
64 ...: if existing_identity:
64 ...: if existing_identity:
65 ...: print('Identity for user `{}` already exists, skipping'.format(user.username))
65 ...: print('Identity for user `{}` already exists, skipping'.format(user.username))
66 ...: continue
66 ...: continue
67 ...: if attrs:
67 ...: if attrs:
68 ...: external_id = attrs['id']
68 ...: external_id = attrs['id']
69 ...: new_external_identity = ExternalIdentity()
69 ...: new_external_identity = ExternalIdentity()
70 ...: new_external_identity.external_id = external_id
70 ...: new_external_identity.external_id = external_id
71 ...: new_external_identity.external_username = '{}-saml-{}'.format(user.username, user.user_id)
71 ...: new_external_identity.external_username = '{}-saml-{}'.format(user.username, user.user_id)
72 ...: new_external_identity.provider_name = provider
72 ...: new_external_identity.provider_name = provider
73 ...: new_external_identity.local_user_id = user_id
73 ...: new_external_identity.local_user_id = user.user_id
74 ...: new_external_identity.access_token = ''
74 ...: new_external_identity.access_token = ''
75 ...: new_external_identity.token_secret = ''
75 ...: new_external_identity.token_secret = ''
76 ...: new_external_identity.alt_token = ''
76 ...: new_external_identity.alt_token = ''
77 ...: Session().add(ex_identity)
77 ...: Session().add(ex_identity)
78 ...: Session().commit()
78 ...: Session().commit()
79 ...: print('Set user `{}` external identity bound to ExternalID:{}'.format(user.username, external_id))
79 ...: print('Set user `{}` external identity bound to ExternalID:{}'.format(user.username, external_id))
80
80
81 .. note::
81 .. note::
82
82
83 saml2user can be really big and hard to maintain in ishell. It's also possible
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::
84 to load it as a JSON file prepared before and stored on disk. To do so run::
85
85
86 import json
86 import json
87 saml2user = json.loads(open('/path/to/saml2user.json','rb').read())
87 saml2user = json.loads(open('/path/to/saml2user.json','rb').read())
88
88
@@ -1,87 +1,87 b''
1 |RCE|
1 |RCE|
2 =====
2 =====
3
3
4 |RCE| is a high-performance source code management and collaboration system.
4 |RCE| is a high-performance source code management and collaboration system.
5 It enables you to develop projects securely behind the firewall while
5 It enables you to develop projects securely behind the firewall while
6 providing collaboration tools that work with |git|, |hg|,
6 providing collaboration tools that work with |git|, |hg|,
7 and |svn| |repos|. The user interface allows you to create, edit,
7 and |svn| |repos|. The user interface allows you to create, edit,
8 and commit files and |repos| while managing their security permissions.
8 and commit files and |repos| while managing their security permissions.
9
9
10 |RCE| provides the following features:
10 |RCE| provides the following features:
11
11
12 * Source code management.
12 * Source code management.
13 * Extended permissions management.
13 * Extended permissions management.
14 * Integrated code collaboration tools.
14 * Integrated code collaboration tools.
15 * Integrated code review and notifications.
15 * Integrated code review and notifications.
16 * Scalability provided by multi-node setup.
16 * Scalability provided by multi-node setup.
17 * Fully programmable automation API.
17 * Fully programmable automation API.
18 * Web-based hook management.
18 * Web-based hook management.
19 * Native |svn| support.
19 * Native |svn| support.
20 * Migration from existing databases.
20 * Migration from existing databases.
21 * |RCE| SDK.
21 * |RCE| SDK.
22 * Built-in analytics
22 * Built-in analytics
23 * Built in integrations including: Slack, Webhooks (used for Jenkins/TeamCity and other CIs), Jira, Redmine, Hipchat
23 * Built in integrations including: Slack, Webhooks (used for Jenkins/TeamCity and other CIs), Jira, Redmine, Hipchat
24 * Pluggable authentication system.
24 * Pluggable authentication system.
25 * Support for AD, |LDAP|, Crowd, CAS, PAM.
25 * Support for AD, |LDAP|, Crowd, CAS, PAM.
26 * Support for external authentication via Oauth Google, Github, Bitbucket, Twitter.
26 * Support for external authentication via Oauth Google, Github, Bitbucket, Twitter.
27 * Debug modes of operation.
27 * Debug modes of operation.
28 * Private and public gists.
28 * Private and public gists.
29 * Gists with limited lifetimes and within instance only sharing.
29 * Gists with limited lifetimes and within instance only sharing.
30 * Fully integrated code search function.
30 * Fully integrated code search function.
31 * Always on SSL connectivity.
31 * Always on SSL connectivity.
32
32
33 .. only:: html
33 .. only:: html
34
34
35 Table of Contents
35 Table of Contents
36 -----------------
36 -----------------
37
37
38 .. toctree::
38 .. toctree::
39 :maxdepth: 1
39 :maxdepth: 1
40 :caption: Admin Documentation
40 :caption: Admin Documentation
41
41
42 install/quick-start
42 install/quick-start
43 install/install-database
43 install/install-database
44 install/install-steps
44 install/install-steps
45 admin/system-overview
45 admin/system-overview
46 nix/default-env
46 nix/default-env
47 admin/system-admin
47 admin/system-admin
48 admin/user-admin
48 admin/user-admin
49 admin/setting-repo-perms
49 admin/repo-admin
50 admin/security-tips
50 admin/security-tips
51 auth/auth
51 auth/auth
52 issue-trackers/issue-trackers
52 issue-trackers/issue-trackers
53 admin/lab-settings
53 admin/lab-settings
54
54
55 .. toctree::
55 .. toctree::
56 :maxdepth: 1
56 :maxdepth: 1
57 :caption: Feature Documentation
57 :caption: Feature Documentation
58
58
59 collaboration/collaboration
59 collaboration/collaboration
60 collaboration/review-notifications
60 collaboration/review-notifications
61 collaboration/pull-requests
61 collaboration/pull-requests
62 code-review/code-review
62 code-review/code-review
63 integrations/integrations
63 integrations/integrations
64
64
65 .. toctree::
65 .. toctree::
66 :maxdepth: 1
66 :maxdepth: 1
67 :caption: User Documentation
68
69 usage/basic-usage
70 tutorials/tutorials
71
72 .. toctree::
73 :maxdepth: 1
67 :caption: Developer Documentation
74 :caption: Developer Documentation
68
75
69 api/api
76 api/api
70 tools/rhodecode-tools
77 tools/rhodecode-tools
71 extensions/extensions-hooks
78 extensions/extensions-hooks
72 contributing/contributing
79 contributing/contributing
73
80
74 .. toctree::
81 .. toctree::
75 :maxdepth: 1
82 :maxdepth: 1
76 :caption: User Documentation
77
78 usage/basic-usage
79 tutorials/tutorials
80
81 .. toctree::
82 :maxdepth: 1
83 :caption: About
83 :caption: About
84
84
85 known-issues/known-issues
85 known-issues/known-issues
86 release-notes/release-notes
86 release-notes/release-notes
87 admin/glossary
87 admin/glossary
@@ -1,131 +1,132 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.17.0.rst
12 release-notes-4.16.2.rst
13 release-notes-4.16.2.rst
13 release-notes-4.16.1.rst
14 release-notes-4.16.1.rst
14 release-notes-4.16.0.rst
15 release-notes-4.16.0.rst
15 release-notes-4.15.2.rst
16 release-notes-4.15.2.rst
16 release-notes-4.15.1.rst
17 release-notes-4.15.1.rst
17 release-notes-4.15.0.rst
18 release-notes-4.15.0.rst
18 release-notes-4.14.1.rst
19 release-notes-4.14.1.rst
19 release-notes-4.14.0.rst
20 release-notes-4.14.0.rst
20 release-notes-4.13.3.rst
21 release-notes-4.13.3.rst
21 release-notes-4.13.2.rst
22 release-notes-4.13.2.rst
22 release-notes-4.13.1.rst
23 release-notes-4.13.1.rst
23 release-notes-4.13.0.rst
24 release-notes-4.13.0.rst
24 release-notes-4.12.4.rst
25 release-notes-4.12.4.rst
25 release-notes-4.12.3.rst
26 release-notes-4.12.3.rst
26 release-notes-4.12.2.rst
27 release-notes-4.12.2.rst
27 release-notes-4.12.1.rst
28 release-notes-4.12.1.rst
28 release-notes-4.12.0.rst
29 release-notes-4.12.0.rst
29 release-notes-4.11.6.rst
30 release-notes-4.11.6.rst
30 release-notes-4.11.5.rst
31 release-notes-4.11.5.rst
31 release-notes-4.11.4.rst
32 release-notes-4.11.4.rst
32 release-notes-4.11.3.rst
33 release-notes-4.11.3.rst
33 release-notes-4.11.2.rst
34 release-notes-4.11.2.rst
34 release-notes-4.11.1.rst
35 release-notes-4.11.1.rst
35 release-notes-4.11.0.rst
36 release-notes-4.11.0.rst
36 release-notes-4.10.6.rst
37 release-notes-4.10.6.rst
37 release-notes-4.10.5.rst
38 release-notes-4.10.5.rst
38 release-notes-4.10.4.rst
39 release-notes-4.10.4.rst
39 release-notes-4.10.3.rst
40 release-notes-4.10.3.rst
40 release-notes-4.10.2.rst
41 release-notes-4.10.2.rst
41 release-notes-4.10.1.rst
42 release-notes-4.10.1.rst
42 release-notes-4.10.0.rst
43 release-notes-4.10.0.rst
43 release-notes-4.9.1.rst
44 release-notes-4.9.1.rst
44 release-notes-4.9.0.rst
45 release-notes-4.9.0.rst
45 release-notes-4.8.0.rst
46 release-notes-4.8.0.rst
46 release-notes-4.7.2.rst
47 release-notes-4.7.2.rst
47 release-notes-4.7.1.rst
48 release-notes-4.7.1.rst
48 release-notes-4.7.0.rst
49 release-notes-4.7.0.rst
49 release-notes-4.6.1.rst
50 release-notes-4.6.1.rst
50 release-notes-4.6.0.rst
51 release-notes-4.6.0.rst
51 release-notes-4.5.2.rst
52 release-notes-4.5.2.rst
52 release-notes-4.5.1.rst
53 release-notes-4.5.1.rst
53 release-notes-4.5.0.rst
54 release-notes-4.5.0.rst
54 release-notes-4.4.2.rst
55 release-notes-4.4.2.rst
55 release-notes-4.4.1.rst
56 release-notes-4.4.1.rst
56 release-notes-4.4.0.rst
57 release-notes-4.4.0.rst
57 release-notes-4.3.1.rst
58 release-notes-4.3.1.rst
58 release-notes-4.3.0.rst
59 release-notes-4.3.0.rst
59 release-notes-4.2.1.rst
60 release-notes-4.2.1.rst
60 release-notes-4.2.0.rst
61 release-notes-4.2.0.rst
61 release-notes-4.1.2.rst
62 release-notes-4.1.2.rst
62 release-notes-4.1.1.rst
63 release-notes-4.1.1.rst
63 release-notes-4.1.0.rst
64 release-notes-4.1.0.rst
64 release-notes-4.0.1.rst
65 release-notes-4.0.1.rst
65 release-notes-4.0.0.rst
66 release-notes-4.0.0.rst
66
67
67 |RCE| 3.x Versions
68 |RCE| 3.x Versions
68 ------------------
69 ------------------
69
70
70 .. toctree::
71 .. toctree::
71 :maxdepth: 1
72 :maxdepth: 1
72
73
73 release-notes-3.8.4.rst
74 release-notes-3.8.4.rst
74 release-notes-3.8.3.rst
75 release-notes-3.8.3.rst
75 release-notes-3.8.2.rst
76 release-notes-3.8.2.rst
76 release-notes-3.8.1.rst
77 release-notes-3.8.1.rst
77 release-notes-3.8.0.rst
78 release-notes-3.8.0.rst
78 release-notes-3.7.1.rst
79 release-notes-3.7.1.rst
79 release-notes-3.7.0.rst
80 release-notes-3.7.0.rst
80 release-notes-3.6.1.rst
81 release-notes-3.6.1.rst
81 release-notes-3.6.0.rst
82 release-notes-3.6.0.rst
82 release-notes-3.5.2.rst
83 release-notes-3.5.2.rst
83 release-notes-3.5.1.rst
84 release-notes-3.5.1.rst
84 release-notes-3.5.0.rst
85 release-notes-3.5.0.rst
85 release-notes-3.4.1.rst
86 release-notes-3.4.1.rst
86 release-notes-3.4.0.rst
87 release-notes-3.4.0.rst
87 release-notes-3.3.4.rst
88 release-notes-3.3.4.rst
88 release-notes-3.3.3.rst
89 release-notes-3.3.3.rst
89 release-notes-3.3.2.rst
90 release-notes-3.3.2.rst
90 release-notes-3.3.1.rst
91 release-notes-3.3.1.rst
91 release-notes-3.3.0.rst
92 release-notes-3.3.0.rst
92 release-notes-3.2.3.rst
93 release-notes-3.2.3.rst
93 release-notes-3.2.2.rst
94 release-notes-3.2.2.rst
94 release-notes-3.2.1.rst
95 release-notes-3.2.1.rst
95 release-notes-3.2.0.rst
96 release-notes-3.2.0.rst
96 release-notes-3.1.1.rst
97 release-notes-3.1.1.rst
97 release-notes-3.1.0.rst
98 release-notes-3.1.0.rst
98 release-notes-3.0.2.rst
99 release-notes-3.0.2.rst
99 release-notes-3.0.1.rst
100 release-notes-3.0.1.rst
100 release-notes-3.0.0.rst
101 release-notes-3.0.0.rst
101
102
102 |RCE| 2.x Versions
103 |RCE| 2.x Versions
103 ------------------
104 ------------------
104
105
105 .. toctree::
106 .. toctree::
106 :maxdepth: 1
107 :maxdepth: 1
107
108
108 release-notes-2.2.8.rst
109 release-notes-2.2.8.rst
109 release-notes-2.2.7.rst
110 release-notes-2.2.7.rst
110 release-notes-2.2.6.rst
111 release-notes-2.2.6.rst
111 release-notes-2.2.5.rst
112 release-notes-2.2.5.rst
112 release-notes-2.2.4.rst
113 release-notes-2.2.4.rst
113 release-notes-2.2.3.rst
114 release-notes-2.2.3.rst
114 release-notes-2.2.2.rst
115 release-notes-2.2.2.rst
115 release-notes-2.2.1.rst
116 release-notes-2.2.1.rst
116 release-notes-2.2.0.rst
117 release-notes-2.2.0.rst
117 release-notes-2.1.0.rst
118 release-notes-2.1.0.rst
118 release-notes-2.0.2.rst
119 release-notes-2.0.2.rst
119 release-notes-2.0.1.rst
120 release-notes-2.0.1.rst
120 release-notes-2.0.0.rst
121 release-notes-2.0.0.rst
121
122
122 |RCE| 1.x Versions
123 |RCE| 1.x Versions
123 ------------------
124 ------------------
124
125
125 .. toctree::
126 .. toctree::
126 :maxdepth: 1
127 :maxdepth: 1
127
128
128 release-notes-1.7.2.rst
129 release-notes-1.7.2.rst
129 release-notes-1.7.1.rst
130 release-notes-1.7.1.rst
130 release-notes-1.7.0.rst
131 release-notes-1.7.0.rst
131 release-notes-1.6.0.rst
132 release-notes-1.6.0.rst
@@ -1,174 +1,177 b''
1 {
1 {
2 "dirs": {
2 "dirs": {
3 "css": {
3 "css": {
4 "src": "rhodecode/public/css",
4 "src": "rhodecode/public/css",
5 "dest": "rhodecode/public/css"
5 "dest": "rhodecode/public/css"
6 },
6 },
7 "js": {
7 "js": {
8 "src": "rhodecode/public/js/src",
8 "src": "rhodecode/public/js/src",
9 "src_rc": "rhodecode/public/js/rhodecode",
9 "src_rc": "rhodecode/public/js/rhodecode",
10 "dest": "rhodecode/public/js",
10 "dest": "rhodecode/public/js",
11 "node_modules": "node_modules"
11 "node_modules": "node_modules"
12 }
12 }
13 },
13 },
14 "copy": {
14 "copy": {
15 "main": {
15 "main": {
16 "files": [
16 "files": [
17 {
17 {
18 "expand": true,
18 "expand": true,
19 "cwd": "node_modules/@webcomponents",
19 "cwd": "node_modules/@webcomponents",
20 "src": "webcomponentsjs/*.*",
20 "src": "webcomponentsjs/*.*",
21 "dest": "<%= dirs.js.dest %>/vendors"
21 "dest": "<%= dirs.js.dest %>/vendors"
22 },
22 },
23 {
23 {
24 "src": "<%= dirs.css.src %>/style-polymer.css",
24 "src": "<%= dirs.css.src %>/style-polymer.css",
25 "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css"
25 "dest": "<%= dirs.js.dest %>/src/components/style-polymer.css"
26 }
26 }
27 ]
27 ]
28 }
28 }
29 },
29 },
30 "concat": {
30 "concat": {
31 "dist": {
31 "dist": {
32 "src": [
32 "src": [
33 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
33 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
34 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
34 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
35 "<%= dirs.js.node_modules %>/moment/min/moment.min.js",
35 "<%= dirs.js.node_modules %>/moment/min/moment.min.js",
36 "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js",
36 "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js",
37 "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js",
37 "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js",
38 "<%= dirs.js.node_modules %>/dropzone/dist/dropzone.js",
38 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js",
39 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js",
39 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
40 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
40 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
41 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
41 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
42 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
42 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
43 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
43 "<%= dirs.js.src %>/logging.js",
44 "<%= dirs.js.src %>/logging.js",
44 "<%= dirs.js.src %>/bootstrap.js",
45 "<%= dirs.js.src %>/bootstrap.js",
45 "<%= dirs.js.src %>/i18n_utils.js",
46 "<%= dirs.js.src %>/i18n_utils.js",
46 "<%= dirs.js.src %>/deform.js",
47 "<%= dirs.js.src %>/deform.js",
47 "<%= dirs.js.src %>/ejs.js",
48 "<%= dirs.js.src %>/ejs.js",
48 "<%= dirs.js.src %>/ejs_templates/utils.js",
49 "<%= dirs.js.src %>/ejs_templates/utils.js",
49 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
50 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
50 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
51 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
51 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
52 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
52 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
53 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
53 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
54 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
54 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
55 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
55 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
56 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
56 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
57 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
57 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
58 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
58 "<%= dirs.js.src %>/select2/select2.js",
59 "<%= dirs.js.src %>/select2/select2.js",
59 "<%= dirs.js.src %>/codemirror/codemirror.js",
60 "<%= dirs.js.src %>/codemirror/codemirror.js",
60 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
61 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
61 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
62 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
62 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
63 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
63 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
64 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
64 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
65 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
65 "<%= dirs.js.dest %>/mode/meta.js",
66 "<%= dirs.js.dest %>/mode/meta.js",
66 "<%= dirs.js.dest %>/mode/meta_ext.js",
67 "<%= dirs.js.dest %>/mode/meta_ext.js",
67 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
68 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
68 "<%= dirs.js.src %>/rhodecode/utils/array.js",
69 "<%= dirs.js.src %>/rhodecode/utils/array.js",
69 "<%= dirs.js.src %>/rhodecode/utils/string.js",
70 "<%= dirs.js.src %>/rhodecode/utils/string.js",
70 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
71 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
71 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
72 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
72 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
73 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
73 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
74 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
74 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
75 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
75 "<%= dirs.js.src %>/rhodecode/utils/os.js",
76 "<%= dirs.js.src %>/rhodecode/utils/os.js",
76 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
77 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
77 "<%= dirs.js.src %>/rhodecode/init.js",
78 "<%= dirs.js.src %>/rhodecode/init.js",
78 "<%= dirs.js.src %>/rhodecode/changelog.js",
79 "<%= dirs.js.src %>/rhodecode/changelog.js",
79 "<%= dirs.js.src %>/rhodecode/codemirror.js",
80 "<%= dirs.js.src %>/rhodecode/codemirror.js",
80 "<%= dirs.js.src %>/rhodecode/comments.js",
81 "<%= dirs.js.src %>/rhodecode/comments.js",
81 "<%= dirs.js.src %>/rhodecode/constants.js",
82 "<%= dirs.js.src %>/rhodecode/constants.js",
82 "<%= dirs.js.src %>/rhodecode/files.js",
83 "<%= dirs.js.src %>/rhodecode/files.js",
83 "<%= dirs.js.src %>/rhodecode/followers.js",
84 "<%= dirs.js.src %>/rhodecode/followers.js",
84 "<%= dirs.js.src %>/rhodecode/menus.js",
85 "<%= dirs.js.src %>/rhodecode/menus.js",
85 "<%= dirs.js.src %>/rhodecode/notifications.js",
86 "<%= dirs.js.src %>/rhodecode/notifications.js",
86 "<%= dirs.js.src %>/rhodecode/permissions.js",
87 "<%= dirs.js.src %>/rhodecode/permissions.js",
87 "<%= dirs.js.src %>/rhodecode/pjax.js",
88 "<%= dirs.js.src %>/rhodecode/pjax.js",
88 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
89 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
89 "<%= dirs.js.src %>/rhodecode/settings.js",
90 "<%= dirs.js.src %>/rhodecode/settings.js",
90 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
91 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
91 "<%= dirs.js.src %>/rhodecode/tooltips.js",
92 "<%= dirs.js.src %>/rhodecode/tooltips.js",
92 "<%= dirs.js.src %>/rhodecode/users.js",
93 "<%= dirs.js.src %>/rhodecode/users.js",
93 "<%= dirs.js.src %>/rhodecode/appenlight.js",
94 "<%= dirs.js.src %>/rhodecode/appenlight.js",
94 "<%= dirs.js.src %>/rhodecode.js",
95 "<%= dirs.js.src %>/rhodecode.js",
95 "<%= dirs.js.dest %>/rhodecode-components.js"
96 "<%= dirs.js.dest %>/rhodecode-components.js"
96 ],
97 ],
97 "dest": "<%= dirs.js.dest %>/scripts.js",
98 "dest": "<%= dirs.js.dest %>/scripts.js",
98 "nonull": true
99 "nonull": true
99 }
100 }
100 },
101 },
101 "less": {
102 "less": {
102 "development": {
103 "development": {
103 "options": {
104 "options": {
104 "compress": false,
105 "compress": false,
105 "yuicompress": false,
106 "yuicompress": false,
106 "optimization": 0
107 "optimization": 0
107 },
108 },
108 "files": {
109 "files": {
109 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
110 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
110 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
111 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
112 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
111 }
113 }
112 },
114 },
113 "production": {
115 "production": {
114 "options": {
116 "options": {
115 "compress": true,
117 "compress": true,
116 "yuicompress": true,
118 "yuicompress": true,
117 "optimization": 2
119 "optimization": 2
118 },
120 },
119 "files": {
121 "files": {
120 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
122 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
121 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
123 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
124 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
122 }
125 }
123 },
126 },
124 "components": {
127 "components": {
125 "files": [
128 "files": [
126 {
129 {
127 "cwd": "<%= dirs.js.src %>/components/",
130 "cwd": "<%= dirs.js.src %>/components/",
128 "dest": "<%= dirs.js.src %>/components/",
131 "dest": "<%= dirs.js.src %>/components/",
129 "src": [
132 "src": [
130 "**/*.less"
133 "**/*.less"
131 ],
134 ],
132 "expand": true,
135 "expand": true,
133 "ext": ".css"
136 "ext": ".css"
134 }
137 }
135 ]
138 ]
136 }
139 }
137 },
140 },
138 "watch": {
141 "watch": {
139 "less": {
142 "less": {
140 "files": [
143 "files": [
141 "<%= dirs.css.src %>/**/*.less",
144 "<%= dirs.css.src %>/**/*.less",
142 "<%= dirs.js.src %>/components/**/*.less"
145 "<%= dirs.js.src %>/components/**/*.less"
143 ],
146 ],
144 "tasks": [
147 "tasks": [
145 "less:development",
148 "less:development",
146 "less:components",
149 "less:components",
147 "concat:polymercss",
150 "concat:polymercss",
148 "webpack",
151 "webpack",
149 "concat:dist"
152 "concat:dist"
150 ]
153 ]
151 },
154 },
152 "js": {
155 "js": {
153 "files": [
156 "files": [
154 "!<%= dirs.js.src %>/components/root-styles.gen.html",
157 "!<%= dirs.js.src %>/components/root-styles.gen.html",
155 "<%= dirs.js.src %>/**/*.js",
158 "<%= dirs.js.src %>/**/*.js",
156 "<%= dirs.js.src %>/components/**/*.html"
159 "<%= dirs.js.src %>/components/**/*.html"
157 ],
160 ],
158 "tasks": [
161 "tasks": [
159 "less:components",
162 "less:components",
160 "concat:polymercss",
163 "concat:polymercss",
161 "webpack",
164 "webpack",
162 "concat:dist"
165 "concat:dist"
163 ]
166 ]
164 }
167 }
165 },
168 },
166 "jshint": {
169 "jshint": {
167 "rhodecode": {
170 "rhodecode": {
168 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
171 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
169 "options": {
172 "options": {
170 "jshintrc": ".jshintrc"
173 "jshintrc": ".jshintrc"
171 }
174 }
172 }
175 }
173 }
176 }
174 }
177 }
@@ -1,59 +1,60 b''
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "2.0.0",
3 "version": "2.0.0",
4 "private": true,
4 "private": true,
5 "description" : "RhodeCode JS packaged",
5 "description" : "RhodeCode JS packaged",
6 "license": "SEE LICENSE IN LICENSE.txt",
6 "license": "SEE LICENSE IN LICENSE.txt",
7 "repository" : {
7 "repository" : {
8 "type" : "hg",
8 "type" : "hg",
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
10 },
10 },
11 "devDependencies": {
11 "devDependencies": {
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
12 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1",
13 "clipboard": "^2.0.1",
13 "clipboard": "^2.0.1",
14 "exports-loader": "^0.6.4",
14 "exports-loader": "^0.6.4",
15 "favico.js": "^0.3.10",
15 "favico.js": "^0.3.10",
16 "dropzone": "^5.5.0",
16 "grunt": "^0.4.5",
17 "grunt": "^0.4.5",
17 "grunt-cli": "^1.3.1",
18 "grunt-cli": "^1.3.1",
18 "grunt-contrib-concat": "^0.5.1",
19 "grunt-contrib-concat": "^0.5.1",
19 "grunt-contrib-copy": "^1.0.0",
20 "grunt-contrib-copy": "^1.0.0",
20 "grunt-contrib-jshint": "^0.12.0",
21 "grunt-contrib-jshint": "^0.12.0",
21 "grunt-contrib-less": "^1.1.0",
22 "grunt-contrib-less": "^1.1.0",
22 "grunt-contrib-watch": "^0.6.1",
23 "grunt-contrib-watch": "^0.6.1",
23 "grunt-webpack": "^3.1.3",
24 "grunt-webpack": "^3.1.3",
24 "jquery": "1.11.3",
25 "jquery": "1.11.3",
25 "mark.js": "8.11.1",
26 "mark.js": "8.11.1",
26 "jshint": "^2.9.1-rc3",
27 "jshint": "^2.9.1-rc3",
27 "moment": "^2.18.1",
28 "moment": "^2.18.1",
28 "mousetrap": "^1.6.1",
29 "mousetrap": "^1.6.1",
29 "qrious": "^4.0.2",
30 "qrious": "^4.0.2",
30 "sticky-sidebar": "3.3.1",
31 "sticky-sidebar": "3.3.1",
31 "waypoints": "4.0.1",
32 "waypoints": "4.0.1",
32 "webpack": "4.23.1",
33 "webpack": "4.23.1",
33 "webpack-cli": "3.1.2",
34 "webpack-cli": "3.1.2",
34 "babel-core": "^6.26.3",
35 "babel-core": "^6.26.3",
35 "babel-loader": "^7.1.2",
36 "babel-loader": "^7.1.2",
36 "babel-plugin-transform-object-rest-spread": "^6.26.0",
37 "babel-plugin-transform-object-rest-spread": "^6.26.0",
37 "babel-preset-env": "^1.6.0",
38 "babel-preset-env": "^1.6.0",
38 "copy-webpack-plugin": "^4.4.2",
39 "copy-webpack-plugin": "^4.4.2",
39 "css-loader": "^0.28.11",
40 "css-loader": "^0.28.11",
40 "html-loader": "^0.4.4",
41 "html-loader": "^0.4.4",
41 "html-webpack-plugin": "^3.2.0",
42 "html-webpack-plugin": "^3.2.0",
42 "imports-loader": "^0.7.1",
43 "imports-loader": "^0.7.1",
43 "polymer-webpack-loader": "^2.0.1",
44 "polymer-webpack-loader": "^2.0.1",
44 "style-loader": "^0.21.0",
45 "style-loader": "^0.21.0",
45 "webpack-uglify-js-plugin": "^1.1.9",
46 "webpack-uglify-js-plugin": "^1.1.9",
46 "raw-loader": "1.0.0-beta.0",
47 "raw-loader": "1.0.0-beta.0",
47 "ts-loader": "^1.3.3",
48 "ts-loader": "^1.3.3",
48 "@webcomponents/webcomponentsjs": "^2.0.0",
49 "@webcomponents/webcomponentsjs": "^2.0.0",
49 "@polymer/polymer": "^3.0.0",
50 "@polymer/polymer": "^3.0.0",
50 "@polymer/paper-button": "^3.0.0",
51 "@polymer/paper-button": "^3.0.0",
51 "@polymer/paper-spinner": "^3.0.0",
52 "@polymer/paper-spinner": "^3.0.0",
52 "@polymer/paper-tooltip": "^3.0.0",
53 "@polymer/paper-tooltip": "^3.0.0",
53 "@polymer/paper-toast": "^3.0.0",
54 "@polymer/paper-toast": "^3.0.0",
54 "@polymer/paper-toggle-button": "^3.0.0",
55 "@polymer/paper-toggle-button": "^3.0.0",
55 "@polymer/iron-ajax": "^3.0.0",
56 "@polymer/iron-ajax": "^3.0.0",
56 "@polymer/iron-autogrow-textarea": "^3.0.0",
57 "@polymer/iron-autogrow-textarea": "^3.0.0",
57 "@polymer/iron-a11y-keys": "^3.0.0"
58 "@polymer/iron-a11y-keys": "^3.0.0"
58 }
59 }
59 }
60 }
@@ -1,3 +1,3 b''
1 [pip2nix]
1 [pip2nix]
2 requirements = ., -r ./requirements.txt
2 requirements = ., -r ./requirements.txt, -r ./requirements_pinned.txt
3 output = ./pkgs/python-packages.nix
3 output = ./pkgs/python-packages.nix
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: file renamed from rhodecode/public/images/rhodecode-logo-white-216x60.png to rhodecode/public/images/rhodecode-logo-white-60x60.png, binary diff hidden
NO CONTENT: file renamed from rhodecode/public/images/rhodecode-logo-white-216x60.png to rhodecode/public/images/rhodecode-logo-white-60x60.png, binary diff hidden
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: 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/templates/changelog/changelog.mako to rhodecode/templates/commits/changelog.mako
NO CONTENT: file renamed from rhodecode/templates/changelog/changelog.mako to rhodecode/templates/commits/changelog.mako
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/templates/changelog/changelog_elements.mako to rhodecode/templates/commits/changelog_elements.mako
NO CONTENT: file renamed from rhodecode/templates/changelog/changelog_elements.mako to rhodecode/templates/commits/changelog_elements.mako
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/templates/changelog/changelog_file_history.mako to rhodecode/templates/commits/changelog_file_history.mako
NO CONTENT: file renamed from rhodecode/templates/changelog/changelog_file_history.mako to rhodecode/templates/commits/changelog_file_history.mako
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: 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/templates/files/files_detail.mako to rhodecode/templates/files/files_source_header.mako
NO CONTENT: file renamed from rhodecode/templates/files/files_detail.mako to rhodecode/templates/files/files_source_header.mako
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/templates/files/file_tree_detail.mako to rhodecode/templates/files/files_tree_header.mako
NO CONTENT: file renamed from rhodecode/templates/files/file_tree_detail.mako to rhodecode/templates/files/files_tree_header.mako
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: 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, binary diff hidden
NO CONTENT: file was removed, binary diff hidden
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