##// END OF EJS Templates
merged default branch into stable
super-admin -
r5342:5c131067 merge stable
parent child Browse files
Show More

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

@@ -0,0 +1,95 b''
1 ; #####################
2 ; LOGGING CONFIGURATION
3 ; #####################
4
5 [loggers]
6 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
7
8 [handlers]
9 keys = console, console_sql
10
11 [formatters]
12 keys = generic, json, color_formatter, color_formatter_sql
13
14 ; #######
15 ; LOGGERS
16 ; #######
17 [logger_root]
18 level = NOTSET
19 handlers = console
20
21 [logger_sqlalchemy]
22 level = $RC_LOGGING_LEVEL
23 handlers = console_sql
24 qualname = sqlalchemy.engine
25 propagate = 0
26
27 [logger_beaker]
28 level = $RC_LOGGING_LEVEL
29 handlers =
30 qualname = beaker.container
31 propagate = 1
32
33 [logger_rhodecode]
34 level = $RC_LOGGING_LEVEL
35 handlers =
36 qualname = rhodecode
37 propagate = 1
38
39 [logger_ssh_wrapper]
40 level = $RC_LOGGING_LEVEL
41 handlers =
42 qualname = ssh_wrapper
43 propagate = 1
44
45 [logger_celery]
46 level = $RC_LOGGING_LEVEL
47 handlers =
48 qualname = celery
49
50
51 ; ########
52 ; HANDLERS
53 ; ########
54
55 [handler_console]
56 class = StreamHandler
57 args = (sys.stderr, )
58 level = $RC_LOGGING_LEVEL
59 ; To enable JSON formatted logs replace 'generic' with 'json'
60 ; This allows sending properly formatted logs to grafana loki or elasticsearch
61 formatter = $RC_LOGGING_FORMATTER
62
63 [handler_console_sql]
64 ; "level = DEBUG" logs SQL queries and results.
65 ; "level = INFO" logs SQL queries.
66 ; "level = WARN" logs neither. (Recommended for production systems.)
67 class = StreamHandler
68 args = (sys.stderr, )
69 level = WARN
70 ; To enable JSON formatted logs replace 'generic/color_formatter_sql' with 'json'
71 ; This allows sending properly formatted logs to grafana loki or elasticsearch
72 formatter = $RC_LOGGING_FORMATTER
73
74 ; ##########
75 ; FORMATTERS
76 ; ##########
77
78 [formatter_generic]
79 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
80 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
81 datefmt = %Y-%m-%d %H:%M:%S
82
83 [formatter_color_formatter]
84 class = rhodecode.lib.logging_formatter.ColorFormatter
85 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
86 datefmt = %Y-%m-%d %H:%M:%S
87
88 [formatter_color_formatter_sql]
89 class = rhodecode.lib.logging_formatter.ColorFormatterSql
90 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
91 datefmt = %Y-%m-%d %H:%M:%S
92
93 [formatter_json]
94 format = %(timestamp)s %(levelname)s %(name)s %(message)s %(req_id)s
95 class = rhodecode.lib._vendor.jsonlogger.JsonFormatter
@@ -0,0 +1,57 b''
1 # Copyright (C) 2010-2023 RhodeCode GmbH
2 #
3 # This program is free software: you can redistribute it and/or modify
4 # it under the terms of the GNU Affero General Public License, version 3
5 # (only), as published by the Free Software Foundation.
6 #
7 # This program is distributed in the hope that it will be useful,
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 # GNU General Public License for more details.
11 #
12 # You should have received a copy of the GNU Affero General Public License
13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 #
15 # This program is dual-licensed. If you wish to learn more about the
16 # RhodeCode Enterprise Edition, including its added features, Support services,
17 # and proprietary license terms, please see https://rhodecode.com/licenses/
18
19 import pytest # noqa
20
21 # keep the imports to have a toplevel conftest.py but still importable from EE edition
22 from rhodecode.tests.conftest_common import ( # noqa
23 pytest_generate_tests,
24 pytest_runtest_makereport,
25 pytest_addoption
26 )
27
28
29 pytest_plugins = [
30 "rhodecode.tests.fixture_mods.fixture_pyramid",
31 "rhodecode.tests.fixture_mods.fixture_utils",
32 ]
33
34
35 def pytest_configure(config):
36 from rhodecode.config import patches # noqa
37
38
39 def pytest_collection_modifyitems(session, config, items):
40 # nottest marked, compare nose, used for transition from nose to pytest
41 remaining = [
42 i for i in items if getattr(i.obj, '__test__', True)]
43 items[:] = remaining
44
45 # NOTE(marcink): custom test ordering, db tests and vcstests are slowest and should
46 # be executed at the end for faster test feedback
47 def sorter(item):
48 pos = 0
49 key = item._nodeid
50 if key.startswith('rhodecode/tests/database'):
51 pos = 1
52 elif key.startswith('rhodecode/tests/vcs_operations'):
53 pos = 2
54
55 return pos
56
57 items.sort(key=sorter)
@@ -0,0 +1,24 b''
1 FROM python:3.12.0-bullseye
2
3 WORKDIR /project
4
5 RUN apt-get update \
6 && apt-get install --no-install-recommends --yes \
7 curl \
8 zip \
9 graphviz \
10 imagemagick \
11 make \
12 && apt-get autoremove \
13 && apt-get clean \
14 && rm -rf /var/lib/apt/lists/*
15
16 RUN \
17 python3 -m pip install --no-cache-dir --upgrade pip && \
18 python3 -m pip install --no-cache-dir Sphinx Pillow
19
20 ADD requirements_docs.txt /project
21 RUN \
22 python3 -m pip install -r requirements_docs.txt
23
24 CMD ["sphinx-build", "-M", "html", ".", "_build"]
@@ -0,0 +1,117 b''
1 <!doctype html>
2 <html class="no-js"{% if language is not none %} lang="{{ language }}"{% endif %} data-content_root="{{ content_root }}">
3 <head>
4 <!-- Google Tag Manager -->
5 <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
6 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
7 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
8 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
9 })(window,document,'script','dataLayer','GTM-M2TSG36B');</script>
10 <!-- End Google Tag Manager -->
11
12 {%- block site_meta -%}
13 <meta charset="utf-8"/>
14 <meta name="viewport" content="width=device-width,initial-scale=1"/>
15 <meta name="color-scheme" content="light dark">
16
17 {%- if metatags %}{{ metatags }}{% endif -%}
18
19 {%- block linktags %}
20 {%- if hasdoc('about') -%}
21 <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
22 {%- endif -%}
23 {%- if hasdoc('genindex') -%}
24 <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
25 {%- endif -%}
26 {%- if hasdoc('search') -%}
27 <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
28 {%- endif -%}
29 {%- if hasdoc('copyright') -%}
30 <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
31 {%- endif -%}
32 {%- if next -%}
33 <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
34 {%- endif -%}
35 {%- if prev -%}
36 <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
37 {%- endif -%}
38 {#- rel="canonical" (set by html_baseurl) -#}
39 {%- if pageurl %}
40 <link rel="canonical" href="{{ pageurl|e }}" />
41 {%- endif %}
42 {%- endblock linktags %}
43
44 {# Favicon #}
45 {%- if favicon_url -%}
46 <link rel="shortcut icon" href="{{ favicon_url }}"/>
47 {%- endif -%}
48
49 <!-- Generated with Sphinx {{ sphinx_version }} and Furo {{ furo_version }} -->
50
51 {%- endblock site_meta -%}
52
53 {#- Site title -#}
54 {%- block htmltitle -%}
55 {% if not docstitle %}
56 <title>{{ title|striptags|e }}</title>
57 {% elif pagename == master_doc %}
58 <title>{{ docstitle|striptags|e }}</title>
59 {% else %}
60 <title>{{ title|striptags|e }} - {{ docstitle|striptags|e }}</title>
61 {% endif %}
62 {%- endblock -%}
63
64 {%- block styles -%}
65
66 {# Custom stylesheets #}
67 {%- block regular_styles -%}
68 {%- for css in css_files -%}
69 {% if css|attr("filename") -%}
70 {{ css_tag(css) }}
71 {%- else -%}
72 <link rel="stylesheet" href="{{ pathto(css, 1)|e }}" type="text/css" />
73 {%- endif %}
74 {% endfor -%}
75 {%- endblock regular_styles -%}
76
77 {#- Theme-related stylesheets -#}
78 {%- block theme_styles %}
79 {% include "partials/_head_css_variables.html" with context %}
80 {%- endblock -%}
81
82 {%- block extra_styles %}
83 {%- endblock -%}
84
85 {%- endblock styles -%}
86
87 {#- Custom front matter #}
88 {%- block extrahead -%}{%- endblock -%}
89 </head>
90 <body>
91 <!-- Google Tag Manager (noscript) -->
92 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M2TSG36B"
93 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
94 <!-- End Google Tag Manager (noscript) -->
95
96 {% block body %}
97 <script>
98 document.body.dataset.theme = localStorage.getItem("theme") || "auto";
99 </script>
100 {% endblock %}
101
102 {%- block scripts -%}
103
104 {# Custom JS #}
105 {%- block regular_scripts -%}
106 {% for path in script_files -%}
107 {{ js_tag(path) }}
108 {% endfor -%}
109 {%- endblock regular_scripts -%}
110
111 {# Theme-related JavaScript code #}
112 {%- block theme_scripts -%}
113 {%- endblock -%}
114
115 {%- endblock scripts -%}
116 </body>
117 </html> No newline at end of file
@@ -0,0 +1,204 b''
1 {% extends "base.html" %}
2
3 {% block body -%}
4 {{ super() }}
5 {% include "partials/icons.html" %}
6
7 <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
8 <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
9 <label class="overlay sidebar-overlay" for="__navigation">
10 <div class="visually-hidden">Hide navigation sidebar</div>
11 </label>
12 <label class="overlay toc-overlay" for="__toc">
13 <div class="visually-hidden">Hide table of contents sidebar</div>
14 </label>
15
16 {% if theme_announcement -%}
17 <div class="announcement">
18 <aside class="announcement-content">
19 {% block announcement %} {{ theme_announcement }} {% endblock announcement %}
20 </aside>
21 </div>
22 {%- endif %}
23
24 <div class="page">
25 <header class="mobile-header">
26 <div class="header-left">
27 <label class="nav-overlay-icon" for="__navigation">
28 <div class="visually-hidden">Toggle site navigation sidebar</div>
29 <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
30 </label>
31 </div>
32 <div class="header-center">
33 <a href="{{ pathto(master_doc) }}"><div class="brand">{{ docstitle if docstitle else project }}</div></a>
34 </div>
35 <div class="header-right">
36 <div class="theme-toggle-container theme-toggle-header">
37 <button class="theme-toggle">
38 <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
39 <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
40 <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
41 <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
42 </button>
43 </div>
44 <label class="toc-overlay-icon toc-header-icon{% if furo_hide_toc %} no-toc{% endif %}" for="__toc">
45 <div class="visually-hidden">Toggle table of contents sidebar</div>
46 <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
47 </label>
48 </div>
49 </header>
50 <aside class="sidebar-drawer">
51 <div class="sidebar-container">
52 {% block left_sidebar %}
53 <div class="sidebar-sticky">
54 {%- for sidebar_section in sidebars %}
55 {%- include sidebar_section %}
56 {%- endfor %}
57 </div>
58 {% endblock left_sidebar %}
59 </div>
60 </aside>
61 <div class="main">
62 <div class="content">
63 <div class="article-container">
64 <a href="#" class="back-to-top muted-link">
65 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
66 <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
67 </svg>
68 <span>{% trans %}Back to top{% endtrans %}</span>
69 </a>
70 <div class="content-icon-container">
71 {% if theme_top_of_page_button == "edit" -%}
72 {%- include "components/edit-this-page.html" with context -%}
73 {%- elif theme_top_of_page_button != None -%}
74 {{ warning("Got an unsupported value for 'top_of_page_button'") }}
75 {%- endif -%}
76 {#- Theme toggle -#}
77 <div class="theme-toggle-container theme-toggle-content">
78 <button class="theme-toggle">
79 <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
80 <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
81 <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
82 <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
83 </button>
84 </div>
85 <label class="toc-overlay-icon toc-content-icon{% if furo_hide_toc %} no-toc{% endif %}" for="__toc">
86 <div class="visually-hidden">Toggle table of contents sidebar</div>
87 <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
88 </label>
89 </div>
90 <article role="main">
91 {% block content %}{{ body }}{% endblock %}
92 </article>
93 </div>
94 <footer>
95 {% block footer %}
96 <div class="related-pages">
97 {% if next -%}
98 <a class="next-page" href="{{ next.link }}">
99 <div class="page-info">
100 <div class="context">
101 <span>{{ _("Next") }}</span>
102 </div>
103 <div class="title">{{ next.title }}</div>
104 </div>
105 <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
106 </a>
107 {%- endif %}
108 {% if prev -%}
109 <a class="prev-page" href="{{ prev.link }}">
110 <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
111 <div class="page-info">
112 <div class="context">
113 <span>{{ _("Previous") }}</span>
114 </div>
115 {% if prev.link == pathto(master_doc) %}
116 <div class="title">{{ _("Home") }}</div>
117 {% else %}
118 <div class="title">{{ prev.title }}</div>
119 {% endif %}
120 </div>
121 </a>
122 {%- endif %}
123 </div>
124 <div class="bottom-of-page">
125 <div class="left-details">
126 {%- if show_copyright %}
127 <div class="copyright">
128 {%- if hasdoc('copyright') %}
129 {% trans path=pathto('copyright'), copyright=copyright|e -%}
130 <a href="{{ path }}">Copyright</a> &#169; {{ copyright }}
131 {%- endtrans %}
132 {%- else %}
133 {% trans copyright=copyright|e -%}
134 Copyright &#169; {{ copyright }}
135 {%- endtrans %}
136 {%- endif %}
137 </div>
138 {%- endif %}
139
140 {%- if show_sphinx -%}
141 {% trans %}<a href="https://www.sphinx-doc.org/">Sphinx</a> and {% endtrans -%}
142 <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
143 {% endif -%}
144 {%- if last_updated -%}
145 <div class="last-updated">
146 {% trans last_updated=last_updated|e -%}
147 Last updated on {{ last_updated }}
148 {%- endtrans -%}
149 </div>
150
151 <div style="border-top: 0">
152 Got documentation defects and suggestions? <a href="https://community.rhodecode.com">Submit docs issues</a>
153 </div>
154
155 {%- endif %}
156 </div>
157 <div class="right-details">
158 {% if theme_footer_icons or READTHEDOCS -%}
159 <div class="icons">
160 {% if theme_footer_icons -%}
161 {% for icon_dict in theme_footer_icons -%}
162 <a class="muted-link {{ icon_dict.class }}" href="{{ icon_dict.url }}" aria-label="{{ icon_dict.name }}">
163 {{- icon_dict.html -}}
164 </a>
165 {% endfor %}
166 {%- else -%}
167 {#- Show Read the Docs project -#}
168 {%- if READTHEDOCS and slug -%}
169 <a class="muted-link" href="https://readthedocs.org/projects/{{ slug }}" aria-label="On Read the Docs">
170 <svg x="0px" y="0px" viewBox="-125 217 360 360" xml:space="preserve">
171 <path fill="currentColor" d="M39.2,391.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3 c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2 c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,391.3,40.4,391.1,39.2,391.3z M39.2,353.6c-4.2,0.6-7.1,4.4-6.5,8.5 c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4 c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,353.6,40.4,353.4,39.2,353.6z M39.2,315.9 c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8 c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9 C41.7,315.9,40.4,315.8,39.2,315.9z M39.2,278.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7 c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6 c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,278.2,40.4,278.1,39.2,278.3z M-13.6,238.5c-39.6,0.3-54.3,12.5-54.3,12.5v295.7 c0,0,14.4-12.4,60.8-10.5s55.9,18.2,112.9,19.3s71.3-8.8,71.3-8.8l0.8-301.4c0,0-25.6,7.3-75.6,7.7c-49.9,0.4-61.9-12.7-107.7-14.2 C-8.2,238.6-10.9,238.5-13.6,238.5z M19.5,257.8c0,0,24,7.9,68.3,10.1c37.5,1.9,75-3.7,75-3.7v267.9c0,0-19,10-66.5,6.6 C59.5,536.1,19,522.1,19,522.1L19.5,257.8z M-3.6,264.8c4.2,0,7.7,3.4,7.7,7.7c0,4.2-3.4,7.7-7.7,7.7c0,0-12.4,0.1-20,0.8 c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,0,0,0,0c0,0,11.3-6,27-7.5 C-16,264.9-3.6,264.8-3.6,264.8z M-11,302.6c4.2-0.1,7.4,0,7.4,0c4.2,0.5,7.2,4.3,6.7,8.5c-0.4,3.5-3.2,6.3-6.7,6.7 c0,0-12.4,0.1-20,0.8c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5 C-20.5,302.9-15.2,302.7-11,302.6z M-3.6,340.2c4.2,0,7.7,3.4,7.7,7.7s-3.4,7.7-7.7,7.7c0,0-12.4-0.1-20,0.7 c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5C-16,340.1-3.6,340.2-3.6,340.2z" />
172 </svg>
173 </a>
174 {%- endif -%}
175 {%- endif %}
176 </div>
177 {%- endif %}
178 </div>
179 </div>
180 {% endblock footer %}
181 </footer>
182 </div>
183 <aside class="toc-drawer{% if furo_hide_toc %} no-toc{% endif %}">
184 {% block right_sidebar %}
185 {% if not furo_hide_toc %}
186 <div class="toc-sticky toc-scroll">
187 <div class="toc-title-container">
188 <span class="toc-title">
189 {{ _("On this page") }}
190 </span>
191 </div>
192 <div class="toc-tree-container">
193 <div class="toc-tree">
194 {{ toc }}
195 </div>
196 </div>
197 </div>
198 {% endif %}
199 {% endblock right_sidebar %}
200 </aside>
201 </div>
202 </div>
203
204 {%- endblock %}
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 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
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,10 +1,17 b''
1 {
1 {
2 "presets": [
2 "presets": [
3 ["env", {
3 [
4 "targets": {
4 "env",
5 "browsers": ["last 2 versions"]
5 {
6 "targets": {
7 "browsers": [
8 "last 2 versions"
9 ]
10 }
6 }
11 }
7 }]
12 ]
8 ],
13 ],
9 "plugins": ["transform-object-rest-spread"]
14 "plugins": [
15 "transform-object-rest-spread"
16 ]
10 }
17 }
@@ -1,6 +1,5 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.27.1
2 current_version = 5.0.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
@@ -1,68 +1,72 b''
1 syntax: glob
1 syntax: glob
2
2 *.egg
3 *.egg
3 *.egg-info
4 *.egg-info
4 *.idea
5 *.idea
5 *.orig
6 *.orig
6 *.pyc
7 *.pyc
7 *.sqlite-journal
8 *.sqlite-journal
8 *.swp
9 *.swp
9 *.tox
10 *.tox
10 *.DS_Store*
11 *.DS_Store*
11 rhodecode/public/js/src/components/**/*.css
12 rhodecode/public/js/src/components/**/*.css
12
13
13 syntax: regexp
14 syntax: regexp
14
15
15 #.filename
16 #.filename
16 ^\.settings$
17 ^\.settings$
17 ^\.project$
18 ^\.project$
18 ^\.pydevproject$
19 ^\.pydevproject$
19 ^\.coverage$
20 ^\.coverage$
20 ^\.cache.*$
21 ^\.cache.*$
22 ^\.ruff_cache.*$
21 ^\.rhodecode$
23 ^\.rhodecode$
22
24
23 ^rcextensions
25 ^rcextensions
24 ^.dev
26 ^.dev
25 ^._dev
27 ^._dev
26 ^build/
28 ^build/
27 ^coverage\.xml$
29 ^coverage\.xml$
28 ^data$
30 ^data$
29 ^\.eggs/
31 ^\.eggs/
30 ^configs/data$
32 ^configs/data$
31 ^dev.ini$
33 ^dev.ini$
32 ^acceptance_tests/dev.*\.ini$
34 ^acceptance_tests/dev.*\.ini$
33 ^dist/
35 ^dist/
34 ^fabfile.py
36 ^fabfile.py
35 ^htmlcov
37 ^htmlcov
36 ^junit\.xml$
38 ^junit\.xml$
37 ^node_modules/
39 ^node_modules/
38 ^node_binaries/
40 ^node_binaries/
41 ^package-lock.json
39 ^pylint.log$
42 ^pylint.log$
40 ^rcextensions/
43 ^rcextensions/
41 ^result$
44 ^result$
42 ^rhodecode/public/css/style.css$
45 ^rhodecode/public/css/style.css$
43 ^rhodecode/public/css/style-polymer.css$
46 ^rhodecode/public/css/style-polymer.css$
44 ^rhodecode/public/css/style-ipython.css$
47 ^rhodecode/public/css/style-ipython.css$
45 ^rhodecode/public/js/rhodecode-components.html$
48 ^rhodecode/public/js/rhodecode-components.html$
46 ^rhodecode/public/js/rhodecode-components.js$
49 ^rhodecode/public/js/rhodecode-components.js$
47 ^rhodecode/public/js/scripts.js$
50 ^rhodecode/public/js/scripts.js$
48 ^rhodecode/public/js/scripts.min.js$
51 ^rhodecode/public/js/scripts.min.js$
49 ^rhodecode/public/js/src/components/root-styles.gen.html$
52 ^rhodecode/public/js/src/components/root-styles.gen.html$
50 ^rhodecode/public/js/vendors/webcomponentsjs/
53 ^rhodecode/public/js/vendors/webcomponentsjs/
51 ^rhodecode\.db$
54 ^rhodecode\.db$
52 ^rhodecode\.log$
55 ^rhodecode\.log$
53 ^rhodecode_dev\.log$
56 ^rhodecode_dev\.log$
54 ^test\.db$
57 ^test\.db$
55
58
59
56 # ac-tests
60 # ac-tests
57 ^acceptance_tests/\.cache.*$
61 ^acceptance_tests/\.cache.*$
58 ^acceptance_tests/externals
62 ^acceptance_tests/externals
59 ^acceptance_tests/ghostdriver.log$
63 ^acceptance_tests/ghostdriver.log$
60 ^acceptance_tests/local(_.+)?\.ini$
64 ^acceptance_tests/local(_.+)?\.ini$
61
65
62 # docs
66 # docs
63 ^docs/_build$
67 ^docs/_build$
64 ^docs/result$
68 ^docs/result$
65 ^docs-internal/_build$
69 ^docs-internal/_build$
66
70
67 # Cythonized things
71 # Cythonized things
68 ^rhodecode/.*\.(c|so)$
72 ^rhodecode/.*\.(c|so)$
@@ -1,52 +1,57 b''
1 # top level files
1 # top level files
2
2 include *.rst
3 include MANIFEST.in
3 include *.txt
4 include README.rst
5 include CHANGES.rst
6 include LICENSE.txt
7
4
8 include rhodecode/VERSION
5 include rhodecode/VERSION
9
6
7 # all python files inside packages
8 graft rhodecode
9
10 # docs
10 # docs
11 recursive-include docs *
11 recursive-include docs *
12
12
13 # all config files
13 # all config files
14 recursive-include configs *
14 recursive-include configs *
15
15
16 # translations
16 # translations
17 recursive-include rhodecode/i18n *
17 recursive-include rhodecode/i18n *
18
18
19 # non-python core stuff
19 # non-python core stuff
20 recursive-include rhodecode *.cfg
20 recursive-include rhodecode *.cfg
21 recursive-include rhodecode *.json
21 recursive-include rhodecode *.json
22 recursive-include rhodecode *.ini_tmpl
22 recursive-include rhodecode *.ini_tmpl
23 recursive-include rhodecode *.sh
23 recursive-include rhodecode *.sh
24 recursive-include rhodecode *.mako
24 recursive-include rhodecode *.mako
25
25
26 # 502 page
26 # 502 page
27 include rhodecode/public/502.html
27 include rhodecode/public/502.html
28
28
29 # robots
29 # robots
30 include rhodecode/public/robots.txt
30 include rhodecode/public/robots.txt
31
31
32 # images, css
32 # images, css
33 include rhodecode/public/css/*.css
33 include rhodecode/public/css/*.css
34 include rhodecode/public/images/*.*
34 include rhodecode/public/images/*.*
35 include rhodecode/public/images/ee_features/*.*
35 include rhodecode/public/images/ee_features/*.*
36
36
37 # sound files
37 # sound files
38 include rhodecode/public/sounds/*.mp3
38 include rhodecode/public/sounds/*.mp3
39 include rhodecode/public/sounds/*.wav
39 include rhodecode/public/sounds/*.wav
40
40
41 # fonts
41 # fonts
42 recursive-include rhodecode/public/fonts/RCIcons *
42 recursive-include rhodecode/public/fonts/RCIcons *
43
43
44 # js
44 # js
45 recursive-include rhodecode/public/js *
45 recursive-include rhodecode/public/js *
46
46
47 # templates
47 # templates
48 recursive-include rhodecode/templates *
48 recursive-include rhodecode/templates *
49
49
50 # skip any tests files
50 # skip any tests files
51 recursive-exclude rhodecode/api/tests *
51 recursive-exclude rhodecode/tests *
52 recursive-exclude rhodecode/tests *
52
53
54 recursive-exclude docs/_build *
55 recursive-exclude * __pycache__
56 recursive-exclude * *.py[co]
57 recursive-exclude * .*.sw[a-z]
@@ -1,98 +1,192 b''
1 .DEFAULT_GOAL := help
1 # required for pushd to work..
2 SHELL = /bin/bash
3
2
4
3 # set by: PATH_TO_OUTDATED_PACKAGES=/some/path/outdated_packages.py
5 # set by: PATH_TO_OUTDATED_PACKAGES=/some/path/outdated_packages.py
4 OUTDATED_PACKAGES = ${PATH_TO_OUTDATED_PACKAGES}
6 OUTDATED_PACKAGES = ${PATH_TO_OUTDATED_PACKAGES}
5
7
6 NODE_PATH=./node_modules
7 WEBPACK=./node_binaries/webpack
8 GRUNT=./node_binaries/grunt
9
10 .PHONY: clean
8 .PHONY: clean
11 clean: ## full clean
9 ## Cleanup compiled and cache py files
10 clean:
12 make test-clean
11 make test-clean
13 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' -o -iname '*.orig' \) -exec rm '{}' ';'
12 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' -o -iname '*.orig' \) -exec rm '{}' ';'
13 find . -type d -name "build" -prune -exec rm -rf '{}' ';'
14
14
15
15
16 .PHONY: test
16 .PHONY: test
17 test: ## run test-clean and tests
17 ## run test-clean and tests
18 test:
18 make test-clean
19 make test-clean
19 make test-only
20 make test-only
20
21
21
22
22 .PHONY:test-clean
23 .PHONY: test-clean
23 test-clean: ## run test-clean and tests
24 ## run test-clean and tests
25 test-clean:
24 rm -rf coverage.xml htmlcov junit.xml pylint.log result
26 rm -rf coverage.xml htmlcov junit.xml pylint.log result
25 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
27 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
26 find . -type f \( -iname '.coverage.*' \) -exec rm '{}' ';'
28 find . -type f \( -iname '.coverage.*' \) -exec rm '{}' ';'
27
29
28
30
29 .PHONY: test-only
31 .PHONY: test-only
30 test-only: ## run tests
32 ## Run tests only without cleanup
33 test-only:
31 PYTHONHASHSEED=random \
34 PYTHONHASHSEED=random \
32 py.test -x -vv -r xw -p no:sugar \
35 py.test -x -vv -r xw -p no:sugar \
33 --cov=rhodecode --cov-report=term-missing --cov-report=html \
36 --cov-report=term-missing --cov-report=html \
34 rhodecode
37 --cov=rhodecode rhodecode
35
38
36
39
37 .PHONY: test-only-mysql
40 .PHONY: test-only-mysql
38 test-only-mysql: ## run tests against mysql
41 ## run tests against mysql
42 test-only-mysql:
39 PYTHONHASHSEED=random \
43 PYTHONHASHSEED=random \
40 py.test -x -vv -r xw -p no:sugar \
44 py.test -x -vv -r xw -p no:sugar \
41 --cov=rhodecode --cov-report=term-missing --cov-report=html \
45 --cov-report=term-missing --cov-report=html \
42 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test?charset=utf8"}}' \
46 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test?charset=utf8"}}' \
43 rhodecode
47 --cov=rhodecode rhodecode
44
48
45
49
46 .PHONY: test-only-postgres
50 .PHONY: test-only-postgres
47 test-only-postgres: ## run tests against postgres
51 ## run tests against postgres
52 test-only-postgres:
48 PYTHONHASHSEED=random \
53 PYTHONHASHSEED=random \
49 py.test -x -vv -r xw -p no:sugar \
54 py.test -x -vv -r xw -p no:sugar \
50 --cov=rhodecode --cov-report=term-missing --cov-report=html \
55 --cov-report=term-missing --cov-report=html \
51 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
56 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
52 rhodecode
57 --cov=rhodecode rhodecode
58
59 .PHONY: ruff-check
60 ## run a ruff analysis
61 ruff-check:
62 ruff check --ignore F401 --ignore I001 --ignore E402 --ignore E501 --ignore F841 --exclude rhodecode/lib/dbmigrate --exclude .eggs --exclude .dev .
63
53
64
54 .PHONY: docs
65 .PHONY: docs
55 docs: ## build docs
66 ## build docs
56 (cd docs; nix-build default.nix -o result; make clean html)
67 docs:
68 (cd docs; docker run --rm -v $(PWD):/project --workdir=/project/docs sphinx-doc-build-rc make clean html)
57
69
58
70
59 .PHONY: docs-clean
71 .PHONY: docs-clean
60 docs-clean: ## Cleanup docs
72 ## Cleanup docs
61 (cd docs; make clean)
73 docs-clean:
74 (cd docs; docker run --rm -v $(PWD):/project --workdir=/project/docs sphinx-doc-build-rc make clean)
62
75
63
76
64 .PHONY: docs-cleanup
77 .PHONY: docs-cleanup
65 docs-cleanup: ## Cleanup docs
78 ## Cleanup docs
66 (cd docs; make cleanup)
79 docs-cleanup:
80 (cd docs; docker run --rm -v $(PWD):/project --workdir=/project/docs sphinx-doc-build-rc make cleanup)
67
81
68
82
69 .PHONY: web-build
83 .PHONY: web-build
70 web-build: ## Build static/js
84 ## Build JS packages static/js
71 NODE_PATH=$(NODE_PATH) $(GRUNT)
85 web-build:
72
86 docker run -it --rm -v $(PWD):/project --workdir=/project rhodecode/static-files-build:16 -c "npm install && /project/node_modules/.bin/grunt"
73
87 # run static file check
74 .PHONY: generate-pkgs
88 ./rhodecode/tests/scripts/static-file-check.sh rhodecode/public/
75 generate-pkgs: ## generate new python packages
89 rm -rf node_modules
76 nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses"
77
90
78
91
79 .PHONY: pip-packages
92 .PHONY: pip-packages
80 pip-packages: ## show outdated packages
93 ## Show outdated packages
94 pip-packages:
81 python ${OUTDATED_PACKAGES}
95 python ${OUTDATED_PACKAGES}
82
96
83
97
84 .PHONY: generate-js-pkgs
98 .PHONY: build
85 generate-js-pkgs: ## generate js packages
99 ## Build sdist/egg
86 rm -rf node_modules && \
100 build:
87 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" && \
101 python -m build
88 sed -i -e 's/http:\/\//https:\/\//g' pkgs/node-packages.nix
102
103
104 .PHONY: dev-sh
105 ## make dev-sh
106 dev-sh:
107 sudo echo "deb [trusted=yes] https://apt.fury.io/rsteube/ /" | sudo tee -a "/etc/apt/sources.list.d/fury.list"
108 sudo apt-get update
109 sudo apt-get install -y zsh carapace-bin
110 rm -rf /home/rhodecode/.oh-my-zsh
111 curl https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
112 echo "source <(carapace _carapace)" > /home/rhodecode/.zsrc
113 PROMPT='%(?.%F{green}√.%F{red}?%?)%f %B%F{240}%1~%f%b %# ' zsh
114
115
116 .PHONY: dev-cleanup
117 ## Cleanup: pip freeze | grep -v "^-e" | grep -v "@" | xargs pip uninstall -y
118 dev-cleanup:
119 pip freeze | grep -v "^-e" | grep -v "@" | xargs pip uninstall -y
120 rm -rf /tmp/*
121
122
123 .PHONY: dev-env
124 ## make dev-env based on the requirements files and install develop of packages
125 dev-env:
126 pip install build virtualenv
127 pushd ../rhodecode-vcsserver/ && make dev-env && popd
128 pip wheel --wheel-dir=/home/rhodecode/.cache/pip/wheels -r requirements.txt -r requirements_rc_tools.txt -r requirements_test.txt -r requirements_debug.txt
129 pip install --no-index --find-links=/home/rhodecode/.cache/pip/wheels -r requirements.txt -r requirements_rc_tools.txt -r requirements_test.txt -r requirements_debug.txt
130 pip install -e .
131
132
133 .PHONY: sh
134 ## shortcut for make dev-sh dev-env
135 sh:
136 make dev-env
137 make dev-sh
138
139
140 .PHONY: dev-srv
141 ## run develop server instance, docker exec -it $(docker ps -q --filter 'name=dev-enterprise-ce') /bin/bash
142 dev-srv:
143 pserve --reload .dev/dev.ini
89
144
90
145
91 .PHONY: generate-license-meta
146 .PHONY: dev-srv-g
92 generate-license-meta: ## Generate license metadata
147 ## run gunicorn multi process workers
93 nix-build pkgs/license-generate.nix -o result-license && \
148 dev-srv-g:
94 cat result-license/licenses.json | python -m json.tool > rhodecode/config/licenses.json
149 gunicorn --paste .dev/dev.ini --bind=0.0.0.0:10020 --config=.dev/gunicorn_config.py --timeout=120 --reload
150
151
152 # Default command on calling make
153 .DEFAULT_GOAL := show-help
95
154
96 .PHONY: help
155 .PHONY: show-help
97 help:
156 show-help:
98 @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-24s\033[0m %s\n", $$1, $$2}'
157 @echo "$$(tput bold)Available rules:$$(tput sgr0)"
158 @echo
159 @sed -n -e "/^## / { \
160 h; \
161 s/.*//; \
162 :doc" \
163 -e "H; \
164 n; \
165 s/^## //; \
166 t doc" \
167 -e "s/:.*//; \
168 G; \
169 s/\\n## /---/; \
170 s/\\n/ /g; \
171 p; \
172 }" ${MAKEFILE_LIST} \
173 | LC_ALL='C' sort --ignore-case \
174 | awk -F '---' \
175 -v ncol=$$(tput cols) \
176 -v indent=19 \
177 -v col_on="$$(tput setaf 6)" \
178 -v col_off="$$(tput sgr0)" \
179 '{ \
180 printf "%s%*s%s ", col_on, -indent, $$1, col_off; \
181 n = split($$2, words, " "); \
182 line_length = ncol - indent; \
183 for (i = 1; i <= n; i++) { \
184 line_length -= length(words[i]) + 1; \
185 if (line_length <= 0) { \
186 line_length = ncol - indent - length(words[i]) - 1; \
187 printf "\n%*s ", -indent, " "; \
188 } \
189 printf "%s ", words[i]; \
190 } \
191 printf "\n"; \
192 }'
@@ -1,845 +1,865 b''
1 ## -*- coding: utf-8 -*-
2
1
3 ; #########################################
2 ; #########################################
4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
3 ; RHODECODE COMMUNITY EDITION CONFIGURATION
5 ; #########################################
4 ; #########################################
6
5
7 [DEFAULT]
6 [DEFAULT]
8 ; Debug flag sets all loggers to debug, and enables request tracking
7 ; Debug flag sets all loggers to debug, and enables request tracking
9 debug = true
8 debug = true
10
9
11 ; ########################################################################
10 ; ########################################################################
12 ; EMAIL CONFIGURATION
11 ; EMAIL CONFIGURATION
13 ; These settings will be used by the RhodeCode mailing system
12 ; These settings will be used by the RhodeCode mailing system
14 ; ########################################################################
13 ; ########################################################################
15
14
16 ; prefix all emails subjects with given prefix, helps filtering out emails
15 ; prefix all emails subjects with given prefix, helps filtering out emails
17 #email_prefix = [RhodeCode]
16 #email_prefix = [RhodeCode]
18
17
19 ; email FROM address all mails will be sent
18 ; email FROM address all mails will be sent
20 #app_email_from = rhodecode-noreply@localhost
19 #app_email_from = rhodecode-noreply@localhost
21
20
22 #smtp_server = mail.server.com
21 #smtp_server = mail.server.com
23 #smtp_username =
22 #smtp_username =
24 #smtp_password =
23 #smtp_password =
25 #smtp_port =
24 #smtp_port =
26 #smtp_use_tls = false
25 #smtp_use_tls = false
27 #smtp_use_ssl = true
26 #smtp_use_ssl = true
28
27
29 [server:main]
28 [server:main]
30 ; COMMON HOST/IP CONFIG
29 ; COMMON HOST/IP CONFIG, This applies mostly to develop setup,
30 ; Host port for gunicorn are controlled by gunicorn_conf.py
31 host = 127.0.0.1
31 host = 127.0.0.1
32 port = 5000
32 port = 10020
33
33
34 ; ##################################################
34 ; ##################################################
35 ; WAITRESS WSGI SERVER - Recommended for Development
35 ; WAITRESS WSGI SERVER - Recommended for Development
36 ; ##################################################
36 ; ##################################################
37
37
38 ; use server type
38 ; use server type
39 use = egg:waitress#main
39 use = egg:waitress#main
40
40
41 ; number of worker threads
41 ; number of worker threads
42 threads = 5
42 threads = 5
43
43
44 ; MAX BODY SIZE 100GB
44 ; MAX BODY SIZE 100GB
45 max_request_body_size = 107374182400
45 max_request_body_size = 107374182400
46
46
47 ; Use poll instead of select, fixes file descriptors limits problems.
47 ; Use poll instead of select, fixes file descriptors limits problems.
48 ; May not work on old windows systems.
48 ; May not work on old windows systems.
49 asyncore_use_poll = true
49 asyncore_use_poll = true
50
50
51
51
52 ; ###########################
52 ; ###########################
53 ; GUNICORN APPLICATION SERVER
53 ; GUNICORN APPLICATION SERVER
54 ; ###########################
54 ; ###########################
55
55
56 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
56 ; run with gunicorn --paste rhodecode.ini --config gunicorn_conf.py
57
57
58 ; Module to use, this setting shouldn't be changed
58 ; Module to use, this setting shouldn't be changed
59 #use = egg:gunicorn#main
59 #use = egg:gunicorn#main
60
60
61 ; Sets the number of process workers. More workers means more concurrent connections
62 ; RhodeCode can handle at the same time. Each additional worker also it increases
63 ; memory usage as each has it's own set of caches.
64 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
65 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
66 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
67 ; when using more than 1 worker.
68 #workers = 2
69
70 ; Gunicorn access log level
71 #loglevel = info
72
73 ; Process name visible in process list
74 #proc_name = rhodecode
75
76 ; Type of worker class, one of `sync`, `gevent`
77 ; Recommended type is `gevent`
78 #worker_class = gevent
79
80 ; The maximum number of simultaneous clients. Valid only for gevent
81 #worker_connections = 10
82
83 ; Max number of requests that worker will handle before being gracefully restarted.
84 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
85 #max_requests = 1000
86 #max_requests_jitter = 30
87
88 ; Amount of time a worker can spend with handling a request before it
89 ; gets killed and restarted. By default set to 21600 (6hrs)
90 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
91 #timeout = 21600
92
93 ; The maximum size of HTTP request line in bytes.
94 ; 0 for unlimited
95 #limit_request_line = 0
96
97 ; Limit the number of HTTP headers fields in a request.
98 ; By default this value is 100 and can't be larger than 32768.
99 #limit_request_fields = 32768
100
101 ; Limit the allowed size of an HTTP request header field.
102 ; Value is a positive number or 0.
103 ; Setting it to 0 will allow unlimited header field sizes.
104 #limit_request_field_size = 0
105
106 ; Timeout for graceful workers restart.
107 ; After receiving a restart signal, workers have this much time to finish
108 ; serving requests. Workers still alive after the timeout (starting from the
109 ; receipt of the restart signal) are force killed.
110 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
111 #graceful_timeout = 3600
112
113 # The number of seconds to wait for requests on a Keep-Alive connection.
114 # Generally set in the 1-5 seconds range.
115 #keepalive = 2
116
117 ; Maximum memory usage that each worker can use before it will receive a
118 ; graceful restart signal 0 = memory monitoring is disabled
119 ; Examples: 268435456 (256MB), 536870912 (512MB)
120 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
121 #memory_max_usage = 0
122
123 ; How often in seconds to check for memory usage for each gunicorn worker
124 #memory_usage_check_interval = 60
125
126 ; Threshold value for which we don't recycle worker if GarbageCollection
127 ; frees up enough resources. Before each restart we try to run GC on worker
128 ; in case we get enough free memory after that, restart will not happen.
129 #memory_usage_recovery_threshold = 0.8
130
131
132 ; Prefix middleware for RhodeCode.
61 ; Prefix middleware for RhodeCode.
133 ; recommended when using proxy setup.
62 ; recommended when using proxy setup.
134 ; allows to set RhodeCode under a prefix in server.
63 ; allows to set RhodeCode under a prefix in server.
135 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
64 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
136 ; And set your prefix like: `prefix = /custom_prefix`
65 ; And set your prefix like: `prefix = /custom_prefix`
137 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
66 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
138 ; to make your cookies only work on prefix url
67 ; to make your cookies only work on prefix url
139 [filter:proxy-prefix]
68 [filter:proxy-prefix]
140 use = egg:PasteDeploy#prefix
69 use = egg:PasteDeploy#prefix
141 prefix = /
70 prefix = /
142
71
143 [app:main]
72 [app:main]
144 ; The %(here)s variable will be replaced with the absolute path of parent directory
73 ; The %(here)s variable will be replaced with the absolute path of parent directory
145 ; of this file
74 ; of this file
146 ; In addition ENVIRONMENT variables usage is possible, e.g
75 ; Each option in the app:main can be override by an environmental variable
147 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
76 ;
77 ;To override an option:
78 ;
79 ;RC_<KeyName>
80 ;Everything should be uppercase, . and - should be replaced by _.
81 ;For example, if you have these configuration settings:
82 ;rc_cache.repo_object.backend = foo
83 ;can be overridden by
84 ;export RC_CACHE_REPO_OBJECT_BACKEND=foo
148
85
149 use = egg:rhodecode-enterprise-ce
86 use = egg:rhodecode-enterprise-ce
150
87
151 ; enable proxy prefix middleware, defined above
88 ; enable proxy prefix middleware, defined above
152 #filter-with = proxy-prefix
89 #filter-with = proxy-prefix
153
90
154 ; #############
91 ; #############
155 ; DEBUG OPTIONS
92 ; DEBUG OPTIONS
156 ; #############
93 ; #############
157
94
158 pyramid.reload_templates = true
95 pyramid.reload_templates = true
159
96
160 # During development the we want to have the debug toolbar enabled
97 # During development the we want to have the debug toolbar enabled
161 pyramid.includes =
98 pyramid.includes =
162 pyramid_debugtoolbar
99 pyramid_debugtoolbar
163
100
164 debugtoolbar.hosts = 0.0.0.0/0
101 debugtoolbar.hosts = 0.0.0.0/0
165 debugtoolbar.exclude_prefixes =
102 debugtoolbar.exclude_prefixes =
166 /css
103 /css
167 /fonts
104 /fonts
168 /images
105 /images
169 /js
106 /js
170
107
171 ## RHODECODE PLUGINS ##
108 ## RHODECODE PLUGINS ##
172 rhodecode.includes =
109 rhodecode.includes =
173 rhodecode.api
110 rhodecode.api
174
111
175
112
176 # api prefix url
113 # api prefix url
177 rhodecode.api.url = /_admin/api
114 rhodecode.api.url = /_admin/api
178
115
179 ; enable debug style page
116 ; enable debug style page
180 debug_style = true
117 debug_style = true
181
118
182 ; #################
119 ; #################
183 ; END DEBUG OPTIONS
120 ; END DEBUG OPTIONS
184 ; #################
121 ; #################
185
122
186 ; encryption key used to encrypt social plugin tokens,
123 ; encryption key used to encrypt social plugin tokens,
187 ; remote_urls with credentials etc, if not set it defaults to
124 ; remote_urls with credentials etc, if not set it defaults to
188 ; `beaker.session.secret`
125 ; `beaker.session.secret`
189 #rhodecode.encrypted_values.secret =
126 #rhodecode.encrypted_values.secret =
190
127
191 ; decryption strict mode (enabled by default). It controls if decryption raises
128 ; decryption strict mode (enabled by default). It controls if decryption raises
192 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
129 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
193 #rhodecode.encrypted_values.strict = false
130 #rhodecode.encrypted_values.strict = false
194
131
195 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
132 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
196 ; fernet is safer, and we strongly recommend switching to it.
133 ; fernet is safer, and we strongly recommend switching to it.
197 ; Due to backward compatibility aes is used as default.
134 ; Due to backward compatibility aes is used as default.
198 #rhodecode.encrypted_values.algorithm = fernet
135 #rhodecode.encrypted_values.algorithm = fernet
199
136
200 ; Return gzipped responses from RhodeCode (static files/application)
137 ; Return gzipped responses from RhodeCode (static files/application)
201 gzip_responses = false
138 gzip_responses = false
202
139
203 ; Auto-generate javascript routes file on startup
140 ; Auto-generate javascript routes file on startup
204 generate_js_files = false
141 generate_js_files = false
205
142
206 ; System global default language.
143 ; System global default language.
207 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
144 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
208 lang = en
145 lang = en
209
146
210 ; Perform a full repository scan and import on each server start.
147 ; Perform a full repository scan and import on each server start.
211 ; Settings this to true could lead to very long startup time.
148 ; Settings this to true could lead to very long startup time.
212 startup.import_repos = false
149 startup.import_repos = false
213
150
214 ; Uncomment and set this path to use archive download cache.
215 ; Once enabled, generated archives will be cached at this location
216 ; and served from the cache during subsequent requests for the same archive of
217 ; the repository.
218 #archive_cache_dir = /tmp/tarballcache
219
220 ; URL at which the application is running. This is used for Bootstrapping
151 ; URL at which the application is running. This is used for Bootstrapping
221 ; requests in context when no web request is available. Used in ishell, or
152 ; requests in context when no web request is available. Used in ishell, or
222 ; SSH calls. Set this for events to receive proper url for SSH calls.
153 ; SSH calls. Set this for events to receive proper url for SSH calls.
223 app.base_url = http://rhodecode.local
154 app.base_url = http://rhodecode.local
224
155
225 ; Unique application ID. Should be a random unique string for security.
156 ; Unique application ID. Should be a random unique string for security.
226 app_instance_uuid = rc-production
157 app_instance_uuid = rc-production
227
158
228 ; Cut off limit for large diffs (size in bytes). If overall diff size on
159 ; Cut off limit for large diffs (size in bytes). If overall diff size on
229 ; commit, or pull request exceeds this limit this diff will be displayed
160 ; commit, or pull request exceeds this limit this diff will be displayed
230 ; partially. E.g 512000 == 512Kb
161 ; partially. E.g 512000 == 512Kb
231 cut_off_limit_diff = 512000
162 cut_off_limit_diff = 512000
232
163
233 ; Cut off limit for large files inside diffs (size in bytes). Each individual
164 ; Cut off limit for large files inside diffs (size in bytes). Each individual
234 ; file inside diff which exceeds this limit will be displayed partially.
165 ; file inside diff which exceeds this limit will be displayed partially.
235 ; E.g 128000 == 128Kb
166 ; E.g 128000 == 128Kb
236 cut_off_limit_file = 128000
167 cut_off_limit_file = 128000
237
168
238 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
169 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
239 vcs_full_cache = true
170 vcs_full_cache = true
240
171
241 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
172 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
242 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
173 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
243 force_https = false
174 force_https = false
244
175
245 ; use Strict-Transport-Security headers
176 ; use Strict-Transport-Security headers
246 use_htsts = false
177 use_htsts = false
247
178
248 ; Set to true if your repos are exposed using the dumb protocol
179 ; Set to true if your repos are exposed using the dumb protocol
249 git_update_server_info = false
180 git_update_server_info = false
250
181
251 ; RSS/ATOM feed options
182 ; RSS/ATOM feed options
252 rss_cut_off_limit = 256000
183 rss_cut_off_limit = 256000
253 rss_items_per_page = 10
184 rss_items_per_page = 10
254 rss_include_diff = false
185 rss_include_diff = false
255
186
256 ; gist URL alias, used to create nicer urls for gist. This should be an
187 ; gist URL alias, used to create nicer urls for gist. This should be an
257 ; url that does rewrites to _admin/gists/{gistid}.
188 ; url that does rewrites to _admin/gists/{gistid}.
258 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
189 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
259 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
190 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
260 gist_alias_url =
191 gist_alias_url =
261
192
262 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
193 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
263 ; used for access.
194 ; used for access.
264 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
195 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
265 ; came from the the logged in user who own this authentication token.
196 ; came from the the logged in user who own this authentication token.
266 ; Additionally @TOKEN syntax can be used to bound the view to specific
197 ; Additionally @TOKEN syntax can be used to bound the view to specific
267 ; authentication token. Such view would be only accessible when used together
198 ; authentication token. Such view would be only accessible when used together
268 ; with this authentication token
199 ; with this authentication token
269 ; list of all views can be found under `/_admin/permissions/auth_token_access`
200 ; list of all views can be found under `/_admin/permissions/auth_token_access`
270 ; The list should be "," separated and on a single line.
201 ; The list should be "," separated and on a single line.
271 ; Most common views to enable:
202 ; Most common views to enable:
272
203
273 # RepoCommitsView:repo_commit_download
204 # RepoCommitsView:repo_commit_download
274 # RepoCommitsView:repo_commit_patch
205 # RepoCommitsView:repo_commit_patch
275 # RepoCommitsView:repo_commit_raw
206 # RepoCommitsView:repo_commit_raw
276 # RepoCommitsView:repo_commit_raw@TOKEN
207 # RepoCommitsView:repo_commit_raw@TOKEN
277 # RepoFilesView:repo_files_diff
208 # RepoFilesView:repo_files_diff
278 # RepoFilesView:repo_archivefile
209 # RepoFilesView:repo_archivefile
279 # RepoFilesView:repo_file_raw
210 # RepoFilesView:repo_file_raw
280 # GistView:*
211 # GistView:*
281 api_access_controllers_whitelist =
212 api_access_controllers_whitelist =
282
213
283 ; Default encoding used to convert from and to unicode
214 ; Default encoding used to convert from and to unicode
284 ; can be also a comma separated list of encoding in case of mixed encodings
215 ; can be also a comma separated list of encoding in case of mixed encodings
285 default_encoding = UTF-8
216 default_encoding = UTF-8
286
217
287 ; instance-id prefix
218 ; instance-id prefix
288 ; a prefix key for this instance used for cache invalidation when running
219 ; a prefix key for this instance used for cache invalidation when running
289 ; multiple instances of RhodeCode, make sure it's globally unique for
220 ; multiple instances of RhodeCode, make sure it's globally unique for
290 ; all running RhodeCode instances. Leave empty if you don't use it
221 ; all running RhodeCode instances. Leave empty if you don't use it
291 instance_id =
222 instance_id =
292
223
293 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
224 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
294 ; of an authentication plugin also if it is disabled by it's settings.
225 ; of an authentication plugin also if it is disabled by it's settings.
295 ; This could be useful if you are unable to log in to the system due to broken
226 ; This could be useful if you are unable to log in to the system due to broken
296 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
227 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
297 ; module to log in again and fix the settings.
228 ; module to log in again and fix the settings.
298 ; Available builtin plugin IDs (hash is part of the ID):
229 ; Available builtin plugin IDs (hash is part of the ID):
299 ; egg:rhodecode-enterprise-ce#rhodecode
230 ; egg:rhodecode-enterprise-ce#rhodecode
300 ; egg:rhodecode-enterprise-ce#pam
231 ; egg:rhodecode-enterprise-ce#pam
301 ; egg:rhodecode-enterprise-ce#ldap
232 ; egg:rhodecode-enterprise-ce#ldap
302 ; egg:rhodecode-enterprise-ce#jasig_cas
233 ; egg:rhodecode-enterprise-ce#jasig_cas
303 ; egg:rhodecode-enterprise-ce#headers
234 ; egg:rhodecode-enterprise-ce#headers
304 ; egg:rhodecode-enterprise-ce#crowd
235 ; egg:rhodecode-enterprise-ce#crowd
305
236
306 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
237 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
307
238
308 ; Flag to control loading of legacy plugins in py:/path format
239 ; Flag to control loading of legacy plugins in py:/path format
309 auth_plugin.import_legacy_plugins = true
240 auth_plugin.import_legacy_plugins = true
310
241
311 ; alternative return HTTP header for failed authentication. Default HTTP
242 ; alternative return HTTP header for failed authentication. Default HTTP
312 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
243 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
313 ; handling that causing a series of failed authentication calls.
244 ; handling that causing a series of failed authentication calls.
314 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
245 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
315 ; This will be served instead of default 401 on bad authentication
246 ; This will be served instead of default 401 on bad authentication
316 auth_ret_code =
247 auth_ret_code =
317
248
318 ; use special detection method when serving auth_ret_code, instead of serving
249 ; use special detection method when serving auth_ret_code, instead of serving
319 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
250 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
320 ; and then serve auth_ret_code to clients
251 ; and then serve auth_ret_code to clients
321 auth_ret_code_detection = false
252 auth_ret_code_detection = false
322
253
323 ; locking return code. When repository is locked return this HTTP code. 2XX
254 ; locking return code. When repository is locked return this HTTP code. 2XX
324 ; codes don't break the transactions while 4XX codes do
255 ; codes don't break the transactions while 4XX codes do
325 lock_ret_code = 423
256 lock_ret_code = 423
326
257
327 ; allows to change the repository location in settings page
258 ; allows to change the repository location in settings page
328 allow_repo_location_change = true
259 allow_repo_location_change = true
329
260
330 ; allows to setup custom hooks in settings page
261 ; allows to setup custom hooks in settings page
331 allow_custom_hooks_settings = true
262 allow_custom_hooks_settings = true
332
263
333 ; Generated license token required for EE edition license.
264 ; Generated license token required for EE edition license.
334 ; New generated token value can be found in Admin > settings > license page.
265 ; New generated token value can be found in Admin > settings > license page.
335 license_token =
266 license_token =
336
267
337 ; This flag hides sensitive information on the license page such as token, and license data
268 ; This flag hides sensitive information on the license page such as token, and license data
338 license.hide_license_info = false
269 license.hide_license_info = false
339
270
340 ; supervisor connection uri, for managing supervisor and logs.
271 ; supervisor connection uri, for managing supervisor and logs.
341 supervisor.uri =
272 supervisor.uri =
342
273
343 ; supervisord group name/id we only want this RC instance to handle
274 ; supervisord group name/id we only want this RC instance to handle
344 supervisor.group_id = dev
275 supervisor.group_id = dev
345
276
346 ; Display extended labs settings
277 ; Display extended labs settings
347 labs_settings_active = true
278 labs_settings_active = true
348
279
349 ; Custom exception store path, defaults to TMPDIR
280 ; Custom exception store path, defaults to TMPDIR
350 ; This is used to store exception from RhodeCode in shared directory
281 ; This is used to store exception from RhodeCode in shared directory
351 #exception_tracker.store_path =
282 #exception_tracker.store_path =
352
283
353 ; Send email with exception details when it happens
284 ; Send email with exception details when it happens
354 #exception_tracker.send_email = false
285 #exception_tracker.send_email = false
355
286
356 ; Comma separated list of recipients for exception emails,
287 ; Comma separated list of recipients for exception emails,
357 ; e.g admin@rhodecode.com,devops@rhodecode.com
288 ; e.g admin@rhodecode.com,devops@rhodecode.com
358 ; Can be left empty, then emails will be sent to ALL super-admins
289 ; Can be left empty, then emails will be sent to ALL super-admins
359 #exception_tracker.send_email_recipients =
290 #exception_tracker.send_email_recipients =
360
291
361 ; optional prefix to Add to email Subject
292 ; optional prefix to Add to email Subject
362 #exception_tracker.email_prefix = [RHODECODE ERROR]
293 #exception_tracker.email_prefix = [RHODECODE ERROR]
363
294
364 ; File store configuration. This is used to store and serve uploaded files
295 ; File store configuration. This is used to store and serve uploaded files
365 file_store.enabled = true
296 file_store.enabled = true
366
297
367 ; Storage backend, available options are: local
298 ; Storage backend, available options are: local
368 file_store.backend = local
299 file_store.backend = local
369
300
370 ; path to store the uploaded binaries
301 ; path to store the uploaded binaries
371 file_store.storage_path = %(here)s/data/file_store
302 file_store.storage_path = %(here)s/data/file_store
372
303
304 ; Uncomment and set this path to control settings for archive download cache.
305 ; Generated repo archives will be cached at this location
306 ; and served from the cache during subsequent requests for the same archive of
307 ; the repository. This path is important to be shared across filesystems and with
308 ; RhodeCode and vcsserver
309
310 ; Default is $cache_dir/archive_cache if not set
311 archive_cache.store_dir = %(here)s/data/archive_cache
312
313 ; The limit in GB sets how much data we cache before recycling last used, defaults to 10 gb
314 archive_cache.cache_size_gb = 10
315
316 ; By default cache uses sharding technique, this specifies how many shards are there
317 archive_cache.cache_shards = 10
373
318
374 ; #############
319 ; #############
375 ; CELERY CONFIG
320 ; CELERY CONFIG
376 ; #############
321 ; #############
377
322
378 ; manually run celery: /path/to/celery worker -E --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
323 ; manually run celery: /path/to/celery worker --task-events --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
379
324
380 use_celery = false
325 use_celery = false
381
326
327 ; path to store schedule database
328 #celerybeat-schedule.path =
329
382 ; connection url to the message broker (default redis)
330 ; connection url to the message broker (default redis)
383 celery.broker_url = redis://localhost:6379/8
331 celery.broker_url = redis://redis:6379/8
332
333 ; results backend to get results for (default redis)
334 celery.result_backend = redis://redis:6379/8
384
335
385 ; rabbitmq example
336 ; rabbitmq example
386 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
337 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
387
338
388 ; maximum tasks to execute before worker restart
339 ; maximum tasks to execute before worker restart
389 celery.max_tasks_per_child = 100
340 celery.max_tasks_per_child = 20
390
341
391 ; tasks will never be sent to the queue, but executed locally instead.
342 ; tasks will never be sent to the queue, but executed locally instead.
392 celery.task_always_eager = false
343 celery.task_always_eager = false
393
344
394 ; #############
345 ; #############
395 ; DOGPILE CACHE
346 ; DOGPILE CACHE
396 ; #############
347 ; #############
397
348
398 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
349 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
399 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
350 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
400 cache_dir = %(here)s/data
351 cache_dir = %(here)s/data
401
352
402 ; *********************************************
353 ; *********************************************
403 ; `sql_cache_short` cache for heavy SQL queries
354 ; `sql_cache_short` cache for heavy SQL queries
404 ; Only supported backend is `memory_lru`
355 ; Only supported backend is `memory_lru`
405 ; *********************************************
356 ; *********************************************
406 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
357 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
407 rc_cache.sql_cache_short.expiration_time = 30
358 rc_cache.sql_cache_short.expiration_time = 30
408
359
409
360
410 ; *****************************************************
361 ; *****************************************************
411 ; `cache_repo_longterm` cache for repo object instances
362 ; `cache_repo_longterm` cache for repo object instances
412 ; Only supported backend is `memory_lru`
363 ; Only supported backend is `memory_lru`
413 ; *****************************************************
364 ; *****************************************************
414 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
365 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
415 ; by default we use 30 Days, cache is still invalidated on push
366 ; by default we use 30 Days, cache is still invalidated on push
416 rc_cache.cache_repo_longterm.expiration_time = 2592000
367 rc_cache.cache_repo_longterm.expiration_time = 2592000
417 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
368 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
418 rc_cache.cache_repo_longterm.max_size = 10000
369 rc_cache.cache_repo_longterm.max_size = 10000
419
370
420
371
372 ; *********************************************
373 ; `cache_general` cache for general purpose use
374 ; for simplicity use rc.file_namespace backend,
375 ; for performance and scale use rc.redis
376 ; *********************************************
377 rc_cache.cache_general.backend = dogpile.cache.rc.file_namespace
378 rc_cache.cache_general.expiration_time = 43200
379 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
380 #rc_cache.cache_general.arguments.filename = /tmp/cache_general_db
381
382 ; alternative `cache_general` redis backend with distributed lock
383 #rc_cache.cache_general.backend = dogpile.cache.rc.redis
384 #rc_cache.cache_general.expiration_time = 300
385
386 ; redis_expiration_time needs to be greater then expiration_time
387 #rc_cache.cache_general.arguments.redis_expiration_time = 7200
388
389 #rc_cache.cache_general.arguments.host = localhost
390 #rc_cache.cache_general.arguments.port = 6379
391 #rc_cache.cache_general.arguments.db = 0
392 #rc_cache.cache_general.arguments.socket_timeout = 30
393 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
394 #rc_cache.cache_general.arguments.distributed_lock = true
395
396 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
397 #rc_cache.cache_general.arguments.lock_auto_renewal = true
398
421 ; *************************************************
399 ; *************************************************
422 ; `cache_perms` cache for permission tree, auth TTL
400 ; `cache_perms` cache for permission tree, auth TTL
401 ; for simplicity use rc.file_namespace backend,
402 ; for performance and scale use rc.redis
423 ; *************************************************
403 ; *************************************************
424 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
404 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
425 rc_cache.cache_perms.expiration_time = 300
405 rc_cache.cache_perms.expiration_time = 3600
426 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
406 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
427 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
407 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms_db
428
408
429 ; alternative `cache_perms` redis backend with distributed lock
409 ; alternative `cache_perms` redis backend with distributed lock
430 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
410 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
431 #rc_cache.cache_perms.expiration_time = 300
411 #rc_cache.cache_perms.expiration_time = 300
432
412
433 ; redis_expiration_time needs to be greater then expiration_time
413 ; redis_expiration_time needs to be greater then expiration_time
434 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
414 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
435
415
436 #rc_cache.cache_perms.arguments.host = localhost
416 #rc_cache.cache_perms.arguments.host = localhost
437 #rc_cache.cache_perms.arguments.port = 6379
417 #rc_cache.cache_perms.arguments.port = 6379
438 #rc_cache.cache_perms.arguments.db = 0
418 #rc_cache.cache_perms.arguments.db = 0
439 #rc_cache.cache_perms.arguments.socket_timeout = 30
419 #rc_cache.cache_perms.arguments.socket_timeout = 30
440 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
420 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
441 #rc_cache.cache_perms.arguments.distributed_lock = true
421 #rc_cache.cache_perms.arguments.distributed_lock = true
442
422
423 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
424 #rc_cache.cache_perms.arguments.lock_auto_renewal = true
443
425
444 ; ***************************************************
426 ; ***************************************************
445 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
427 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
428 ; for simplicity use rc.file_namespace backend,
429 ; for performance and scale use rc.redis
446 ; ***************************************************
430 ; ***************************************************
447 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
431 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
448 rc_cache.cache_repo.expiration_time = 2592000
432 rc_cache.cache_repo.expiration_time = 2592000
449 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
433 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
450 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
434 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo_db
451
435
452 ; alternative `cache_repo` redis backend with distributed lock
436 ; alternative `cache_repo` redis backend with distributed lock
453 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
437 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
454 #rc_cache.cache_repo.expiration_time = 2592000
438 #rc_cache.cache_repo.expiration_time = 2592000
455
439
456 ; redis_expiration_time needs to be greater then expiration_time
440 ; redis_expiration_time needs to be greater then expiration_time
457 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
441 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
458
442
459 #rc_cache.cache_repo.arguments.host = localhost
443 #rc_cache.cache_repo.arguments.host = localhost
460 #rc_cache.cache_repo.arguments.port = 6379
444 #rc_cache.cache_repo.arguments.port = 6379
461 #rc_cache.cache_repo.arguments.db = 1
445 #rc_cache.cache_repo.arguments.db = 1
462 #rc_cache.cache_repo.arguments.socket_timeout = 30
446 #rc_cache.cache_repo.arguments.socket_timeout = 30
463 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
447 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
464 #rc_cache.cache_repo.arguments.distributed_lock = true
448 #rc_cache.cache_repo.arguments.distributed_lock = true
465
449
450 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
451 #rc_cache.cache_repo.arguments.lock_auto_renewal = true
466
452
467 ; ##############
453 ; ##############
468 ; BEAKER SESSION
454 ; BEAKER SESSION
469 ; ##############
455 ; ##############
470
456
471 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
457 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
472 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
458 ; types are file, ext:redis, ext:database, ext:memcached
473 ; Fastest ones are Redis and ext:database
459 ; Fastest ones are ext:redis and ext:database, DO NOT use memory type for session
474 beaker.session.type = file
460 beaker.session.type = file
475 beaker.session.data_dir = %(here)s/data/sessions
461 beaker.session.data_dir = %(here)s/data/sessions
476
462
477 ; Redis based sessions
463 ; Redis based sessions
478 #beaker.session.type = ext:redis
464 #beaker.session.type = ext:redis
479 #beaker.session.url = redis://127.0.0.1:6379/2
465 #beaker.session.url = redis://127.0.0.1:6379/2
480
466
481 ; DB based session, fast, and allows easy management over logged in users
467 ; DB based session, fast, and allows easy management over logged in users
482 #beaker.session.type = ext:database
468 #beaker.session.type = ext:database
483 #beaker.session.table_name = db_session
469 #beaker.session.table_name = db_session
484 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
470 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
485 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
471 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
486 #beaker.session.sa.pool_recycle = 3600
472 #beaker.session.sa.pool_recycle = 3600
487 #beaker.session.sa.echo = false
473 #beaker.session.sa.echo = false
488
474
489 beaker.session.key = rhodecode
475 beaker.session.key = rhodecode
490 beaker.session.secret = develop-rc-uytcxaz
476 beaker.session.secret = develop-rc-uytcxaz
491 beaker.session.lock_dir = %(here)s/data/sessions/lock
477 beaker.session.lock_dir = %(here)s/data/sessions/lock
492
478
493 ; Secure encrypted cookie. Requires AES and AES python libraries
479 ; Secure encrypted cookie. Requires AES and AES python libraries
494 ; you must disable beaker.session.secret to use this
480 ; you must disable beaker.session.secret to use this
495 #beaker.session.encrypt_key = key_for_encryption
481 #beaker.session.encrypt_key = key_for_encryption
496 #beaker.session.validate_key = validation_key
482 #beaker.session.validate_key = validation_key
497
483
498 ; Sets session as invalid (also logging out user) if it haven not been
484 ; Sets session as invalid (also logging out user) if it haven not been
499 ; accessed for given amount of time in seconds
485 ; accessed for given amount of time in seconds
500 beaker.session.timeout = 2592000
486 beaker.session.timeout = 2592000
501 beaker.session.httponly = true
487 beaker.session.httponly = true
502
488
503 ; Path to use for the cookie. Set to prefix if you use prefix middleware
489 ; Path to use for the cookie. Set to prefix if you use prefix middleware
504 #beaker.session.cookie_path = /custom_prefix
490 #beaker.session.cookie_path = /custom_prefix
505
491
506 ; Set https secure cookie
492 ; Set https secure cookie
507 beaker.session.secure = false
493 beaker.session.secure = false
508
494
509 ; default cookie expiration time in seconds, set to `true` to set expire
495 ; default cookie expiration time in seconds, set to `true` to set expire
510 ; at browser close
496 ; at browser close
511 #beaker.session.cookie_expires = 3600
497 #beaker.session.cookie_expires = 3600
512
498
513 ; #############################
499 ; #############################
514 ; SEARCH INDEXING CONFIGURATION
500 ; SEARCH INDEXING CONFIGURATION
515 ; #############################
501 ; #############################
516
502
517 ; Full text search indexer is available in rhodecode-tools under
503 ; Full text search indexer is available in rhodecode-tools under
518 ; `rhodecode-tools index` command
504 ; `rhodecode-tools index` command
519
505
520 ; WHOOSH Backend, doesn't require additional services to run
506 ; WHOOSH Backend, doesn't require additional services to run
521 ; it works good with few dozen repos
507 ; it works good with few dozen repos
522 search.module = rhodecode.lib.index.whoosh
508 search.module = rhodecode.lib.index.whoosh
523 search.location = %(here)s/data/index
509 search.location = %(here)s/data/index
524
510
525 ; ####################
511 ; ####################
526 ; CHANNELSTREAM CONFIG
512 ; CHANNELSTREAM CONFIG
527 ; ####################
513 ; ####################
528
514
529 ; channelstream enables persistent connections and live notification
515 ; channelstream enables persistent connections and live notification
530 ; in the system. It's also used by the chat system
516 ; in the system. It's also used by the chat system
531
517
532 channelstream.enabled = false
518 channelstream.enabled = false
533
519
534 ; server address for channelstream server on the backend
520 ; server address for channelstream server on the backend
535 channelstream.server = 127.0.0.1:9800
521 channelstream.server = 127.0.0.1:9800
536
522
537 ; location of the channelstream server from outside world
523 ; location of the channelstream server from outside world
538 ; use ws:// for http or wss:// for https. This address needs to be handled
524 ; use ws:// for http or wss:// for https. This address needs to be handled
539 ; by external HTTP server such as Nginx or Apache
525 ; by external HTTP server such as Nginx or Apache
540 ; see Nginx/Apache configuration examples in our docs
526 ; see Nginx/Apache configuration examples in our docs
541 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
527 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
542 channelstream.secret = secret
528 channelstream.secret = secret
543 channelstream.history.location = %(here)s/channelstream_history
529 channelstream.history.location = %(here)s/channelstream_history
544
530
545 ; Internal application path that Javascript uses to connect into.
531 ; Internal application path that Javascript uses to connect into.
546 ; If you use proxy-prefix the prefix should be added before /_channelstream
532 ; If you use proxy-prefix the prefix should be added before /_channelstream
547 channelstream.proxy_path = /_channelstream
533 channelstream.proxy_path = /_channelstream
548
534
549
535
550 ; ##############################
536 ; ##############################
551 ; MAIN RHODECODE DATABASE CONFIG
537 ; MAIN RHODECODE DATABASE CONFIG
552 ; ##############################
538 ; ##############################
553
539
554 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
540 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
555 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
541 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
556 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
542 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
557 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
543 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
558 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
544 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
559
545
560 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
546 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
561
547
562 ; see sqlalchemy docs for other advanced settings
548 ; see sqlalchemy docs for other advanced settings
563 ; print the sql statements to output
549 ; print the sql statements to output
564 sqlalchemy.db1.echo = false
550 sqlalchemy.db1.echo = false
565
551
566 ; recycle the connections after this amount of seconds
552 ; recycle the connections after this amount of seconds
567 sqlalchemy.db1.pool_recycle = 3600
553 sqlalchemy.db1.pool_recycle = 3600
568 sqlalchemy.db1.convert_unicode = true
569
554
570 ; the number of connections to keep open inside the connection pool.
555 ; the number of connections to keep open inside the connection pool.
571 ; 0 indicates no limit
556 ; 0 indicates no limit
557 ; the general calculus with gevent is:
558 ; if your system allows 500 concurrent greenlets (max_connections) that all do database access,
559 ; then increase pool size + max overflow so that they add up to 500.
572 #sqlalchemy.db1.pool_size = 5
560 #sqlalchemy.db1.pool_size = 5
573
561
574 ; The number of connections to allow in connection pool "overflow", that is
562 ; The number of connections to allow in connection pool "overflow", that is
575 ; connections that can be opened above and beyond the pool_size setting,
563 ; connections that can be opened above and beyond the pool_size setting,
576 ; which defaults to five.
564 ; which defaults to five.
577 #sqlalchemy.db1.max_overflow = 10
565 #sqlalchemy.db1.max_overflow = 10
578
566
579 ; Connection check ping, used to detect broken database connections
567 ; Connection check ping, used to detect broken database connections
580 ; could be enabled to better handle cases if MySQL has gone away errors
568 ; could be enabled to better handle cases if MySQL has gone away errors
581 #sqlalchemy.db1.ping_connection = true
569 #sqlalchemy.db1.ping_connection = true
582
570
583 ; ##########
571 ; ##########
584 ; VCS CONFIG
572 ; VCS CONFIG
585 ; ##########
573 ; ##########
586 vcs.server.enable = true
574 vcs.server.enable = true
587 vcs.server = localhost:9900
575 vcs.server = localhost:9900
588
576
589 ; Web server connectivity protocol, responsible for web based VCS operations
577 ; Web server connectivity protocol, responsible for web based VCS operations
590 ; Available protocols are:
578 ; Available protocols are:
591 ; `http` - use http-rpc backend (default)
579 ; `http` - use http-rpc backend (default)
592 vcs.server.protocol = http
580 vcs.server.protocol = http
593
581
594 ; Push/Pull operations protocol, available options are:
582 ; Push/Pull operations protocol, available options are:
595 ; `http` - use http-rpc backend (default)
583 ; `http` - use http-rpc backend (default)
596 vcs.scm_app_implementation = http
584 vcs.scm_app_implementation = http
597
585
598 ; Push/Pull operations hooks protocol, available options are:
586 ; Push/Pull operations hooks protocol, available options are:
599 ; `http` - use http-rpc backend (default)
587 ; `http` - use http-rpc backend (default)
600 vcs.hooks.protocol = http
588 vcs.hooks.protocol = http
601
589
602 ; Host on which this instance is listening for hooks. If vcsserver is in other location
590 ; Host on which this instance is listening for hooks. vcsserver will call this host to pull/push hooks so it should be
603 ; this should be adjusted.
591 ; accessible via network.
604 vcs.hooks.host = 127.0.0.1
592 ; Use vcs.hooks.host = "*" to bind to current hostname (for Docker)
593 vcs.hooks.host = *
605
594
606 ; Start VCSServer with this instance as a subprocess, useful for development
595 ; Start VCSServer with this instance as a subprocess, useful for development
607 vcs.start_server = false
596 vcs.start_server = false
608
597
609 ; List of enabled VCS backends, available options are:
598 ; List of enabled VCS backends, available options are:
610 ; `hg` - mercurial
599 ; `hg` - mercurial
611 ; `git` - git
600 ; `git` - git
612 ; `svn` - subversion
601 ; `svn` - subversion
613 vcs.backends = hg, git, svn
602 vcs.backends = hg, git, svn
614
603
615 ; Wait this number of seconds before killing connection to the vcsserver
604 ; Wait this number of seconds before killing connection to the vcsserver
616 vcs.connection_timeout = 3600
605 vcs.connection_timeout = 3600
617
606
618 ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
607 ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
619 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
608 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
620 ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
609 ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
621 #vcs.svn.compatible_version = 1.8
610 #vcs.svn.compatible_version = 1.8
622
611
612 ; Cache flag to cache vcsserver remote calls locally
613 ; It uses cache_region `cache_repo`
614 vcs.methods.cache = true
623
615
624 ; ####################################################
616 ; ####################################################
625 ; Subversion proxy support (mod_dav_svn)
617 ; Subversion proxy support (mod_dav_svn)
626 ; Maps RhodeCode repo groups into SVN paths for Apache
618 ; Maps RhodeCode repo groups into SVN paths for Apache
627 ; ####################################################
619 ; ####################################################
628
620
629 ; Enable or disable the config file generation.
621 ; Enable or disable the config file generation.
630 svn.proxy.generate_config = false
622 svn.proxy.generate_config = false
631
623
632 ; Generate config file with `SVNListParentPath` set to `On`.
624 ; Generate config file with `SVNListParentPath` set to `On`.
633 svn.proxy.list_parent_path = true
625 svn.proxy.list_parent_path = true
634
626
635 ; Set location and file name of generated config file.
627 ; Set location and file name of generated config file.
636 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
628 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
637
629
638 ; alternative mod_dav config template. This needs to be a valid mako template
630 ; alternative mod_dav config template. This needs to be a valid mako template
639 ; Example template can be found in the source code:
631 ; Example template can be found in the source code:
640 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
632 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
641 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
633 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
642
634
643 ; Used as a prefix to the `Location` block in the generated config file.
635 ; Used as a prefix to the `Location` block in the generated config file.
644 ; In most cases it should be set to `/`.
636 ; In most cases it should be set to `/`.
645 svn.proxy.location_root = /
637 svn.proxy.location_root = /
646
638
647 ; Command to reload the mod dav svn configuration on change.
639 ; Command to reload the mod dav svn configuration on change.
648 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
640 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
649 ; Make sure user who runs RhodeCode process is allowed to reload Apache
641 ; Make sure user who runs RhodeCode process is allowed to reload Apache
650 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
642 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
651
643
652 ; If the timeout expires before the reload command finishes, the command will
644 ; If the timeout expires before the reload command finishes, the command will
653 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
645 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
654 #svn.proxy.reload_timeout = 10
646 #svn.proxy.reload_timeout = 10
655
647
656 ; ####################
648 ; ####################
657 ; SSH Support Settings
649 ; SSH Support Settings
658 ; ####################
650 ; ####################
659
651
660 ; Defines if a custom authorized_keys file should be created and written on
652 ; Defines if a custom authorized_keys file should be created and written on
661 ; any change user ssh keys. Setting this to false also disables possibility
653 ; any change user ssh keys. Setting this to false also disables possibility
662 ; of adding SSH keys by users from web interface. Super admins can still
654 ; of adding SSH keys by users from web interface. Super admins can still
663 ; manage SSH Keys.
655 ; manage SSH Keys.
664 ssh.generate_authorized_keyfile = false
656 ssh.generate_authorized_keyfile = false
665
657
666 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
658 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
667 # ssh.authorized_keys_ssh_opts =
659 # ssh.authorized_keys_ssh_opts =
668
660
669 ; Path to the authorized_keys file where the generate entries are placed.
661 ; Path to the authorized_keys file where the generate entries are placed.
670 ; It is possible to have multiple key files specified in `sshd_config` e.g.
662 ; It is possible to have multiple key files specified in `sshd_config` e.g.
671 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
663 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
672 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
664 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
673
665
674 ; Command to execute the SSH wrapper. The binary is available in the
666 ; Command to execute the SSH wrapper. The binary is available in the
675 ; RhodeCode installation directory.
667 ; RhodeCode installation directory.
676 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
668 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
677 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
669 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
678
670
679 ; Allow shell when executing the ssh-wrapper command
671 ; Allow shell when executing the ssh-wrapper command
680 ssh.wrapper_cmd_allow_shell = false
672 ssh.wrapper_cmd_allow_shell = false
681
673
682 ; Enables logging, and detailed output send back to the client during SSH
674 ; Enables logging, and detailed output send back to the client during SSH
683 ; operations. Useful for debugging, shouldn't be used in production.
675 ; operations. Useful for debugging, shouldn't be used in production.
684 ssh.enable_debug_logging = true
676 ssh.enable_debug_logging = true
685
677
686 ; Paths to binary executable, by default they are the names, but we can
678 ; Paths to binary executable, by default they are the names, but we can
687 ; override them if we want to use a custom one
679 ; override them if we want to use a custom one
688 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
680 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
689 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
681 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
690 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
682 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
691
683
692 ; Enables SSH key generator web interface. Disabling this still allows users
684 ; Enables SSH key generator web interface. Disabling this still allows users
693 ; to add their own keys.
685 ; to add their own keys.
694 ssh.enable_ui_key_generator = true
686 ssh.enable_ui_key_generator = true
695
687
696
688
697 ; #################
689 ; #################
698 ; APPENLIGHT CONFIG
690 ; APPENLIGHT CONFIG
699 ; #################
691 ; #################
700
692
701 ; Appenlight is tailored to work with RhodeCode, see
693 ; Appenlight is tailored to work with RhodeCode, see
702 ; http://appenlight.rhodecode.com for details how to obtain an account
694 ; http://appenlight.rhodecode.com for details how to obtain an account
703
695
704 ; Appenlight integration enabled
696 ; Appenlight integration enabled
705 appenlight = false
697 #appenlight = false
706
698
707 appenlight.server_url = https://api.appenlight.com
699 #appenlight.server_url = https://api.appenlight.com
708 appenlight.api_key = YOUR_API_KEY
700 #appenlight.api_key = YOUR_API_KEY
709 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
701 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
710
702
711 ; used for JS client
703 ; used for JS client
712 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
704 #appenlight.api_public_key = YOUR_API_PUBLIC_KEY
713
705
714 ; TWEAK AMOUNT OF INFO SENT HERE
706 ; TWEAK AMOUNT OF INFO SENT HERE
715
707
716 ; enables 404 error logging (default False)
708 ; enables 404 error logging (default False)
717 appenlight.report_404 = false
709 #appenlight.report_404 = false
718
710
719 ; time in seconds after request is considered being slow (default 1)
711 ; time in seconds after request is considered being slow (default 1)
720 appenlight.slow_request_time = 1
712 #appenlight.slow_request_time = 1
721
713
722 ; record slow requests in application
714 ; record slow requests in application
723 ; (needs to be enabled for slow datastore recording and time tracking)
715 ; (needs to be enabled for slow datastore recording and time tracking)
724 appenlight.slow_requests = true
716 #appenlight.slow_requests = true
725
717
726 ; enable hooking to application loggers
718 ; enable hooking to application loggers
727 appenlight.logging = true
719 #appenlight.logging = true
728
720
729 ; minimum log level for log capture
721 ; minimum log level for log capture
730 appenlight.logging.level = WARNING
722 #ppenlight.logging.level = WARNING
731
723
732 ; send logs only from erroneous/slow requests
724 ; send logs only from erroneous/slow requests
733 ; (saves API quota for intensive logging)
725 ; (saves API quota for intensive logging)
734 appenlight.logging_on_error = false
726 #appenlight.logging_on_error = false
735
727
736 ; list of additional keywords that should be grabbed from environ object
728 ; list of additional keywords that should be grabbed from environ object
737 ; can be string with comma separated list of words in lowercase
729 ; can be string with comma separated list of words in lowercase
738 ; (by default client will always send following info:
730 ; (by default client will always send following info:
739 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
731 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
740 ; start with HTTP* this list be extended with additional keywords here
732 ; start with HTTP* this list be extended with additional keywords here
741 appenlight.environ_keys_whitelist =
733 #appenlight.environ_keys_whitelist =
742
734
743 ; list of keywords that should be blanked from request object
735 ; list of keywords that should be blanked from request object
744 ; can be string with comma separated list of words in lowercase
736 ; can be string with comma separated list of words in lowercase
745 ; (by default client will always blank keys that contain following words
737 ; (by default client will always blank keys that contain following words
746 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
738 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
747 ; this list be extended with additional keywords set here
739 ; this list be extended with additional keywords set here
748 appenlight.request_keys_blacklist =
740 #appenlight.request_keys_blacklist =
749
741
750 ; list of namespaces that should be ignores when gathering log entries
742 ; list of namespaces that should be ignores when gathering log entries
751 ; can be string with comma separated list of namespaces
743 ; can be string with comma separated list of namespaces
752 ; (by default the client ignores own entries: appenlight_client.client)
744 ; (by default the client ignores own entries: appenlight_client.client)
753 appenlight.log_namespace_blacklist =
745 #appenlight.log_namespace_blacklist =
746
747 ; Statsd client config, this is used to send metrics to statsd
748 ; We recommend setting statsd_exported and scrape them using Prometheus
749 #statsd.enabled = false
750 #statsd.statsd_host = 0.0.0.0
751 #statsd.statsd_port = 8125
752 #statsd.statsd_prefix =
753 #statsd.statsd_ipv6 = false
754
755 ; configure logging automatically at server startup set to false
756 ; to use the below custom logging config.
757 ; RC_LOGGING_FORMATTER
758 ; RC_LOGGING_LEVEL
759 ; env variables can control the settings for logging in case of autoconfigure
760
761 #logging.autoconfigure = true
762
763 ; specify your own custom logging config file to configure logging
764 #logging.logging_conf_file = /path/to/custom_logging.ini
754
765
755 ; Dummy marker to add new entries after.
766 ; Dummy marker to add new entries after.
756 ; Add any custom entries below. Please don't remove this marker.
767 ; Add any custom entries below. Please don't remove this marker.
757 custom.conf = 1
768 custom.conf = 1
758
769
759
770
760 ; #####################
771 ; #####################
761 ; LOGGING CONFIGURATION
772 ; LOGGING CONFIGURATION
762 ; #####################
773 ; #####################
774
763 [loggers]
775 [loggers]
764 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
776 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
765
777
766 [handlers]
778 [handlers]
767 keys = console, console_sql
779 keys = console, console_sql
768
780
769 [formatters]
781 [formatters]
770 keys = generic, color_formatter, color_formatter_sql
782 keys = generic, json, color_formatter, color_formatter_sql
771
783
772 ; #######
784 ; #######
773 ; LOGGERS
785 ; LOGGERS
774 ; #######
786 ; #######
775 [logger_root]
787 [logger_root]
776 level = NOTSET
788 level = NOTSET
777 handlers = console
789 handlers = console
778
790
779 [logger_sqlalchemy]
791 [logger_sqlalchemy]
780 level = INFO
792 level = INFO
781 handlers = console_sql
793 handlers = console_sql
782 qualname = sqlalchemy.engine
794 qualname = sqlalchemy.engine
783 propagate = 0
795 propagate = 0
784
796
785 [logger_beaker]
797 [logger_beaker]
786 level = DEBUG
798 level = DEBUG
787 handlers =
799 handlers =
788 qualname = beaker.container
800 qualname = beaker.container
789 propagate = 1
801 propagate = 1
790
802
791 [logger_rhodecode]
803 [logger_rhodecode]
792 level = DEBUG
804 level = DEBUG
793 handlers =
805 handlers =
794 qualname = rhodecode
806 qualname = rhodecode
795 propagate = 1
807 propagate = 1
796
808
797 [logger_ssh_wrapper]
809 [logger_ssh_wrapper]
798 level = DEBUG
810 level = DEBUG
799 handlers =
811 handlers =
800 qualname = ssh_wrapper
812 qualname = ssh_wrapper
801 propagate = 1
813 propagate = 1
802
814
803 [logger_celery]
815 [logger_celery]
804 level = DEBUG
816 level = DEBUG
805 handlers =
817 handlers =
806 qualname = celery
818 qualname = celery
807
819
808
820
809 ; ########
821 ; ########
810 ; HANDLERS
822 ; HANDLERS
811 ; ########
823 ; ########
812
824
813 [handler_console]
825 [handler_console]
814 class = StreamHandler
826 class = StreamHandler
815 args = (sys.stderr, )
827 args = (sys.stderr, )
816 level = DEBUG
828 level = DEBUG
829 ; To enable JSON formatted logs replace 'generic/color_formatter' with 'json'
830 ; This allows sending properly formatted logs to grafana loki or elasticsearch
817 formatter = color_formatter
831 formatter = color_formatter
818
832
819 [handler_console_sql]
833 [handler_console_sql]
820 ; "level = DEBUG" logs SQL queries and results.
834 ; "level = DEBUG" logs SQL queries and results.
821 ; "level = INFO" logs SQL queries.
835 ; "level = INFO" logs SQL queries.
822 ; "level = WARN" logs neither. (Recommended for production systems.)
836 ; "level = WARN" logs neither. (Recommended for production systems.)
823 class = StreamHandler
837 class = StreamHandler
824 args = (sys.stderr, )
838 args = (sys.stderr, )
825 level = WARN
839 level = WARN
840 ; To enable JSON formatted logs replace 'generic/color_formatter_sql' with 'json'
841 ; This allows sending properly formatted logs to grafana loki or elasticsearch
826 formatter = color_formatter_sql
842 formatter = color_formatter_sql
827
843
828 ; ##########
844 ; ##########
829 ; FORMATTERS
845 ; FORMATTERS
830 ; ##########
846 ; ##########
831
847
832 [formatter_generic]
848 [formatter_generic]
833 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
849 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
834 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
850 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
835 datefmt = %Y-%m-%d %H:%M:%S
851 datefmt = %Y-%m-%d %H:%M:%S
836
852
837 [formatter_color_formatter]
853 [formatter_color_formatter]
838 class = rhodecode.lib.logging_formatter.ColorFormatter
854 class = rhodecode.lib.logging_formatter.ColorFormatter
839 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
855 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
840 datefmt = %Y-%m-%d %H:%M:%S
856 datefmt = %Y-%m-%d %H:%M:%S
841
857
842 [formatter_color_formatter_sql]
858 [formatter_color_formatter_sql]
843 class = rhodecode.lib.logging_formatter.ColorFormatterSql
859 class = rhodecode.lib.logging_formatter.ColorFormatterSql
844 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
860 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
845 datefmt = %Y-%m-%d %H:%M:%S
861 datefmt = %Y-%m-%d %H:%M:%S
862
863 [formatter_json]
864 format = %(timestamp)s %(levelname)s %(name)s %(message)s %(req_id)s
865 class = rhodecode.lib._vendor.jsonlogger.JsonFormatter
@@ -1,265 +1,520 b''
1 """
1 """
2 Gunicorn config extension and hooks. This config file adds some extra settings and memory management.
2 Gunicorn config extension and hooks. This config file adds some extra settings and memory management.
3 Gunicorn configuration should be managed by .ini files entries of RhodeCode or VCSServer
3 Gunicorn configuration should be managed by .ini files entries of RhodeCode or VCSServer
4 """
4 """
5
5
6 import gc
6 import gc
7 import os
7 import os
8 import sys
8 import sys
9 import math
9 import math
10 import time
10 import time
11 import threading
11 import threading
12 import traceback
12 import traceback
13 import random
13 import random
14 import socket
15 import dataclasses
14 from gunicorn.glogging import Logger
16 from gunicorn.glogging import Logger
15
17
16
18
17 def get_workers():
19 def get_workers():
18 import multiprocessing
20 import multiprocessing
19 return multiprocessing.cpu_count() * 2 + 1
21 return multiprocessing.cpu_count() * 2 + 1
20
22
21 # GLOBAL
23
24 bind = "127.0.0.1:10020"
25
26
27 # Error logging output for gunicorn (-) is stdout
22 errorlog = '-'
28 errorlog = '-'
29
30 # Access logging output for gunicorn (-) is stdout
23 accesslog = '-'
31 accesslog = '-'
24
32
25
33
26 # SERVER MECHANICS
34 # SERVER MECHANICS
27 # None == system temp dir
35 # None == system temp dir
28 # worker_tmp_dir is recommended to be set to some tmpfs
36 # worker_tmp_dir is recommended to be set to some tmpfs
29 worker_tmp_dir = None
37 worker_tmp_dir = None
30 tmp_upload_dir = None
38 tmp_upload_dir = None
31
39
40 # use re-use port logic
41 #reuse_port = True
42
32 # Custom log format
43 # Custom log format
44 #access_log_format = (
45 # '%(t)s %(p)s INFO [GNCRN] %(h)-15s rqt:%(L)s %(s)s %(b)-6s "%(m)s:%(U)s %(q)s" usr:%(u)s "%(f)s" "%(a)s"')
46
47 # loki format for easier parsing in grafana
33 access_log_format = (
48 access_log_format = (
34 '%(t)s %(p)s INFO [GNCRN] %(h)-15s rqt:%(L)s %(s)s %(b)-6s "%(m)s:%(U)s %(q)s" usr:%(u)s "%(f)s" "%(a)s"')
49 'time="%(t)s" pid=%(p)s level="INFO" type="[GNCRN]" ip="%(h)-15s" rqt="%(L)s" response_code="%(s)s" response_bytes="%(b)-6s" uri="%(m)s:%(U)s %(q)s" user=":%(u)s" user_agent="%(a)s"')
50
51 # self adjust workers based on CPU count, to use maximum of CPU and not overquota the resources
52 # workers = get_workers()
53
54 # Gunicorn access log level
55 loglevel = 'info'
56
57 # Process name visible in a process list
58 proc_name = 'rhodecode_enterprise'
59
60 # Type of worker class, one of `sync`, `gevent` or `gthread`
61 # currently `sync` is the only option allowed for vcsserver and for rhodecode all of 3 are allowed
62 # gevent:
63 # In this case, the maximum number of concurrent requests is (N workers * X worker_connections)
64 # e.g. workers =3 worker_connections=10 = 3*10, 30 concurrent requests can be handled
65 # gthread:
66 # In this case, the maximum number of concurrent requests is (N workers * X threads)
67 # e.g. workers = 3 threads=3 = 3*3, 9 concurrent requests can be handled
68 worker_class = 'gthread'
69
70 # Sets the number of process workers. More workers means more concurrent connections
71 # RhodeCode can handle at the same time. Each additional worker also it increases
72 # memory usage as each has its own set of caches.
73 # The Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
74 # than 8-10 unless for huge deployments .e.g 700-1000 users.
75 # `instance_id = *` must be set in the [app:main] section below (which is the default)
76 # when using more than 1 worker.
77 workers = 2
78
79 # Threads numbers for worker class gthread
80 threads = 1
81
82 # The maximum number of simultaneous clients. Valid only for gevent
83 # In this case, the maximum number of concurrent requests is (N workers * X worker_connections)
84 # e.g workers =3 worker_connections=10 = 3*10, 30 concurrent requests can be handled
85 worker_connections = 10
86
87 # Max number of requests that worker will handle before being gracefully restarted.
88 # Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
89 max_requests = 2000
90 max_requests_jitter = int(max_requests * 0.2) # 20% of max_requests
91
92 # The maximum number of pending connections.
93 # Exceeding this number results in the client getting an error when attempting to connect.
94 backlog = 64
35
95
36 # self adjust workers based on CPU count
96 # The Amount of time a worker can spend with handling a request before it
37 # workers = get_workers()
97 # gets killed and restarted. By default, set to 21600 (6hrs)
98 # Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
99 timeout = 21600
100
101 # The maximum size of HTTP request line in bytes.
102 # 0 for unlimited
103 limit_request_line = 0
104
105 # Limit the number of HTTP headers fields in a request.
106 # By default this value is 100 and can't be larger than 32768.
107 limit_request_fields = 32768
108
109 # Limit the allowed size of an HTTP request header field.
110 # Value is a positive number or 0.
111 # Setting it to 0 will allow unlimited header field sizes.
112 limit_request_field_size = 0
113
114 # Timeout for graceful workers restart.
115 # After receiving a restart signal, workers have this much time to finish
116 # serving requests. Workers still alive after the timeout (starting from the
117 # receipt of the restart signal) are force killed.
118 # Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
119 graceful_timeout = 21600
120
121 # The number of seconds to wait for requests on a Keep-Alive connection.
122 # Generally set in the 1-5 seconds range.
123 keepalive = 2
124
125 # Maximum memory usage that each worker can use before it will receive a
126 # graceful restart signal 0 = memory monitoring is disabled
127 # Examples: 268435456 (256MB), 536870912 (512MB)
128 # 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
129 # Dynamic formula 1024 * 1024 * 256 == 256MBs
130 memory_max_usage = 0
131
132 # How often in seconds to check for memory usage for each gunicorn worker
133 memory_usage_check_interval = 60
134
135 # Threshold value for which we don't recycle worker if GarbageCollection
136 # frees up enough resources. Before each restart, we try to run GC on worker
137 # in case we get enough free memory after that; restart will not happen.
138 memory_usage_recovery_threshold = 0.8
139
140
141 @dataclasses.dataclass
142 class MemoryCheckConfig:
143 max_usage: int
144 check_interval: int
145 recovery_threshold: float
38
146
39
147
40 def _get_process_rss(pid=None):
148 def _get_process_rss(pid=None):
41 try:
149 try:
42 import psutil
150 import psutil
43 if pid:
151 if pid:
44 proc = psutil.Process(pid)
152 proc = psutil.Process(pid)
45 else:
153 else:
46 proc = psutil.Process()
154 proc = psutil.Process()
47 return proc.memory_info().rss
155 return proc.memory_info().rss
48 except Exception:
156 except Exception:
49 return None
157 return None
50
158
51
159
52 def _get_config(ini_path):
160 def _get_config(ini_path):
161 import configparser
53
162
54 try:
163 try:
55 import configparser
56 except ImportError:
57 import ConfigParser as configparser
58 try:
59 config = configparser.RawConfigParser()
164 config = configparser.RawConfigParser()
60 config.read(ini_path)
165 config.read(ini_path)
61 return config
166 return config
62 except Exception:
167 except Exception:
63 return None
168 return None
64
169
65
170
66 def _time_with_offset(memory_usage_check_interval):
171 def get_memory_usage_params(config=None):
67 return time.time() - random.randint(0, memory_usage_check_interval/2.0)
172 # memory spec defaults
173 _memory_max_usage = memory_max_usage
174 _memory_usage_check_interval = memory_usage_check_interval
175 _memory_usage_recovery_threshold = memory_usage_recovery_threshold
176
177 if config:
178 ini_path = os.path.abspath(config)
179 conf = _get_config(ini_path)
180
181 section = 'server:main'
182 if conf and conf.has_section(section):
183
184 if conf.has_option(section, 'memory_max_usage'):
185 _memory_max_usage = conf.getint(section, 'memory_max_usage')
186
187 if conf.has_option(section, 'memory_usage_check_interval'):
188 _memory_usage_check_interval = conf.getint(section, 'memory_usage_check_interval')
189
190 if conf.has_option(section, 'memory_usage_recovery_threshold'):
191 _memory_usage_recovery_threshold = conf.getfloat(section, 'memory_usage_recovery_threshold')
192
193 _memory_max_usage = int(os.environ.get('RC_GUNICORN_MEMORY_MAX_USAGE', '')
194 or _memory_max_usage)
195 _memory_usage_check_interval = int(os.environ.get('RC_GUNICORN_MEMORY_USAGE_CHECK_INTERVAL', '')
196 or _memory_usage_check_interval)
197 _memory_usage_recovery_threshold = float(os.environ.get('RC_GUNICORN_MEMORY_USAGE_RECOVERY_THRESHOLD', '')
198 or _memory_usage_recovery_threshold)
199
200 return MemoryCheckConfig(_memory_max_usage, _memory_usage_check_interval, _memory_usage_recovery_threshold)
201
202
203 def _time_with_offset(check_interval):
204 return time.time() - random.randint(0, check_interval/2.0)
68
205
69
206
70 def pre_fork(server, worker):
207 def pre_fork(server, worker):
71 pass
208 pass
72
209
73
210
74 def post_fork(server, worker):
211 def post_fork(server, worker):
75
212
76 # memory spec defaults
213 memory_conf = get_memory_usage_params()
77 _memory_max_usage = 0
214 _memory_max_usage = memory_conf.max_usage
78 _memory_usage_check_interval = 60
215 _memory_usage_check_interval = memory_conf.check_interval
79 _memory_usage_recovery_threshold = 0.8
216 _memory_usage_recovery_threshold = memory_conf.recovery_threshold
80
81 ini_path = os.path.abspath(server.cfg.paste)
82 conf = _get_config(ini_path)
83
84 section = 'server:main'
85 if conf and conf.has_section(section):
86
217
87 if conf.has_option(section, 'memory_max_usage'):
218 worker._memory_max_usage = int(os.environ.get('RC_GUNICORN_MEMORY_MAX_USAGE', '')
88 _memory_max_usage = conf.getint(section, 'memory_max_usage')
219 or _memory_max_usage)
89
220 worker._memory_usage_check_interval = int(os.environ.get('RC_GUNICORN_MEMORY_USAGE_CHECK_INTERVAL', '')
90 if conf.has_option(section, 'memory_usage_check_interval'):
221 or _memory_usage_check_interval)
91 _memory_usage_check_interval = conf.getint(section, 'memory_usage_check_interval')
222 worker._memory_usage_recovery_threshold = float(os.environ.get('RC_GUNICORN_MEMORY_USAGE_RECOVERY_THRESHOLD', '')
92
223 or _memory_usage_recovery_threshold)
93 if conf.has_option(section, 'memory_usage_recovery_threshold'):
94 _memory_usage_recovery_threshold = conf.getfloat(section, 'memory_usage_recovery_threshold')
95
96 worker._memory_max_usage = _memory_max_usage
97 worker._memory_usage_check_interval = _memory_usage_check_interval
98 worker._memory_usage_recovery_threshold = _memory_usage_recovery_threshold
99
224
100 # register memory last check time, with some random offset so we don't recycle all
225 # register memory last check time, with some random offset so we don't recycle all
101 # at once
226 # at once
102 worker._last_memory_check_time = _time_with_offset(_memory_usage_check_interval)
227 worker._last_memory_check_time = _time_with_offset(_memory_usage_check_interval)
103
228
104 if _memory_max_usage:
229 if _memory_max_usage:
105 server.log.info("[%-10s] WORKER spawned with max memory set at %s", worker.pid,
230 server.log.info("pid=[%-10s] WORKER spawned with max memory set at %s", worker.pid,
106 _format_data_size(_memory_max_usage))
231 _format_data_size(_memory_max_usage))
107 else:
232 else:
108 server.log.info("[%-10s] WORKER spawned", worker.pid)
233 server.log.info("pid=[%-10s] WORKER spawned", worker.pid)
109
234
110
235
111 def pre_exec(server):
236 def pre_exec(server):
112 server.log.info("Forked child, re-executing.")
237 server.log.info("Forked child, re-executing.")
113
238
114
239
115 def on_starting(server):
240 def on_starting(server):
116 server_lbl = '{} {}'.format(server.proc_name, server.address)
241 server_lbl = '{} {}'.format(server.proc_name, server.address)
117 server.log.info("Server %s is starting.", server_lbl)
242 server.log.info("Server %s is starting.", server_lbl)
243 server.log.info('Config:')
244 server.log.info(f"\n{server.cfg}")
245 server.log.info(get_memory_usage_params())
118
246
119
247
120 def when_ready(server):
248 def when_ready(server):
121 server.log.info("Server %s is ready. Spawning workers", server)
249 server.log.info("Server %s is ready. Spawning workers", server)
122
250
123
251
124 def on_reload(server):
252 def on_reload(server):
125 pass
253 pass
126
254
127
255
128 def _format_data_size(size, unit="B", precision=1, binary=True):
256 def _format_data_size(size, unit="B", precision=1, binary=True):
129 """Format a number using SI units (kilo, mega, etc.).
257 """Format a number using SI units (kilo, mega, etc.).
130
258
131 ``size``: The number as a float or int.
259 ``size``: The number as a float or int.
132
260
133 ``unit``: The unit name in plural form. Examples: "bytes", "B".
261 ``unit``: The unit name in plural form. Examples: "bytes", "B".
134
262
135 ``precision``: How many digits to the right of the decimal point. Default
263 ``precision``: How many digits to the right of the decimal point. Default
136 is 1. 0 suppresses the decimal point.
264 is 1. 0 suppresses the decimal point.
137
265
138 ``binary``: If false, use base-10 decimal prefixes (kilo = K = 1000).
266 ``binary``: If false, use base-10 decimal prefixes (kilo = K = 1000).
139 If true, use base-2 binary prefixes (kibi = Ki = 1024).
267 If true, use base-2 binary prefixes (kibi = Ki = 1024).
140
268
141 ``full_name``: If false (default), use the prefix abbreviation ("k" or
269 ``full_name``: If false (default), use the prefix abbreviation ("k" or
142 "Ki"). If true, use the full prefix ("kilo" or "kibi"). If false,
270 "Ki"). If true, use the full prefix ("kilo" or "kibi"). If false,
143 use abbreviation ("k" or "Ki").
271 use abbreviation ("k" or "Ki").
144
272
145 """
273 """
146
274
147 if not binary:
275 if not binary:
148 base = 1000
276 base = 1000
149 multiples = ('', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
277 multiples = ('', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
150 else:
278 else:
151 base = 1024
279 base = 1024
152 multiples = ('', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi')
280 multiples = ('', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi')
153
281
154 sign = ""
282 sign = ""
155 if size > 0:
283 if size > 0:
156 m = int(math.log(size, base))
284 m = int(math.log(size, base))
157 elif size < 0:
285 elif size < 0:
158 sign = "-"
286 sign = "-"
159 size = -size
287 size = -size
160 m = int(math.log(size, base))
288 m = int(math.log(size, base))
161 else:
289 else:
162 m = 0
290 m = 0
163 if m > 8:
291 if m > 8:
164 m = 8
292 m = 8
165
293
166 if m == 0:
294 if m == 0:
167 precision = '%.0f'
295 precision = '%.0f'
168 else:
296 else:
169 precision = '%%.%df' % precision
297 precision = '%%.%df' % precision
170
298
171 size = precision % (size / math.pow(base, m))
299 size = precision % (size / math.pow(base, m))
172
300
173 return '%s%s %s%s' % (sign, size.strip(), multiples[m], unit)
301 return '%s%s %s%s' % (sign, size.strip(), multiples[m], unit)
174
302
175
303
176 def _check_memory_usage(worker):
304 def _check_memory_usage(worker):
177 memory_max_usage = worker._memory_max_usage
305 _memory_max_usage = worker._memory_max_usage
178 if not memory_max_usage:
306 if not _memory_max_usage:
179 return
307 return
180
308
181 memory_usage_check_interval = worker._memory_usage_check_interval
309 _memory_usage_check_interval = worker._memory_usage_check_interval
182 memory_usage_recovery_threshold = memory_max_usage * worker._memory_usage_recovery_threshold
310 _memory_usage_recovery_threshold = memory_max_usage * worker._memory_usage_recovery_threshold
183
311
184 elapsed = time.time() - worker._last_memory_check_time
312 elapsed = time.time() - worker._last_memory_check_time
185 if elapsed > memory_usage_check_interval:
313 if elapsed > _memory_usage_check_interval:
186 mem_usage = _get_process_rss()
314 mem_usage = _get_process_rss()
187 if mem_usage and mem_usage > memory_max_usage:
315 if mem_usage and mem_usage > _memory_max_usage:
188 worker.log.info(
316 worker.log.info(
189 "memory usage %s > %s, forcing gc",
317 "memory usage %s > %s, forcing gc",
190 _format_data_size(mem_usage), _format_data_size(memory_max_usage))
318 _format_data_size(mem_usage), _format_data_size(_memory_max_usage))
191 # Try to clean it up by forcing a full collection.
319 # Try to clean it up by forcing a full collection.
192 gc.collect()
320 gc.collect()
193 mem_usage = _get_process_rss()
321 mem_usage = _get_process_rss()
194 if mem_usage > memory_usage_recovery_threshold:
322 if mem_usage > _memory_usage_recovery_threshold:
195 # Didn't clean up enough, we'll have to terminate.
323 # Didn't clean up enough, we'll have to terminate.
196 worker.log.warning(
324 worker.log.warning(
197 "memory usage %s > %s after gc, quitting",
325 "memory usage %s > %s after gc, quitting",
198 _format_data_size(mem_usage), _format_data_size(memory_max_usage))
326 _format_data_size(mem_usage), _format_data_size(_memory_max_usage))
199 # This will cause worker to auto-restart itself
327 # This will cause worker to auto-restart itself
200 worker.alive = False
328 worker.alive = False
201 worker._last_memory_check_time = time.time()
329 worker._last_memory_check_time = time.time()
202
330
203
331
204 def worker_int(worker):
332 def worker_int(worker):
205 worker.log.info("[%-10s] worker received INT or QUIT signal", worker.pid)
333 worker.log.info("pid=[%-10s] worker received INT or QUIT signal", worker.pid)
206
334
207 # get traceback info, on worker crash
335 # get traceback info, when a worker crashes
208 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
336 def get_thread_id(t_id):
337 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
338 return id2name.get(t_id, "unknown_thread_id")
339
209 code = []
340 code = []
210 for thread_id, stack in sys._current_frames().items():
341 for thread_id, stack in sys._current_frames().items(): # noqa
211 code.append(
342 code.append(
212 "\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id))
343 "\n# Thread: %s(%d)" % (get_thread_id(thread_id), thread_id))
213 for fname, lineno, name, line in traceback.extract_stack(stack):
344 for fname, lineno, name, line in traceback.extract_stack(stack):
214 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
345 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
215 if line:
346 if line:
216 code.append(" %s" % (line.strip()))
347 code.append(" %s" % (line.strip()))
217 worker.log.debug("\n".join(code))
348 worker.log.debug("\n".join(code))
218
349
219
350
220 def worker_abort(worker):
351 def worker_abort(worker):
221 worker.log.info("[%-10s] worker received SIGABRT signal", worker.pid)
352 worker.log.info("pid=[%-10s] worker received SIGABRT signal", worker.pid)
222
353
223
354
224 def worker_exit(server, worker):
355 def worker_exit(server, worker):
225 worker.log.info("[%-10s] worker exit", worker.pid)
356 worker.log.info("pid=[%-10s] worker exit", worker.pid)
226
357
227
358
228 def child_exit(server, worker):
359 def child_exit(server, worker):
229 worker.log.info("[%-10s] worker child exit", worker.pid)
360 worker.log.info("pid=[%-10s] worker child exit", worker.pid)
230
361
231
362
232 def pre_request(worker, req):
363 def pre_request(worker, req):
233 worker.start_time = time.time()
364 worker.start_time = time.time()
234 worker.log.debug(
365 worker.log.debug(
235 "GNCRN PRE WORKER [cnt:%s]: %s %s", worker.nr, req.method, req.path)
366 "GNCRN PRE WORKER [cnt:%s]: %s %s", worker.nr, req.method, req.path)
236
367
237
368
238 def post_request(worker, req, environ, resp):
369 def post_request(worker, req, environ, resp):
239 total_time = time.time() - worker.start_time
370 total_time = time.time() - worker.start_time
240 # Gunicorn sometimes has problems with reading the status_code
371 # Gunicorn sometimes has problems with reading the status_code
241 status_code = getattr(resp, 'status_code', '')
372 status_code = getattr(resp, 'status_code', '')
242 worker.log.debug(
373 worker.log.debug(
243 "GNCRN POST WORKER [cnt:%s]: %s %s resp: %s, Load Time: %.4fs",
374 "GNCRN POST WORKER [cnt:%s]: %s %s resp: %s, Load Time: %.4fs",
244 worker.nr, req.method, req.path, status_code, total_time)
375 worker.nr, req.method, req.path, status_code, total_time)
245 _check_memory_usage(worker)
376 _check_memory_usage(worker)
246
377
247
378
379 def _filter_proxy(ip):
380 """
381 Passed in IP addresses in HEADERS can be in a special format of multiple
382 ips. Those comma separated IPs are passed from various proxies in the
383 chain of request processing. The left-most being the original client.
384 We only care about the first IP which came from the org. client.
385
386 :param ip: ip string from headers
387 """
388 if ',' in ip:
389 _ips = ip.split(',')
390 _first_ip = _ips[0].strip()
391 return _first_ip
392 return ip
393
394
395 def _filter_port(ip):
396 """
397 Removes a port from ip, there are 4 main cases to handle here.
398 - ipv4 eg. 127.0.0.1
399 - ipv6 eg. ::1
400 - ipv4+port eg. 127.0.0.1:8080
401 - ipv6+port eg. [::1]:8080
402
403 :param ip:
404 """
405 def is_ipv6(ip_addr):
406 if hasattr(socket, 'inet_pton'):
407 try:
408 socket.inet_pton(socket.AF_INET6, ip_addr)
409 except socket.error:
410 return False
411 else:
412 return False
413 return True
414
415 if ':' not in ip: # must be ipv4 pure ip
416 return ip
417
418 if '[' in ip and ']' in ip: # ipv6 with port
419 return ip.split(']')[0][1:].lower()
420
421 # must be ipv6 or ipv4 with port
422 if is_ipv6(ip):
423 return ip
424 else:
425 ip, _port = ip.split(':')[:2] # means ipv4+port
426 return ip
427
428
429 def get_ip_addr(environ):
430 proxy_key = 'HTTP_X_REAL_IP'
431 proxy_key2 = 'HTTP_X_FORWARDED_FOR'
432 def_key = 'REMOTE_ADDR'
433
434 def _filters(x):
435 return _filter_port(_filter_proxy(x))
436
437 ip = environ.get(proxy_key)
438 if ip:
439 return _filters(ip)
440
441 ip = environ.get(proxy_key2)
442 if ip:
443 return _filters(ip)
444
445 ip = environ.get(def_key, '0.0.0.0')
446 return _filters(ip)
447
448
248 class RhodeCodeLogger(Logger):
449 class RhodeCodeLogger(Logger):
249 """
450 """
250 Custom Logger that allows some customization that gunicorn doesn't allow
451 Custom Logger that allows some customization that gunicorn doesn't allow
251 """
452 """
252
453
253 datefmt = r"%Y-%m-%d %H:%M:%S"
454 datefmt = r"%Y-%m-%d %H:%M:%S"
254
455
255 def __init__(self, cfg):
456 def __init__(self, cfg):
256 Logger.__init__(self, cfg)
457 Logger.__init__(self, cfg)
257
458
258 def now(self):
459 def now(self):
259 """ return date in RhodeCode Log format """
460 """ return date in RhodeCode Log format """
260 now = time.time()
461 now = time.time()
261 msecs = int((now - long(now)) * 1000)
462 msecs = int((now - int(now)) * 1000)
262 return time.strftime(self.datefmt, time.localtime(now)) + '.{0:03d}'.format(msecs)
463 return time.strftime(self.datefmt, time.localtime(now)) + '.{0:03d}'.format(msecs)
263
464
465 def atoms(self, resp, req, environ, request_time):
466 """ Gets atoms for log formatting.
467 """
468 status = resp.status
469 if isinstance(status, str):
470 status = status.split(None, 1)[0]
471 atoms = {
472 'h': get_ip_addr(environ),
473 'l': '-',
474 'u': self._get_user(environ) or '-',
475 't': self.now(),
476 'r': "%s %s %s" % (environ['REQUEST_METHOD'],
477 environ['RAW_URI'],
478 environ["SERVER_PROTOCOL"]),
479 's': status,
480 'm': environ.get('REQUEST_METHOD'),
481 'U': environ.get('PATH_INFO'),
482 'q': environ.get('QUERY_STRING'),
483 'H': environ.get('SERVER_PROTOCOL'),
484 'b': getattr(resp, 'sent', None) is not None and str(resp.sent) or '-',
485 'B': getattr(resp, 'sent', None),
486 'f': environ.get('HTTP_REFERER', '-'),
487 'a': environ.get('HTTP_USER_AGENT', '-'),
488 'T': request_time.seconds,
489 'D': (request_time.seconds * 1000000) + request_time.microseconds,
490 'M': (request_time.seconds * 1000) + int(request_time.microseconds/1000),
491 'L': "%d.%06d" % (request_time.seconds, request_time.microseconds),
492 'p': "<%s>" % os.getpid()
493 }
494
495 # add request headers
496 if hasattr(req, 'headers'):
497 req_headers = req.headers
498 else:
499 req_headers = req
500
501 if hasattr(req_headers, "items"):
502 req_headers = req_headers.items()
503
504 atoms.update({"{%s}i" % k.lower(): v for k, v in req_headers})
505
506 resp_headers = resp.headers
507 if hasattr(resp_headers, "items"):
508 resp_headers = resp_headers.items()
509
510 # add response headers
511 atoms.update({"{%s}o" % k.lower(): v for k, v in resp_headers})
512
513 # add environ variables
514 environ_variables = environ.items()
515 atoms.update({"{%s}e" % k.lower(): v for k, v in environ_variables})
516
517 return atoms
518
264
519
265 logger_class = RhodeCodeLogger
520 logger_class = RhodeCodeLogger
@@ -1,800 +1,816 b''
1 ## -*- coding: utf-8 -*-
2
1
3 ; #########################################
2 ; #########################################
4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
3 ; RHODECODE COMMUNITY EDITION CONFIGURATION
5 ; #########################################
4 ; #########################################
6
5
7 [DEFAULT]
6 [DEFAULT]
8 ; Debug flag sets all loggers to debug, and enables request tracking
7 ; Debug flag sets all loggers to debug, and enables request tracking
9 debug = false
8 debug = false
10
9
11 ; ########################################################################
10 ; ########################################################################
12 ; EMAIL CONFIGURATION
11 ; EMAIL CONFIGURATION
13 ; These settings will be used by the RhodeCode mailing system
12 ; These settings will be used by the RhodeCode mailing system
14 ; ########################################################################
13 ; ########################################################################
15
14
16 ; prefix all emails subjects with given prefix, helps filtering out emails
15 ; prefix all emails subjects with given prefix, helps filtering out emails
17 #email_prefix = [RhodeCode]
16 #email_prefix = [RhodeCode]
18
17
19 ; email FROM address all mails will be sent
18 ; email FROM address all mails will be sent
20 #app_email_from = rhodecode-noreply@localhost
19 #app_email_from = rhodecode-noreply@localhost
21
20
22 #smtp_server = mail.server.com
21 #smtp_server = mail.server.com
23 #smtp_username =
22 #smtp_username =
24 #smtp_password =
23 #smtp_password =
25 #smtp_port =
24 #smtp_port =
26 #smtp_use_tls = false
25 #smtp_use_tls = false
27 #smtp_use_ssl = true
26 #smtp_use_ssl = true
28
27
29 [server:main]
28 [server:main]
30 ; COMMON HOST/IP CONFIG
29 ; COMMON HOST/IP CONFIG, This applies mostly to develop setup,
30 ; Host port for gunicorn are controlled by gunicorn_conf.py
31 host = 127.0.0.1
31 host = 127.0.0.1
32 port = 5000
32 port = 10020
33
33
34
34
35 ; ###########################
35 ; ###########################
36 ; GUNICORN APPLICATION SERVER
36 ; GUNICORN APPLICATION SERVER
37 ; ###########################
37 ; ###########################
38
38
39 ; run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
39 ; run with gunicorn --paste rhodecode.ini --config gunicorn_conf.py
40
40
41 ; Module to use, this setting shouldn't be changed
41 ; Module to use, this setting shouldn't be changed
42 use = egg:gunicorn#main
42 use = egg:gunicorn#main
43
43
44 ; Sets the number of process workers. More workers means more concurrent connections
45 ; RhodeCode can handle at the same time. Each additional worker also it increases
46 ; memory usage as each has it's own set of caches.
47 ; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more
48 ; than 8-10 unless for really big deployments .e.g 700-1000 users.
49 ; `instance_id = *` must be set in the [app:main] section below (which is the default)
50 ; when using more than 1 worker.
51 workers = 2
52
53 ; Gunicorn access log level
54 loglevel = info
55
56 ; Process name visible in process list
57 proc_name = rhodecode
58
59 ; Type of worker class, one of `sync`, `gevent`
60 ; Recommended type is `gevent`
61 worker_class = gevent
62
63 ; The maximum number of simultaneous clients per worker. Valid only for gevent
64 worker_connections = 10
65
66 ; Max number of requests that worker will handle before being gracefully restarted.
67 ; Prevents memory leaks, jitter adds variability so not all workers are restarted at once.
68 max_requests = 1000
69 max_requests_jitter = 30
70
71 ; Amount of time a worker can spend with handling a request before it
72 ; gets killed and restarted. By default set to 21600 (6hrs)
73 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
74 timeout = 21600
75
76 ; The maximum size of HTTP request line in bytes.
77 ; 0 for unlimited
78 limit_request_line = 0
79
80 ; Limit the number of HTTP headers fields in a request.
81 ; By default this value is 100 and can't be larger than 32768.
82 limit_request_fields = 32768
83
84 ; Limit the allowed size of an HTTP request header field.
85 ; Value is a positive number or 0.
86 ; Setting it to 0 will allow unlimited header field sizes.
87 limit_request_field_size = 0
88
89 ; Timeout for graceful workers restart.
90 ; After receiving a restart signal, workers have this much time to finish
91 ; serving requests. Workers still alive after the timeout (starting from the
92 ; receipt of the restart signal) are force killed.
93 ; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h)
94 graceful_timeout = 3600
95
96 # The number of seconds to wait for requests on a Keep-Alive connection.
97 # Generally set in the 1-5 seconds range.
98 keepalive = 2
99
100 ; Maximum memory usage that each worker can use before it will receive a
101 ; graceful restart signal 0 = memory monitoring is disabled
102 ; Examples: 268435456 (256MB), 536870912 (512MB)
103 ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
104 memory_max_usage = 0
105
106 ; How often in seconds to check for memory usage for each gunicorn worker
107 memory_usage_check_interval = 60
108
109 ; Threshold value for which we don't recycle worker if GarbageCollection
110 ; frees up enough resources. Before each restart we try to run GC on worker
111 ; in case we get enough free memory after that, restart will not happen.
112 memory_usage_recovery_threshold = 0.8
113
114
115 ; Prefix middleware for RhodeCode.
44 ; Prefix middleware for RhodeCode.
116 ; recommended when using proxy setup.
45 ; recommended when using proxy setup.
117 ; allows to set RhodeCode under a prefix in server.
46 ; allows to set RhodeCode under a prefix in server.
118 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
47 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
119 ; And set your prefix like: `prefix = /custom_prefix`
48 ; And set your prefix like: `prefix = /custom_prefix`
120 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
49 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
121 ; to make your cookies only work on prefix url
50 ; to make your cookies only work on prefix url
122 [filter:proxy-prefix]
51 [filter:proxy-prefix]
123 use = egg:PasteDeploy#prefix
52 use = egg:PasteDeploy#prefix
124 prefix = /
53 prefix = /
125
54
126 [app:main]
55 [app:main]
127 ; The %(here)s variable will be replaced with the absolute path of parent directory
56 ; The %(here)s variable will be replaced with the absolute path of parent directory
128 ; of this file
57 ; of this file
129 ; In addition ENVIRONMENT variables usage is possible, e.g
58 ; Each option in the app:main can be override by an environmental variable
130 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
59 ;
60 ;To override an option:
61 ;
62 ;RC_<KeyName>
63 ;Everything should be uppercase, . and - should be replaced by _.
64 ;For example, if you have these configuration settings:
65 ;rc_cache.repo_object.backend = foo
66 ;can be overridden by
67 ;export RC_CACHE_REPO_OBJECT_BACKEND=foo
131
68
132 use = egg:rhodecode-enterprise-ce
69 use = egg:rhodecode-enterprise-ce
133
70
134 ; enable proxy prefix middleware, defined above
71 ; enable proxy prefix middleware, defined above
135 #filter-with = proxy-prefix
72 #filter-with = proxy-prefix
136
73
137 ; encryption key used to encrypt social plugin tokens,
74 ; encryption key used to encrypt social plugin tokens,
138 ; remote_urls with credentials etc, if not set it defaults to
75 ; remote_urls with credentials etc, if not set it defaults to
139 ; `beaker.session.secret`
76 ; `beaker.session.secret`
140 #rhodecode.encrypted_values.secret =
77 #rhodecode.encrypted_values.secret =
141
78
142 ; decryption strict mode (enabled by default). It controls if decryption raises
79 ; decryption strict mode (enabled by default). It controls if decryption raises
143 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
80 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
144 #rhodecode.encrypted_values.strict = false
81 #rhodecode.encrypted_values.strict = false
145
82
146 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
83 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
147 ; fernet is safer, and we strongly recommend switching to it.
84 ; fernet is safer, and we strongly recommend switching to it.
148 ; Due to backward compatibility aes is used as default.
85 ; Due to backward compatibility aes is used as default.
149 #rhodecode.encrypted_values.algorithm = fernet
86 #rhodecode.encrypted_values.algorithm = fernet
150
87
151 ; Return gzipped responses from RhodeCode (static files/application)
88 ; Return gzipped responses from RhodeCode (static files/application)
152 gzip_responses = false
89 gzip_responses = false
153
90
154 ; Auto-generate javascript routes file on startup
91 ; Auto-generate javascript routes file on startup
155 generate_js_files = false
92 generate_js_files = false
156
93
157 ; System global default language.
94 ; System global default language.
158 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
95 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
159 lang = en
96 lang = en
160
97
161 ; Perform a full repository scan and import on each server start.
98 ; Perform a full repository scan and import on each server start.
162 ; Settings this to true could lead to very long startup time.
99 ; Settings this to true could lead to very long startup time.
163 startup.import_repos = false
100 startup.import_repos = false
164
101
165 ; Uncomment and set this path to use archive download cache.
166 ; Once enabled, generated archives will be cached at this location
167 ; and served from the cache during subsequent requests for the same archive of
168 ; the repository.
169 #archive_cache_dir = /tmp/tarballcache
170
171 ; URL at which the application is running. This is used for Bootstrapping
102 ; URL at which the application is running. This is used for Bootstrapping
172 ; requests in context when no web request is available. Used in ishell, or
103 ; requests in context when no web request is available. Used in ishell, or
173 ; SSH calls. Set this for events to receive proper url for SSH calls.
104 ; SSH calls. Set this for events to receive proper url for SSH calls.
174 app.base_url = http://rhodecode.local
105 app.base_url = http://rhodecode.local
175
106
176 ; Unique application ID. Should be a random unique string for security.
107 ; Unique application ID. Should be a random unique string for security.
177 app_instance_uuid = rc-production
108 app_instance_uuid = rc-production
178
109
179 ; Cut off limit for large diffs (size in bytes). If overall diff size on
110 ; Cut off limit for large diffs (size in bytes). If overall diff size on
180 ; commit, or pull request exceeds this limit this diff will be displayed
111 ; commit, or pull request exceeds this limit this diff will be displayed
181 ; partially. E.g 512000 == 512Kb
112 ; partially. E.g 512000 == 512Kb
182 cut_off_limit_diff = 512000
113 cut_off_limit_diff = 512000
183
114
184 ; Cut off limit for large files inside diffs (size in bytes). Each individual
115 ; Cut off limit for large files inside diffs (size in bytes). Each individual
185 ; file inside diff which exceeds this limit will be displayed partially.
116 ; file inside diff which exceeds this limit will be displayed partially.
186 ; E.g 128000 == 128Kb
117 ; E.g 128000 == 128Kb
187 cut_off_limit_file = 128000
118 cut_off_limit_file = 128000
188
119
189 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
120 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
190 vcs_full_cache = true
121 vcs_full_cache = true
191
122
192 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
123 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
193 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
124 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
194 force_https = false
125 force_https = false
195
126
196 ; use Strict-Transport-Security headers
127 ; use Strict-Transport-Security headers
197 use_htsts = false
128 use_htsts = false
198
129
199 ; Set to true if your repos are exposed using the dumb protocol
130 ; Set to true if your repos are exposed using the dumb protocol
200 git_update_server_info = false
131 git_update_server_info = false
201
132
202 ; RSS/ATOM feed options
133 ; RSS/ATOM feed options
203 rss_cut_off_limit = 256000
134 rss_cut_off_limit = 256000
204 rss_items_per_page = 10
135 rss_items_per_page = 10
205 rss_include_diff = false
136 rss_include_diff = false
206
137
207 ; gist URL alias, used to create nicer urls for gist. This should be an
138 ; gist URL alias, used to create nicer urls for gist. This should be an
208 ; url that does rewrites to _admin/gists/{gistid}.
139 ; url that does rewrites to _admin/gists/{gistid}.
209 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
140 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
210 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
141 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
211 gist_alias_url =
142 gist_alias_url =
212
143
213 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
144 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
214 ; used for access.
145 ; used for access.
215 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
146 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
216 ; came from the the logged in user who own this authentication token.
147 ; came from the the logged in user who own this authentication token.
217 ; Additionally @TOKEN syntax can be used to bound the view to specific
148 ; Additionally @TOKEN syntax can be used to bound the view to specific
218 ; authentication token. Such view would be only accessible when used together
149 ; authentication token. Such view would be only accessible when used together
219 ; with this authentication token
150 ; with this authentication token
220 ; list of all views can be found under `/_admin/permissions/auth_token_access`
151 ; list of all views can be found under `/_admin/permissions/auth_token_access`
221 ; The list should be "," separated and on a single line.
152 ; The list should be "," separated and on a single line.
222 ; Most common views to enable:
153 ; Most common views to enable:
223
154
224 # RepoCommitsView:repo_commit_download
155 # RepoCommitsView:repo_commit_download
225 # RepoCommitsView:repo_commit_patch
156 # RepoCommitsView:repo_commit_patch
226 # RepoCommitsView:repo_commit_raw
157 # RepoCommitsView:repo_commit_raw
227 # RepoCommitsView:repo_commit_raw@TOKEN
158 # RepoCommitsView:repo_commit_raw@TOKEN
228 # RepoFilesView:repo_files_diff
159 # RepoFilesView:repo_files_diff
229 # RepoFilesView:repo_archivefile
160 # RepoFilesView:repo_archivefile
230 # RepoFilesView:repo_file_raw
161 # RepoFilesView:repo_file_raw
231 # GistView:*
162 # GistView:*
232 api_access_controllers_whitelist =
163 api_access_controllers_whitelist =
233
164
234 ; Default encoding used to convert from and to unicode
165 ; Default encoding used to convert from and to unicode
235 ; can be also a comma separated list of encoding in case of mixed encodings
166 ; can be also a comma separated list of encoding in case of mixed encodings
236 default_encoding = UTF-8
167 default_encoding = UTF-8
237
168
238 ; instance-id prefix
169 ; instance-id prefix
239 ; a prefix key for this instance used for cache invalidation when running
170 ; a prefix key for this instance used for cache invalidation when running
240 ; multiple instances of RhodeCode, make sure it's globally unique for
171 ; multiple instances of RhodeCode, make sure it's globally unique for
241 ; all running RhodeCode instances. Leave empty if you don't use it
172 ; all running RhodeCode instances. Leave empty if you don't use it
242 instance_id =
173 instance_id =
243
174
244 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
175 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
245 ; of an authentication plugin also if it is disabled by it's settings.
176 ; of an authentication plugin also if it is disabled by it's settings.
246 ; This could be useful if you are unable to log in to the system due to broken
177 ; This could be useful if you are unable to log in to the system due to broken
247 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
178 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
248 ; module to log in again and fix the settings.
179 ; module to log in again and fix the settings.
249 ; Available builtin plugin IDs (hash is part of the ID):
180 ; Available builtin plugin IDs (hash is part of the ID):
250 ; egg:rhodecode-enterprise-ce#rhodecode
181 ; egg:rhodecode-enterprise-ce#rhodecode
251 ; egg:rhodecode-enterprise-ce#pam
182 ; egg:rhodecode-enterprise-ce#pam
252 ; egg:rhodecode-enterprise-ce#ldap
183 ; egg:rhodecode-enterprise-ce#ldap
253 ; egg:rhodecode-enterprise-ce#jasig_cas
184 ; egg:rhodecode-enterprise-ce#jasig_cas
254 ; egg:rhodecode-enterprise-ce#headers
185 ; egg:rhodecode-enterprise-ce#headers
255 ; egg:rhodecode-enterprise-ce#crowd
186 ; egg:rhodecode-enterprise-ce#crowd
256
187
257 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
188 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
258
189
259 ; Flag to control loading of legacy plugins in py:/path format
190 ; Flag to control loading of legacy plugins in py:/path format
260 auth_plugin.import_legacy_plugins = true
191 auth_plugin.import_legacy_plugins = true
261
192
262 ; alternative return HTTP header for failed authentication. Default HTTP
193 ; alternative return HTTP header for failed authentication. Default HTTP
263 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
194 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
264 ; handling that causing a series of failed authentication calls.
195 ; handling that causing a series of failed authentication calls.
265 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
196 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
266 ; This will be served instead of default 401 on bad authentication
197 ; This will be served instead of default 401 on bad authentication
267 auth_ret_code =
198 auth_ret_code =
268
199
269 ; use special detection method when serving auth_ret_code, instead of serving
200 ; use special detection method when serving auth_ret_code, instead of serving
270 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
201 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
271 ; and then serve auth_ret_code to clients
202 ; and then serve auth_ret_code to clients
272 auth_ret_code_detection = false
203 auth_ret_code_detection = false
273
204
274 ; locking return code. When repository is locked return this HTTP code. 2XX
205 ; locking return code. When repository is locked return this HTTP code. 2XX
275 ; codes don't break the transactions while 4XX codes do
206 ; codes don't break the transactions while 4XX codes do
276 lock_ret_code = 423
207 lock_ret_code = 423
277
208
278 ; allows to change the repository location in settings page
209 ; allows to change the repository location in settings page
279 allow_repo_location_change = true
210 allow_repo_location_change = true
280
211
281 ; allows to setup custom hooks in settings page
212 ; allows to setup custom hooks in settings page
282 allow_custom_hooks_settings = true
213 allow_custom_hooks_settings = true
283
214
284 ; Generated license token required for EE edition license.
215 ; Generated license token required for EE edition license.
285 ; New generated token value can be found in Admin > settings > license page.
216 ; New generated token value can be found in Admin > settings > license page.
286 license_token =
217 license_token =
287
218
288 ; This flag hides sensitive information on the license page such as token, and license data
219 ; This flag hides sensitive information on the license page such as token, and license data
289 license.hide_license_info = false
220 license.hide_license_info = false
290
221
291 ; supervisor connection uri, for managing supervisor and logs.
222 ; supervisor connection uri, for managing supervisor and logs.
292 supervisor.uri =
223 supervisor.uri =
293
224
294 ; supervisord group name/id we only want this RC instance to handle
225 ; supervisord group name/id we only want this RC instance to handle
295 supervisor.group_id = prod
226 supervisor.group_id = prod
296
227
297 ; Display extended labs settings
228 ; Display extended labs settings
298 labs_settings_active = true
229 labs_settings_active = true
299
230
300 ; Custom exception store path, defaults to TMPDIR
231 ; Custom exception store path, defaults to TMPDIR
301 ; This is used to store exception from RhodeCode in shared directory
232 ; This is used to store exception from RhodeCode in shared directory
302 #exception_tracker.store_path =
233 #exception_tracker.store_path =
303
234
304 ; Send email with exception details when it happens
235 ; Send email with exception details when it happens
305 #exception_tracker.send_email = false
236 #exception_tracker.send_email = false
306
237
307 ; Comma separated list of recipients for exception emails,
238 ; Comma separated list of recipients for exception emails,
308 ; e.g admin@rhodecode.com,devops@rhodecode.com
239 ; e.g admin@rhodecode.com,devops@rhodecode.com
309 ; Can be left empty, then emails will be sent to ALL super-admins
240 ; Can be left empty, then emails will be sent to ALL super-admins
310 #exception_tracker.send_email_recipients =
241 #exception_tracker.send_email_recipients =
311
242
312 ; optional prefix to Add to email Subject
243 ; optional prefix to Add to email Subject
313 #exception_tracker.email_prefix = [RHODECODE ERROR]
244 #exception_tracker.email_prefix = [RHODECODE ERROR]
314
245
315 ; File store configuration. This is used to store and serve uploaded files
246 ; File store configuration. This is used to store and serve uploaded files
316 file_store.enabled = true
247 file_store.enabled = true
317
248
318 ; Storage backend, available options are: local
249 ; Storage backend, available options are: local
319 file_store.backend = local
250 file_store.backend = local
320
251
321 ; path to store the uploaded binaries
252 ; path to store the uploaded binaries
322 file_store.storage_path = %(here)s/data/file_store
253 file_store.storage_path = %(here)s/data/file_store
323
254
255 ; Uncomment and set this path to control settings for archive download cache.
256 ; Generated repo archives will be cached at this location
257 ; and served from the cache during subsequent requests for the same archive of
258 ; the repository. This path is important to be shared across filesystems and with
259 ; RhodeCode and vcsserver
260
261 ; Default is $cache_dir/archive_cache if not set
262 archive_cache.store_dir = %(here)s/data/archive_cache
263
264 ; The limit in GB sets how much data we cache before recycling last used, defaults to 10 gb
265 archive_cache.cache_size_gb = 40
266
267 ; By default cache uses sharding technique, this specifies how many shards are there
268 archive_cache.cache_shards = 4
324
269
325 ; #############
270 ; #############
326 ; CELERY CONFIG
271 ; CELERY CONFIG
327 ; #############
272 ; #############
328
273
329 ; manually run celery: /path/to/celery worker -E --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
274 ; manually run celery: /path/to/celery worker --task-events --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
330
275
331 use_celery = false
276 use_celery = false
332
277
278 ; path to store schedule database
279 #celerybeat-schedule.path =
280
333 ; connection url to the message broker (default redis)
281 ; connection url to the message broker (default redis)
334 celery.broker_url = redis://localhost:6379/8
282 celery.broker_url = redis://redis:6379/8
283
284 ; results backend to get results for (default redis)
285 celery.result_backend = redis://redis:6379/8
335
286
336 ; rabbitmq example
287 ; rabbitmq example
337 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
288 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
338
289
339 ; maximum tasks to execute before worker restart
290 ; maximum tasks to execute before worker restart
340 celery.max_tasks_per_child = 100
291 celery.max_tasks_per_child = 20
341
292
342 ; tasks will never be sent to the queue, but executed locally instead.
293 ; tasks will never be sent to the queue, but executed locally instead.
343 celery.task_always_eager = false
294 celery.task_always_eager = false
344
295
345 ; #############
296 ; #############
346 ; DOGPILE CACHE
297 ; DOGPILE CACHE
347 ; #############
298 ; #############
348
299
349 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
300 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
350 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
301 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
351 cache_dir = %(here)s/data
302 cache_dir = %(here)s/data
352
303
353 ; *********************************************
304 ; *********************************************
354 ; `sql_cache_short` cache for heavy SQL queries
305 ; `sql_cache_short` cache for heavy SQL queries
355 ; Only supported backend is `memory_lru`
306 ; Only supported backend is `memory_lru`
356 ; *********************************************
307 ; *********************************************
357 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
308 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
358 rc_cache.sql_cache_short.expiration_time = 30
309 rc_cache.sql_cache_short.expiration_time = 30
359
310
360
311
361 ; *****************************************************
312 ; *****************************************************
362 ; `cache_repo_longterm` cache for repo object instances
313 ; `cache_repo_longterm` cache for repo object instances
363 ; Only supported backend is `memory_lru`
314 ; Only supported backend is `memory_lru`
364 ; *****************************************************
315 ; *****************************************************
365 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
316 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
366 ; by default we use 30 Days, cache is still invalidated on push
317 ; by default we use 30 Days, cache is still invalidated on push
367 rc_cache.cache_repo_longterm.expiration_time = 2592000
318 rc_cache.cache_repo_longterm.expiration_time = 2592000
368 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
319 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
369 rc_cache.cache_repo_longterm.max_size = 10000
320 rc_cache.cache_repo_longterm.max_size = 10000
370
321
371
322
323 ; *********************************************
324 ; `cache_general` cache for general purpose use
325 ; for simplicity use rc.file_namespace backend,
326 ; for performance and scale use rc.redis
327 ; *********************************************
328 rc_cache.cache_general.backend = dogpile.cache.rc.file_namespace
329 rc_cache.cache_general.expiration_time = 43200
330 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
331 #rc_cache.cache_general.arguments.filename = /tmp/cache_general_db
332
333 ; alternative `cache_general` redis backend with distributed lock
334 #rc_cache.cache_general.backend = dogpile.cache.rc.redis
335 #rc_cache.cache_general.expiration_time = 300
336
337 ; redis_expiration_time needs to be greater then expiration_time
338 #rc_cache.cache_general.arguments.redis_expiration_time = 7200
339
340 #rc_cache.cache_general.arguments.host = localhost
341 #rc_cache.cache_general.arguments.port = 6379
342 #rc_cache.cache_general.arguments.db = 0
343 #rc_cache.cache_general.arguments.socket_timeout = 30
344 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
345 #rc_cache.cache_general.arguments.distributed_lock = true
346
347 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
348 #rc_cache.cache_general.arguments.lock_auto_renewal = true
349
372 ; *************************************************
350 ; *************************************************
373 ; `cache_perms` cache for permission tree, auth TTL
351 ; `cache_perms` cache for permission tree, auth TTL
352 ; for simplicity use rc.file_namespace backend,
353 ; for performance and scale use rc.redis
374 ; *************************************************
354 ; *************************************************
375 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
355 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
376 rc_cache.cache_perms.expiration_time = 300
356 rc_cache.cache_perms.expiration_time = 3600
377 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
357 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
378 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms.db
358 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms_db
379
359
380 ; alternative `cache_perms` redis backend with distributed lock
360 ; alternative `cache_perms` redis backend with distributed lock
381 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
361 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
382 #rc_cache.cache_perms.expiration_time = 300
362 #rc_cache.cache_perms.expiration_time = 300
383
363
384 ; redis_expiration_time needs to be greater then expiration_time
364 ; redis_expiration_time needs to be greater then expiration_time
385 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
365 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
386
366
387 #rc_cache.cache_perms.arguments.host = localhost
367 #rc_cache.cache_perms.arguments.host = localhost
388 #rc_cache.cache_perms.arguments.port = 6379
368 #rc_cache.cache_perms.arguments.port = 6379
389 #rc_cache.cache_perms.arguments.db = 0
369 #rc_cache.cache_perms.arguments.db = 0
390 #rc_cache.cache_perms.arguments.socket_timeout = 30
370 #rc_cache.cache_perms.arguments.socket_timeout = 30
391 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
371 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
392 #rc_cache.cache_perms.arguments.distributed_lock = true
372 #rc_cache.cache_perms.arguments.distributed_lock = true
393
373
394 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
374 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
395 #rc_cache.cache_perms.arguments.lock_auto_renewal = true
375 #rc_cache.cache_perms.arguments.lock_auto_renewal = true
396
376
397 ; ***************************************************
377 ; ***************************************************
398 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
378 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
379 ; for simplicity use rc.file_namespace backend,
380 ; for performance and scale use rc.redis
399 ; ***************************************************
381 ; ***************************************************
400 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
382 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
401 rc_cache.cache_repo.expiration_time = 2592000
383 rc_cache.cache_repo.expiration_time = 2592000
402 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
384 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
403 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo.db
385 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo_db
404
386
405 ; alternative `cache_repo` redis backend with distributed lock
387 ; alternative `cache_repo` redis backend with distributed lock
406 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
388 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
407 #rc_cache.cache_repo.expiration_time = 2592000
389 #rc_cache.cache_repo.expiration_time = 2592000
408
390
409 ; redis_expiration_time needs to be greater then expiration_time
391 ; redis_expiration_time needs to be greater then expiration_time
410 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
392 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
411
393
412 #rc_cache.cache_repo.arguments.host = localhost
394 #rc_cache.cache_repo.arguments.host = localhost
413 #rc_cache.cache_repo.arguments.port = 6379
395 #rc_cache.cache_repo.arguments.port = 6379
414 #rc_cache.cache_repo.arguments.db = 1
396 #rc_cache.cache_repo.arguments.db = 1
415 #rc_cache.cache_repo.arguments.socket_timeout = 30
397 #rc_cache.cache_repo.arguments.socket_timeout = 30
416 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
398 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
417 #rc_cache.cache_repo.arguments.distributed_lock = true
399 #rc_cache.cache_repo.arguments.distributed_lock = true
418
400
419 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
401 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
420 #rc_cache.cache_repo.arguments.lock_auto_renewal = true
402 #rc_cache.cache_repo.arguments.lock_auto_renewal = true
421
403
422 ; ##############
404 ; ##############
423 ; BEAKER SESSION
405 ; BEAKER SESSION
424 ; ##############
406 ; ##############
425
407
426 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
408 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
427 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
409 ; types are file, ext:redis, ext:database, ext:memcached
428 ; Fastest ones are Redis and ext:database
410 ; Fastest ones are ext:redis and ext:database, DO NOT use memory type for session
429 beaker.session.type = file
411 beaker.session.type = file
430 beaker.session.data_dir = %(here)s/data/sessions
412 beaker.session.data_dir = %(here)s/data/sessions
431
413
432 ; Redis based sessions
414 ; Redis based sessions
433 #beaker.session.type = ext:redis
415 #beaker.session.type = ext:redis
434 #beaker.session.url = redis://127.0.0.1:6379/2
416 #beaker.session.url = redis://127.0.0.1:6379/2
435
417
436 ; DB based session, fast, and allows easy management over logged in users
418 ; DB based session, fast, and allows easy management over logged in users
437 #beaker.session.type = ext:database
419 #beaker.session.type = ext:database
438 #beaker.session.table_name = db_session
420 #beaker.session.table_name = db_session
439 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
421 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
440 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
422 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
441 #beaker.session.sa.pool_recycle = 3600
423 #beaker.session.sa.pool_recycle = 3600
442 #beaker.session.sa.echo = false
424 #beaker.session.sa.echo = false
443
425
444 beaker.session.key = rhodecode
426 beaker.session.key = rhodecode
445 beaker.session.secret = production-rc-uytcxaz
427 beaker.session.secret = production-rc-uytcxaz
446 beaker.session.lock_dir = %(here)s/data/sessions/lock
428 beaker.session.lock_dir = %(here)s/data/sessions/lock
447
429
448 ; Secure encrypted cookie. Requires AES and AES python libraries
430 ; Secure encrypted cookie. Requires AES and AES python libraries
449 ; you must disable beaker.session.secret to use this
431 ; you must disable beaker.session.secret to use this
450 #beaker.session.encrypt_key = key_for_encryption
432 #beaker.session.encrypt_key = key_for_encryption
451 #beaker.session.validate_key = validation_key
433 #beaker.session.validate_key = validation_key
452
434
453 ; Sets session as invalid (also logging out user) if it haven not been
435 ; Sets session as invalid (also logging out user) if it haven not been
454 ; accessed for given amount of time in seconds
436 ; accessed for given amount of time in seconds
455 beaker.session.timeout = 2592000
437 beaker.session.timeout = 2592000
456 beaker.session.httponly = true
438 beaker.session.httponly = true
457
439
458 ; Path to use for the cookie. Set to prefix if you use prefix middleware
440 ; Path to use for the cookie. Set to prefix if you use prefix middleware
459 #beaker.session.cookie_path = /custom_prefix
441 #beaker.session.cookie_path = /custom_prefix
460
442
461 ; Set https secure cookie
443 ; Set https secure cookie
462 beaker.session.secure = false
444 beaker.session.secure = false
463
445
464 ; default cookie expiration time in seconds, set to `true` to set expire
446 ; default cookie expiration time in seconds, set to `true` to set expire
465 ; at browser close
447 ; at browser close
466 #beaker.session.cookie_expires = 3600
448 #beaker.session.cookie_expires = 3600
467
449
468 ; #############################
450 ; #############################
469 ; SEARCH INDEXING CONFIGURATION
451 ; SEARCH INDEXING CONFIGURATION
470 ; #############################
452 ; #############################
471
453
472 ; Full text search indexer is available in rhodecode-tools under
454 ; Full text search indexer is available in rhodecode-tools under
473 ; `rhodecode-tools index` command
455 ; `rhodecode-tools index` command
474
456
475 ; WHOOSH Backend, doesn't require additional services to run
457 ; WHOOSH Backend, doesn't require additional services to run
476 ; it works good with few dozen repos
458 ; it works good with few dozen repos
477 search.module = rhodecode.lib.index.whoosh
459 search.module = rhodecode.lib.index.whoosh
478 search.location = %(here)s/data/index
460 search.location = %(here)s/data/index
479
461
480 ; ####################
462 ; ####################
481 ; CHANNELSTREAM CONFIG
463 ; CHANNELSTREAM CONFIG
482 ; ####################
464 ; ####################
483
465
484 ; channelstream enables persistent connections and live notification
466 ; channelstream enables persistent connections and live notification
485 ; in the system. It's also used by the chat system
467 ; in the system. It's also used by the chat system
486
468
487 channelstream.enabled = false
469 channelstream.enabled = false
488
470
489 ; server address for channelstream server on the backend
471 ; server address for channelstream server on the backend
490 channelstream.server = 127.0.0.1:9800
472 channelstream.server = 127.0.0.1:9800
491
473
492 ; location of the channelstream server from outside world
474 ; location of the channelstream server from outside world
493 ; use ws:// for http or wss:// for https. This address needs to be handled
475 ; use ws:// for http or wss:// for https. This address needs to be handled
494 ; by external HTTP server such as Nginx or Apache
476 ; by external HTTP server such as Nginx or Apache
495 ; see Nginx/Apache configuration examples in our docs
477 ; see Nginx/Apache configuration examples in our docs
496 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
478 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
497 channelstream.secret = secret
479 channelstream.secret = secret
498 channelstream.history.location = %(here)s/channelstream_history
480 channelstream.history.location = %(here)s/channelstream_history
499
481
500 ; Internal application path that Javascript uses to connect into.
482 ; Internal application path that Javascript uses to connect into.
501 ; If you use proxy-prefix the prefix should be added before /_channelstream
483 ; If you use proxy-prefix the prefix should be added before /_channelstream
502 channelstream.proxy_path = /_channelstream
484 channelstream.proxy_path = /_channelstream
503
485
504
486
505 ; ##############################
487 ; ##############################
506 ; MAIN RHODECODE DATABASE CONFIG
488 ; MAIN RHODECODE DATABASE CONFIG
507 ; ##############################
489 ; ##############################
508
490
509 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
491 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
510 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
492 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
511 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
493 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
512 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
494 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
513 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
495 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
514
496
515 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
497 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
516
498
517 ; see sqlalchemy docs for other advanced settings
499 ; see sqlalchemy docs for other advanced settings
518 ; print the sql statements to output
500 ; print the sql statements to output
519 sqlalchemy.db1.echo = false
501 sqlalchemy.db1.echo = false
520
502
521 ; recycle the connections after this amount of seconds
503 ; recycle the connections after this amount of seconds
522 sqlalchemy.db1.pool_recycle = 3600
504 sqlalchemy.db1.pool_recycle = 3600
523 sqlalchemy.db1.convert_unicode = true
524
505
525 ; the number of connections to keep open inside the connection pool.
506 ; the number of connections to keep open inside the connection pool.
526 ; 0 indicates no limit
507 ; 0 indicates no limit
508 ; the general calculus with gevent is:
509 ; if your system allows 500 concurrent greenlets (max_connections) that all do database access,
510 ; then increase pool size + max overflow so that they add up to 500.
527 #sqlalchemy.db1.pool_size = 5
511 #sqlalchemy.db1.pool_size = 5
528
512
529 ; The number of connections to allow in connection pool "overflow", that is
513 ; The number of connections to allow in connection pool "overflow", that is
530 ; connections that can be opened above and beyond the pool_size setting,
514 ; connections that can be opened above and beyond the pool_size setting,
531 ; which defaults to five.
515 ; which defaults to five.
532 #sqlalchemy.db1.max_overflow = 10
516 #sqlalchemy.db1.max_overflow = 10
533
517
534 ; Connection check ping, used to detect broken database connections
518 ; Connection check ping, used to detect broken database connections
535 ; could be enabled to better handle cases if MySQL has gone away errors
519 ; could be enabled to better handle cases if MySQL has gone away errors
536 #sqlalchemy.db1.ping_connection = true
520 #sqlalchemy.db1.ping_connection = true
537
521
538 ; ##########
522 ; ##########
539 ; VCS CONFIG
523 ; VCS CONFIG
540 ; ##########
524 ; ##########
541 vcs.server.enable = true
525 vcs.server.enable = true
542 vcs.server = localhost:9900
526 vcs.server = localhost:9900
543
527
544 ; Web server connectivity protocol, responsible for web based VCS operations
528 ; Web server connectivity protocol, responsible for web based VCS operations
545 ; Available protocols are:
529 ; Available protocols are:
546 ; `http` - use http-rpc backend (default)
530 ; `http` - use http-rpc backend (default)
547 vcs.server.protocol = http
531 vcs.server.protocol = http
548
532
549 ; Push/Pull operations protocol, available options are:
533 ; Push/Pull operations protocol, available options are:
550 ; `http` - use http-rpc backend (default)
534 ; `http` - use http-rpc backend (default)
551 vcs.scm_app_implementation = http
535 vcs.scm_app_implementation = http
552
536
553 ; Push/Pull operations hooks protocol, available options are:
537 ; Push/Pull operations hooks protocol, available options are:
554 ; `http` - use http-rpc backend (default)
538 ; `http` - use http-rpc backend (default)
555 vcs.hooks.protocol = http
539 vcs.hooks.protocol = http
556
540
557 ; Host on which this instance is listening for hooks. If vcsserver is in other location
541 ; Host on which this instance is listening for hooks. vcsserver will call this host to pull/push hooks so it should be
558 ; this should be adjusted.
542 ; accessible via network.
559 vcs.hooks.host = 127.0.0.1
543 ; Use vcs.hooks.host = "*" to bind to current hostname (for Docker)
544 vcs.hooks.host = *
560
545
561 ; Start VCSServer with this instance as a subprocess, useful for development
546 ; Start VCSServer with this instance as a subprocess, useful for development
562 vcs.start_server = false
547 vcs.start_server = false
563
548
564 ; List of enabled VCS backends, available options are:
549 ; List of enabled VCS backends, available options are:
565 ; `hg` - mercurial
550 ; `hg` - mercurial
566 ; `git` - git
551 ; `git` - git
567 ; `svn` - subversion
552 ; `svn` - subversion
568 vcs.backends = hg, git, svn
553 vcs.backends = hg, git, svn
569
554
570 ; Wait this number of seconds before killing connection to the vcsserver
555 ; Wait this number of seconds before killing connection to the vcsserver
571 vcs.connection_timeout = 3600
556 vcs.connection_timeout = 3600
572
557
573 ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
558 ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
574 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
559 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
575 ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
560 ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
576 #vcs.svn.compatible_version = 1.8
561 #vcs.svn.compatible_version = 1.8
577
562
563 ; Cache flag to cache vcsserver remote calls locally
564 ; It uses cache_region `cache_repo`
565 vcs.methods.cache = true
578
566
579 ; ####################################################
567 ; ####################################################
580 ; Subversion proxy support (mod_dav_svn)
568 ; Subversion proxy support (mod_dav_svn)
581 ; Maps RhodeCode repo groups into SVN paths for Apache
569 ; Maps RhodeCode repo groups into SVN paths for Apache
582 ; ####################################################
570 ; ####################################################
583
571
584 ; Enable or disable the config file generation.
572 ; Enable or disable the config file generation.
585 svn.proxy.generate_config = false
573 svn.proxy.generate_config = false
586
574
587 ; Generate config file with `SVNListParentPath` set to `On`.
575 ; Generate config file with `SVNListParentPath` set to `On`.
588 svn.proxy.list_parent_path = true
576 svn.proxy.list_parent_path = true
589
577
590 ; Set location and file name of generated config file.
578 ; Set location and file name of generated config file.
591 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
579 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
592
580
593 ; alternative mod_dav config template. This needs to be a valid mako template
581 ; alternative mod_dav config template. This needs to be a valid mako template
594 ; Example template can be found in the source code:
582 ; Example template can be found in the source code:
595 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
583 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
596 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
584 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
597
585
598 ; Used as a prefix to the `Location` block in the generated config file.
586 ; Used as a prefix to the `Location` block in the generated config file.
599 ; In most cases it should be set to `/`.
587 ; In most cases it should be set to `/`.
600 svn.proxy.location_root = /
588 svn.proxy.location_root = /
601
589
602 ; Command to reload the mod dav svn configuration on change.
590 ; Command to reload the mod dav svn configuration on change.
603 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
591 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
604 ; Make sure user who runs RhodeCode process is allowed to reload Apache
592 ; Make sure user who runs RhodeCode process is allowed to reload Apache
605 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
593 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
606
594
607 ; If the timeout expires before the reload command finishes, the command will
595 ; If the timeout expires before the reload command finishes, the command will
608 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
596 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
609 #svn.proxy.reload_timeout = 10
597 #svn.proxy.reload_timeout = 10
610
598
611 ; ####################
599 ; ####################
612 ; SSH Support Settings
600 ; SSH Support Settings
613 ; ####################
601 ; ####################
614
602
615 ; Defines if a custom authorized_keys file should be created and written on
603 ; Defines if a custom authorized_keys file should be created and written on
616 ; any change user ssh keys. Setting this to false also disables possibility
604 ; any change user ssh keys. Setting this to false also disables possibility
617 ; of adding SSH keys by users from web interface. Super admins can still
605 ; of adding SSH keys by users from web interface. Super admins can still
618 ; manage SSH Keys.
606 ; manage SSH Keys.
619 ssh.generate_authorized_keyfile = false
607 ssh.generate_authorized_keyfile = false
620
608
621 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
609 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
622 # ssh.authorized_keys_ssh_opts =
610 # ssh.authorized_keys_ssh_opts =
623
611
624 ; Path to the authorized_keys file where the generate entries are placed.
612 ; Path to the authorized_keys file where the generate entries are placed.
625 ; It is possible to have multiple key files specified in `sshd_config` e.g.
613 ; It is possible to have multiple key files specified in `sshd_config` e.g.
626 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
614 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
627 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
615 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
628
616
629 ; Command to execute the SSH wrapper. The binary is available in the
617 ; Command to execute the SSH wrapper. The binary is available in the
630 ; RhodeCode installation directory.
618 ; RhodeCode installation directory.
631 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
619 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
632 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
620 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
633
621
634 ; Allow shell when executing the ssh-wrapper command
622 ; Allow shell when executing the ssh-wrapper command
635 ssh.wrapper_cmd_allow_shell = false
623 ssh.wrapper_cmd_allow_shell = false
636
624
637 ; Enables logging, and detailed output send back to the client during SSH
625 ; Enables logging, and detailed output send back to the client during SSH
638 ; operations. Useful for debugging, shouldn't be used in production.
626 ; operations. Useful for debugging, shouldn't be used in production.
639 ssh.enable_debug_logging = false
627 ssh.enable_debug_logging = false
640
628
641 ; Paths to binary executable, by default they are the names, but we can
629 ; Paths to binary executable, by default they are the names, but we can
642 ; override them if we want to use a custom one
630 ; override them if we want to use a custom one
643 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
631 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
644 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
632 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
645 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
633 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
646
634
647 ; Enables SSH key generator web interface. Disabling this still allows users
635 ; Enables SSH key generator web interface. Disabling this still allows users
648 ; to add their own keys.
636 ; to add their own keys.
649 ssh.enable_ui_key_generator = true
637 ssh.enable_ui_key_generator = true
650
638
651
639
652 ; #################
640 ; #################
653 ; APPENLIGHT CONFIG
641 ; APPENLIGHT CONFIG
654 ; #################
642 ; #################
655
643
656 ; Appenlight is tailored to work with RhodeCode, see
644 ; Appenlight is tailored to work with RhodeCode, see
657 ; http://appenlight.rhodecode.com for details how to obtain an account
645 ; http://appenlight.rhodecode.com for details how to obtain an account
658
646
659 ; Appenlight integration enabled
647 ; Appenlight integration enabled
660 appenlight = false
648 #appenlight = false
661
649
662 appenlight.server_url = https://api.appenlight.com
650 #appenlight.server_url = https://api.appenlight.com
663 appenlight.api_key = YOUR_API_KEY
651 #appenlight.api_key = YOUR_API_KEY
664 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
652 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
665
653
666 ; used for JS client
654 ; used for JS client
667 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
655 #appenlight.api_public_key = YOUR_API_PUBLIC_KEY
668
656
669 ; TWEAK AMOUNT OF INFO SENT HERE
657 ; TWEAK AMOUNT OF INFO SENT HERE
670
658
671 ; enables 404 error logging (default False)
659 ; enables 404 error logging (default False)
672 appenlight.report_404 = false
660 #appenlight.report_404 = false
673
661
674 ; time in seconds after request is considered being slow (default 1)
662 ; time in seconds after request is considered being slow (default 1)
675 appenlight.slow_request_time = 1
663 #appenlight.slow_request_time = 1
676
664
677 ; record slow requests in application
665 ; record slow requests in application
678 ; (needs to be enabled for slow datastore recording and time tracking)
666 ; (needs to be enabled for slow datastore recording and time tracking)
679 appenlight.slow_requests = true
667 #appenlight.slow_requests = true
680
668
681 ; enable hooking to application loggers
669 ; enable hooking to application loggers
682 appenlight.logging = true
670 #appenlight.logging = true
683
671
684 ; minimum log level for log capture
672 ; minimum log level for log capture
685 appenlight.logging.level = WARNING
673 #ppenlight.logging.level = WARNING
686
674
687 ; send logs only from erroneous/slow requests
675 ; send logs only from erroneous/slow requests
688 ; (saves API quota for intensive logging)
676 ; (saves API quota for intensive logging)
689 appenlight.logging_on_error = false
677 #appenlight.logging_on_error = false
690
678
691 ; list of additional keywords that should be grabbed from environ object
679 ; list of additional keywords that should be grabbed from environ object
692 ; can be string with comma separated list of words in lowercase
680 ; can be string with comma separated list of words in lowercase
693 ; (by default client will always send following info:
681 ; (by default client will always send following info:
694 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
682 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
695 ; start with HTTP* this list be extended with additional keywords here
683 ; start with HTTP* this list be extended with additional keywords here
696 appenlight.environ_keys_whitelist =
684 #appenlight.environ_keys_whitelist =
697
685
698 ; list of keywords that should be blanked from request object
686 ; list of keywords that should be blanked from request object
699 ; can be string with comma separated list of words in lowercase
687 ; can be string with comma separated list of words in lowercase
700 ; (by default client will always blank keys that contain following words
688 ; (by default client will always blank keys that contain following words
701 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
689 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
702 ; this list be extended with additional keywords set here
690 ; this list be extended with additional keywords set here
703 appenlight.request_keys_blacklist =
691 #appenlight.request_keys_blacklist =
704
692
705 ; list of namespaces that should be ignores when gathering log entries
693 ; list of namespaces that should be ignores when gathering log entries
706 ; can be string with comma separated list of namespaces
694 ; can be string with comma separated list of namespaces
707 ; (by default the client ignores own entries: appenlight_client.client)
695 ; (by default the client ignores own entries: appenlight_client.client)
708 appenlight.log_namespace_blacklist =
696 #appenlight.log_namespace_blacklist =
697
698 ; Statsd client config, this is used to send metrics to statsd
699 ; We recommend setting statsd_exported and scrape them using Prometheus
700 #statsd.enabled = false
701 #statsd.statsd_host = 0.0.0.0
702 #statsd.statsd_port = 8125
703 #statsd.statsd_prefix =
704 #statsd.statsd_ipv6 = false
705
706 ; configure logging automatically at server startup set to false
707 ; to use the below custom logging config.
708 ; RC_LOGGING_FORMATTER
709 ; RC_LOGGING_LEVEL
710 ; env variables can control the settings for logging in case of autoconfigure
711
712 #logging.autoconfigure = true
713
714 ; specify your own custom logging config file to configure logging
715 #logging.logging_conf_file = /path/to/custom_logging.ini
709
716
710 ; Dummy marker to add new entries after.
717 ; Dummy marker to add new entries after.
711 ; Add any custom entries below. Please don't remove this marker.
718 ; Add any custom entries below. Please don't remove this marker.
712 custom.conf = 1
719 custom.conf = 1
713
720
714
721
715 ; #####################
722 ; #####################
716 ; LOGGING CONFIGURATION
723 ; LOGGING CONFIGURATION
717 ; #####################
724 ; #####################
725
718 [loggers]
726 [loggers]
719 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
727 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
720
728
721 [handlers]
729 [handlers]
722 keys = console, console_sql
730 keys = console, console_sql
723
731
724 [formatters]
732 [formatters]
725 keys = generic, color_formatter, color_formatter_sql
733 keys = generic, json, color_formatter, color_formatter_sql
726
734
727 ; #######
735 ; #######
728 ; LOGGERS
736 ; LOGGERS
729 ; #######
737 ; #######
730 [logger_root]
738 [logger_root]
731 level = NOTSET
739 level = NOTSET
732 handlers = console
740 handlers = console
733
741
734 [logger_sqlalchemy]
742 [logger_sqlalchemy]
735 level = INFO
743 level = INFO
736 handlers = console_sql
744 handlers = console_sql
737 qualname = sqlalchemy.engine
745 qualname = sqlalchemy.engine
738 propagate = 0
746 propagate = 0
739
747
740 [logger_beaker]
748 [logger_beaker]
741 level = DEBUG
749 level = DEBUG
742 handlers =
750 handlers =
743 qualname = beaker.container
751 qualname = beaker.container
744 propagate = 1
752 propagate = 1
745
753
746 [logger_rhodecode]
754 [logger_rhodecode]
747 level = DEBUG
755 level = DEBUG
748 handlers =
756 handlers =
749 qualname = rhodecode
757 qualname = rhodecode
750 propagate = 1
758 propagate = 1
751
759
752 [logger_ssh_wrapper]
760 [logger_ssh_wrapper]
753 level = DEBUG
761 level = DEBUG
754 handlers =
762 handlers =
755 qualname = ssh_wrapper
763 qualname = ssh_wrapper
756 propagate = 1
764 propagate = 1
757
765
758 [logger_celery]
766 [logger_celery]
759 level = DEBUG
767 level = DEBUG
760 handlers =
768 handlers =
761 qualname = celery
769 qualname = celery
762
770
763
771
764 ; ########
772 ; ########
765 ; HANDLERS
773 ; HANDLERS
766 ; ########
774 ; ########
767
775
768 [handler_console]
776 [handler_console]
769 class = StreamHandler
777 class = StreamHandler
770 args = (sys.stderr, )
778 args = (sys.stderr, )
771 level = INFO
779 level = INFO
780 ; To enable JSON formatted logs replace 'generic/color_formatter' with 'json'
781 ; This allows sending properly formatted logs to grafana loki or elasticsearch
772 formatter = generic
782 formatter = generic
773
783
774 [handler_console_sql]
784 [handler_console_sql]
775 ; "level = DEBUG" logs SQL queries and results.
785 ; "level = DEBUG" logs SQL queries and results.
776 ; "level = INFO" logs SQL queries.
786 ; "level = INFO" logs SQL queries.
777 ; "level = WARN" logs neither. (Recommended for production systems.)
787 ; "level = WARN" logs neither. (Recommended for production systems.)
778 class = StreamHandler
788 class = StreamHandler
779 args = (sys.stderr, )
789 args = (sys.stderr, )
780 level = WARN
790 level = WARN
791 ; To enable JSON formatted logs replace 'generic/color_formatter_sql' with 'json'
792 ; This allows sending properly formatted logs to grafana loki or elasticsearch
781 formatter = generic
793 formatter = generic
782
794
783 ; ##########
795 ; ##########
784 ; FORMATTERS
796 ; FORMATTERS
785 ; ##########
797 ; ##########
786
798
787 [formatter_generic]
799 [formatter_generic]
788 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
800 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
789 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
801 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
790 datefmt = %Y-%m-%d %H:%M:%S
802 datefmt = %Y-%m-%d %H:%M:%S
791
803
792 [formatter_color_formatter]
804 [formatter_color_formatter]
793 class = rhodecode.lib.logging_formatter.ColorFormatter
805 class = rhodecode.lib.logging_formatter.ColorFormatter
794 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
806 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
795 datefmt = %Y-%m-%d %H:%M:%S
807 datefmt = %Y-%m-%d %H:%M:%S
796
808
797 [formatter_color_formatter_sql]
809 [formatter_color_formatter_sql]
798 class = rhodecode.lib.logging_formatter.ColorFormatterSql
810 class = rhodecode.lib.logging_formatter.ColorFormatterSql
799 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
811 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
800 datefmt = %Y-%m-%d %H:%M:%S
812 datefmt = %Y-%m-%d %H:%M:%S
813
814 [formatter_json]
815 format = %(timestamp)s %(levelname)s %(name)s %(message)s %(req_id)s
816 class = rhodecode.lib._vendor.jsonlogger.JsonFormatter
@@ -1,9 +1,6 b''
1 # generating packages
1 ## BUILD
2 nix-shell pkgs/shell-generate.nix
2 # cd docs
3 cd docs
3 # docker build --tag sphinx-doc-build-rc .
4 pip2nix generate
5
4
6 # building the docs
5 # Build Docs
7 cd docs
6 # docker run --rm -v $(PWD):/project --workdir=/project/docs sphinx-doc-build-rc make clean html No newline at end of file
8 nix-build default.nix -o result
9 make clean html
@@ -1,183 +1,183 b''
1 # Makefile for Sphinx documentation
1 # Makefile for Sphinx documentation
2 #
2 #
3
3
4 # You can set these variables from the command line.
4 # You can set these variables from the command line.
5 SPHINXOPTS =
5 SPHINXOPTS ?=
6 SPHINXBUILD = ./result/bin/sphinx-build
6 SPHINXBUILD ?= sphinx-build
7 PAPER =
7 SOURCEDIR = source
8 BUILDDIR = _build
8 BUILDDIR = _build
9
9
10 # User-friendly check for sphinx-build
10 # User-friendly check for sphinx-build
11 ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
11 ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
12 $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
12 $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
13 endif
13 endif
14
14
15 # Internal variables.
15 # Internal variables.
16 PAPEROPT_a4 = -D latex_paper_size=a4
16 PAPEROPT_a4 = -D latex_paper_size=a4
17 PAPEROPT_letter = -D latex_paper_size=letter
17 PAPEROPT_letter = -D latex_paper_size=letter
18 ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
18 ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
19 # the i18n builder cannot share the environment and doctrees with the others
19 # the i18n builder cannot share the environment and doctrees with the others
20 I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
20 I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
21
21
22 .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
22 .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
23
23
24 help:
24 help:
25 @echo "Please use \`make <target>' where <target> is one of"
25 @echo "Please use \`make <target>' where <target> is one of"
26 @echo " html to make standalone HTML files"
26 @echo " html to make standalone HTML files"
27 @echo " dirhtml to make HTML files named index.html in directories"
27 @echo " dirhtml to make HTML files named index.html in directories"
28 @echo " singlehtml to make a single large HTML file"
28 @echo " singlehtml to make a single large HTML file"
29 @echo " pickle to make pickle files"
29 @echo " pickle to make pickle files"
30 @echo " json to make JSON files"
30 @echo " json to make JSON files"
31 @echo " htmlhelp to make HTML files and a HTML help project"
31 @echo " htmlhelp to make HTML files and a HTML help project"
32 @echo " qthelp to make HTML files and a qthelp project"
32 @echo " qthelp to make HTML files and a qthelp project"
33 @echo " devhelp to make HTML files and a Devhelp project"
33 @echo " devhelp to make HTML files and a Devhelp project"
34 @echo " epub to make an epub"
34 @echo " epub to make an epub"
35 @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
35 @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
36 @echo " latexpdf to make LaTeX files and run them through pdflatex"
36 @echo " latexpdf to make LaTeX files and run them through pdflatex"
37 @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
37 @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
38 @echo " text to make text files"
38 @echo " text to make text files"
39 @echo " man to make manual pages"
39 @echo " man to make manual pages"
40 @echo " texinfo to make Texinfo files"
40 @echo " texinfo to make Texinfo files"
41 @echo " info to make Texinfo files and run them through makeinfo"
41 @echo " info to make Texinfo files and run them through makeinfo"
42 @echo " gettext to make PO message catalogs"
42 @echo " gettext to make PO message catalogs"
43 @echo " changes to make an overview of all changed/added/deprecated items"
43 @echo " changes to make an overview of all changed/added/deprecated items"
44 @echo " xml to make Docutils-native XML files"
44 @echo " xml to make Docutils-native XML files"
45 @echo " pseudoxml to make pseudoxml-XML files for display purposes"
45 @echo " pseudoxml to make pseudoxml-XML files for display purposes"
46 @echo " linkcheck to check all external links for integrity"
46 @echo " linkcheck to check all external links for integrity"
47 @echo " doctest to run all doctests embedded in the documentation (if enabled)"
47 @echo " doctest to run all doctests embedded in the documentation (if enabled)"
48
48
49 clean:
49 clean:
50 rm -rf $(BUILDDIR)/*
50 rm -rf $(BUILDDIR)/*
51
51
52 cleanup:
52 cleanup:
53 @echo "cleaning build dir"
53 @echo "cleaning build dir"
54 rm -rf $(BUILDDIR)/*
54 rm -rf $(BUILDDIR)/*
55 @echo "cleaning result symlink"
55 @echo "cleaning result symlink"
56 rm -v result
56 rm -v result
57
57
58 html:
58 html:
59 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
59 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
60 @echo
60 @echo
61 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
61 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
62
62
63 dirhtml:
63 dirhtml:
64 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
64 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
65 @echo
65 @echo
66 @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
66 @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
67
67
68 singlehtml:
68 singlehtml:
69 $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
69 $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
70 @echo
70 @echo
71 @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
71 @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
72
72
73 pickle:
73 pickle:
74 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
74 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
75 @echo
75 @echo
76 @echo "Build finished; now you can process the pickle files."
76 @echo "Build finished; now you can process the pickle files."
77
77
78 json:
78 json:
79 $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
79 $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
80 @echo
80 @echo
81 @echo "Build finished; now you can process the JSON files."
81 @echo "Build finished; now you can process the JSON files."
82
82
83 htmlhelp:
83 htmlhelp:
84 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
84 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
85 @echo
85 @echo
86 @echo "Build finished; now you can run HTML Help Workshop with the" \
86 @echo "Build finished; now you can run HTML Help Workshop with the" \
87 ".hhp project file in $(BUILDDIR)/htmlhelp."
87 ".hhp project file in $(BUILDDIR)/htmlhelp."
88
88
89 qthelp:
89 qthelp:
90 $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
90 $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
91 @echo
91 @echo
92 @echo "Build finished; now you can run "qcollectiongenerator" with the" \
92 @echo "Build finished; now you can run "qcollectiongenerator" with the" \
93 ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
93 ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
94 @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/RhodeCodeInstaller.qhcp"
94 @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/RhodeCodeInstaller.qhcp"
95 @echo "To view the help file:"
95 @echo "To view the help file:"
96 @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/RhodeCodeInstaller.qhc"
96 @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/RhodeCodeInstaller.qhc"
97
97
98 devhelp:
98 devhelp:
99 $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
99 $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
100 @echo
100 @echo
101 @echo "Build finished."
101 @echo "Build finished."
102 @echo "To view the help file:"
102 @echo "To view the help file:"
103 @echo "# mkdir -p $$HOME/.local/share/devhelp/RhodeCodeInstaller"
103 @echo "# mkdir -p $$HOME/.local/share/devhelp/RhodeCodeInstaller"
104 @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/RhodeCodeInstaller"
104 @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/RhodeCodeInstaller"
105 @echo "# devhelp"
105 @echo "# devhelp"
106
106
107 epub:
107 epub:
108 $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
108 $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
109 @echo
109 @echo
110 @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
110 @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
111
111
112 latex:
112 latex:
113 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
113 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
114 @echo
114 @echo
115 @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
115 @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
116 @echo "Run \`make' in that directory to run these through (pdf)latex" \
116 @echo "Run \`make' in that directory to run these through (pdf)latex" \
117 "(use \`make latexpdf' here to do that automatically)."
117 "(use \`make latexpdf' here to do that automatically)."
118
118
119 latexpdf:
119 latexpdf:
120 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
120 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
121 @echo "Running LaTeX files through pdflatex..."
121 @echo "Running LaTeX files through pdflatex..."
122 $(MAKE) -C $(BUILDDIR)/latex all-pdf
122 $(MAKE) -C $(BUILDDIR)/latex all-pdf
123 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
123 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
124
124
125 latexpdfja:
125 latexpdfja:
126 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
126 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
127 @echo "Running LaTeX files through platex and dvipdfmx..."
127 @echo "Running LaTeX files through platex and dvipdfmx..."
128 $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
128 $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
129 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
129 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
130
130
131 text:
131 text:
132 $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
132 $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
133 @echo
133 @echo
134 @echo "Build finished. The text files are in $(BUILDDIR)/text."
134 @echo "Build finished. The text files are in $(BUILDDIR)/text."
135
135
136 man:
136 man:
137 $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
137 $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
138 @echo
138 @echo
139 @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
139 @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
140
140
141 texinfo:
141 texinfo:
142 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
142 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
143 @echo
143 @echo
144 @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
144 @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
145 @echo "Run \`make' in that directory to run these through makeinfo" \
145 @echo "Run \`make' in that directory to run these through makeinfo" \
146 "(use \`make info' here to do that automatically)."
146 "(use \`make info' here to do that automatically)."
147
147
148 info:
148 info:
149 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
149 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
150 @echo "Running Texinfo files through makeinfo..."
150 @echo "Running Texinfo files through makeinfo..."
151 make -C $(BUILDDIR)/texinfo info
151 make -C $(BUILDDIR)/texinfo info
152 @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
152 @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
153
153
154 gettext:
154 gettext:
155 $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
155 $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
156 @echo
156 @echo
157 @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
157 @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
158
158
159 changes:
159 changes:
160 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
160 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
161 @echo
161 @echo
162 @echo "The overview file is in $(BUILDDIR)/changes."
162 @echo "The overview file is in $(BUILDDIR)/changes."
163
163
164 linkcheck:
164 linkcheck:
165 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
165 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
166 @echo
166 @echo
167 @echo "Link check complete; look for any errors in the above output " \
167 @echo "Link check complete; look for any errors in the above output " \
168 "or in $(BUILDDIR)/linkcheck/output.txt."
168 "or in $(BUILDDIR)/linkcheck/output.txt."
169
169
170 doctest:
170 doctest:
171 $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
171 $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
172 @echo "Testing of doctests in the sources finished, look at the " \
172 @echo "Testing of doctests in the sources finished, look at the " \
173 "results in $(BUILDDIR)/doctest/output.txt."
173 "results in $(BUILDDIR)/doctest/output.txt."
174
174
175 xml:
175 xml:
176 $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
176 $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
177 @echo
177 @echo
178 @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
178 @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
179
179
180 pseudoxml:
180 pseudoxml:
181 $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
181 $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
182 @echo
182 @echo
183 @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
183 @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
@@ -1,118 +1,119 b''
1 .. _repo-admin-tasks:
1 .. _repo-admin-tasks:
2
2
3 Common Admin Tasks for Repositories
3 Common Admin Tasks for Repositories
4 -----------------------------------
4 -----------------------------------
5
5
6
6
7 Manually Force Delete Repository
7 Manually Force Delete Repository
8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9
9
10 In case of attached forks or pull-requests repositories should be archived.
10 In case of attached forks or pull-requests repositories should be archived.
11 Here is how to force delete a repository and remove all dependent objects
11 Here is how to force delete a repository and remove all dependent objects
12
12
13
13
14 .. code-block:: bash
14 .. code-block:: bash
15 :dedent: 1
15 :dedent: 1
16
16
17 # starts the ishell interactive prompt
17 # starts the ishell interactive prompt
18 $ rccontrol ishell enterprise-1
18 $ rccontrol ishell enterprise-1
19
19
20 .. code-block:: python
20 .. code-block:: python
21 :dedent: 1
21 :dedent: 1
22
22
23 In [4]: from rhodecode.model.repo import RepoModel
23 In [4]: from rhodecode.model.repo import RepoModel
24 In [3]: repo = Repository.get_by_repo_name('test_repos/repo_with_prs')
24 In [3]: repo = Repository.get_by_repo_name('test_repos/repo_with_prs')
25 In [5]: RepoModel().delete(repo, forks='detach', pull_requests='delete')
25 In [5]: RepoModel().delete(repo, forks='detach', pull_requests='delete')
26 In [6]: Session().commit()
26 In [6]: Session().commit()
27
27
28
28
29 Below is a fully automated example to force delete repositories reading from a
29 Below is a fully automated example to force delete repositories reading from a
30 file where each line is a repository name. This can be executed via simple CLI command
30 file where each line is a repository name. This can be executed via simple CLI command
31 without entering the interactive shell.
31 without entering the interactive shell.
32
32
33 Save the below content as a file named `repo_delete_task.py`
33 Save the below content as a file named `repo_delete_task.py`
34
34
35
35
36 .. code-block:: python
36 .. code-block:: python
37 :dedent: 1
37 :dedent: 1
38
38
39 from rhodecode.model.db import *
39 from rhodecode.model.db import *
40 from rhodecode.model.repo import RepoModel
40 from rhodecode.model.repo import RepoModel
41 with open('delete_repos.txt', 'rb') as f:
41 with open('delete_repos.txt', 'rb') as f:
42 # read all lines from file
42 # read all lines from file
43 repos = f.readlines()
43 repos = f.readlines()
44 for repo_name in repos:
44 for repo_name in repos:
45 repo_name = repo_name.strip() # cleanup the name just in case
45 repo_name = repo_name.strip() # cleanup the name just in case
46 repo = Repository.get_by_repo_name(repo_name)
46 repo = Repository.get_by_repo_name(repo_name)
47 if not repo:
47 if not repo:
48 raise Exception('Repo with name {} not found'.format(repo_name))
48 raise Exception('Repo with name {} not found'.format(repo_name))
49 RepoModel().delete(repo, forks='detach', pull_requests='delete')
49 RepoModel().delete(repo, forks='detach', pull_requests='delete')
50 Session().commit()
50 Session().commit()
51 print('Removed repository {}'.format(repo_name))
51 print('Removed repository {}'.format(repo_name))
52
52
53
53
54 The code above will read the names of repositories from a file called `delete_repos.txt`
54 The code above will read the names of repositories from a file called `delete_repos.txt`
55 Each lines should represent a single name e.g `repo_name_1` or `repo_group/repo_name_2`
55 Each lines should represent a single name e.g `repo_name_1` or `repo_group/repo_name_2`
56
56
57 Run this line from CLI to execute the code from the `repo_delete_task.py` file and
57 Run this line from CLI to execute the code from the `repo_delete_task.py` file and
58 exit the ishell after the execution::
58 exit the ishell after the execution::
59
59
60 echo "%run repo_delete_task.py" | rccontrol ishell enterprise-1
60 echo "%run repo_delete_task.py" | rccontrol ishell enterprise-1
61
61
62
62
63
63
64
64
65 Bulk edit permissions for all repositories or groups
65 Bulk edit permissions for all repositories or groups
66 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
66 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
67
67
68 In case when a permissions should be applied in bulk here are two ways to apply
68 In case when a permissions should be applied in bulk here are two ways to apply
69 the permissions onto *all* repositories and/or repository groups.
69 the permissions onto *all* repositories and/or repository groups.
70
70
71 1) Start by running the interactive ishell interface
71 1) Start by running the interactive ishell interface
72
72
73 .. code-block:: bash
73 .. code-block:: bash
74 :dedent: 1
74 :dedent: 1
75
75
76 # starts the ishell interactive prompt
76 # starts the ishell interactive prompt
77 $ rccontrol ishell enterprise-1
77 $ rccontrol ishell enterprise-1
78
78
79
79
80 2a) Add user called 'admin' into all repositories with write permission.
80 2a) Add user called 'admin' into all repositories with write permission.
81 Permissions can be also `repository.read`, `repository.admin`, `repository.none`
81 Permissions can be also `repository.read`, `repository.admin`, `repository.none`
82
82
83
83 .. code-block:: python
84 .. code-block:: python
84 :dedent: 1
85 :dedent:
85
86
86 In [1]: from rhodecode.model.repo import RepoModel
87 In [1]: from rhodecode.model.repo import RepoModel
87 In [2]: user = User.get_by_username('admin')
88 In [2]: user = User.get_by_username('admin')
88 In [3]: permission_name = 'repository.write'
89 In [3]: permission_name = 'repository.write'
89 In [4]: for repo in Repository.get_all():
90 In [4]: for repo in Repository.get_all():
90 ...: RepoModel().grant_user_permission(repo, user, permission_name)
91 ...: RepoModel().grant_user_permission(repo, user, permission_name)
91 ...: Session().commit()
92 ...: Session().commit()
92
93
93 2b) Add user called 'admin' into all repository groups with write permission.
94 2b) Add user called 'admin' into all repository groups with write permission.
94 Permissions can be also can be `group.read`, `group.admin`, `group.none`
95 Permissions can be also can be `group.read`, `group.admin`, `group.none`
95
96
96 .. code-block:: python
97 .. code-block:: python
97 :dedent: 1
98 :dedent:
98
99
99 In [1]: from rhodecode.model.repo import RepoModel
100 In [1]: from rhodecode.model.repo import RepoModel
100 In [2]: user = User.get_by_username('admin')
101 In [2]: user = User.get_by_username('admin')
101 In [3]: permission_name = 'group.write'
102 In [3]: permission_name = 'group.write'
102 In [4]: for repo_group in RepoGroup.get_all():
103 In [4]: for repo_group in RepoGroup.get_all():
103 ...: RepoGroupModel().grant_user_permission(repo_group, user, permission_name)
104 ...: RepoGroupModel().grant_user_permission(repo_group, user, permission_name)
104 ...: Session().commit()
105 ...: Session().commit()
105
106
106
107
107 Delete a problematic pull request
108 Delete a problematic pull request
108 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
109 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
109
110
110 .. code-block:: python
111 .. code-block:: python
111 :dedent: 1
112 :dedent:
112
113
113 In [1]: from rhodecode.model.pull_request import PullRequestModel
114 In [1]: from rhodecode.model.pull_request import PullRequestModel
114 In [2]: pullrequest_id = 123
115 In [2]: pullrequest_id = 123
115 In [3]: pr = PullRequest.get(pullrequest_id)
116 In [3]: pr = PullRequest.get(pullrequest_id)
116 In [4]: super_admin = User.get_first_super_admin()
117 In [4]: super_admin = User.get_first_super_admin()
117 In [5]: PullRequestModel().delete(pr, super_admin)
118 In [5]: PullRequestModel().delete(pr, super_admin)
118 In [6]: Session().commit()
119 In [6]: Session().commit()
@@ -1,151 +1,151 b''
1 .. _rhodecode-reset-ref:
1 .. _rhodecode-reset-ref:
2
2
3 Settings Management
3 Settings Management
4 -------------------
4 -------------------
5
5
6 All |RCE| settings can be set from the user interface, but in the event that
6 All |RCE| settings can be set from the user interface, but in the event that
7 it somehow becomes unavailable you can use ``ishell`` inside your |RCE|
7 it somehow becomes unavailable you can use ``ishell`` inside your |RCE|
8 ``virtualenv`` to carry out emergency measures.
8 ``virtualenv`` to carry out emergency measures.
9
9
10 .. warning::
10 .. warning::
11
11
12 Logging into the |RCE| database with ``iShell`` should only be done by an
12 Logging into the |RCE| database with ``iShell`` should only be done by an
13 experienced and knowledgeable database administrator.
13 experienced and knowledgeable database administrator.
14
14
15
15
16 Reset Admin Account Privileges
16 Reset Admin Account Privileges
17 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18
18
19 If you accidentally remove your admin privileges from the admin account you
19 If you accidentally remove your admin privileges from the admin account you
20 can restore them using ``ishell``. Use the following example to reset your
20 can restore them using ``ishell``. Use the following example to reset your
21 account permissions.
21 account permissions.
22
22
23 .. code-block:: bash
23 .. code-block:: bash
24
24
25 # Open iShell from the terminal
25 # Open iShell from the terminal
26 $ rccontrol ishell enterprise-1
26 $ rccontrol ishell enterprise-1
27
27
28 .. code-block:: mysql
28 .. code-block:: python
29
29
30 # Use this example to change user permissions
30 # Use this example to change user permissions
31 In [1]: adminuser = User.get_by_username('username')
31 In [1]: adminuser = User.get_by_username('username')
32 In [2]: adminuser.admin = True
32 In [2]: adminuser.admin = True
33 In [3]: Session().add(adminuser);Session().commit()
33 In [3]: Session().add(adminuser);Session().commit()
34 In [4]: exit()
34 In [4]: exit()
35
35
36
36
37 Set to read global ``.hgrc`` file
37 Set to read global ``.hgrc`` file
38 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
38 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
39
39
40 By default, |RCE| does not read global ``hgrc`` files in
40 By default, |RCE| does not read global ``hgrc`` files in
41 ``/etc/mercurial/hgrc`` or ``/etc/mercurial/hgrc.d`` because it
41 ``/etc/mercurial/hgrc`` or ``/etc/mercurial/hgrc.d`` because it
42 can lead to issues. This is set in the ``rhodecode_ui`` table for which
42 can lead to issues. This is set in the ``rhodecode_ui`` table for which
43 there is no UI. If you need to edit this you can
43 there is no UI. If you need to edit this you can
44 manually change the settings using SQL statements with ``ishell``. Use the
44 manually change the settings using SQL statements with ``ishell``. Use the
45 following example to make changes to this table.
45 following example to make changes to this table.
46
46
47 .. code-block:: bash
47 .. code-block:: bash
48
48
49 # Open iShell from the terminal
49 # Open iShell from the terminal
50 $ rccontrol ishell enterprise-1
50 $ rccontrol ishell enterprise-1
51
51
52 .. code-block:: mysql
52 .. code-block:: python
53
53
54 # Use this example to enable global .hgrc access
54 # Use this example to enable global .hgrc access
55 In [1]: new_option = RhodeCodeUi()
55 In [1]: new_option = RhodeCodeUi()
56 In [2]: new_option.ui_section='web'
56 In [2]: new_option.ui_section='web'
57 In [3]: new_option.ui_key='allow_push'
57 In [3]: new_option.ui_key='allow_push'
58 In [4]: new_option.ui_value='*'
58 In [4]: new_option.ui_value='*'
59 In [5]: Session().add(new_option);Session().commit()
59 In [5]: Session().add(new_option);Session().commit()
60 In [6]: exit()
60 In [6]: exit()
61
61
62
62
63 Manually Reset Password
63 Manually Reset Password
64 ^^^^^^^^^^^^^^^^^^^^^^^
64 ^^^^^^^^^^^^^^^^^^^^^^^
65
65
66 If you need to manually reset a user password, use the following steps.
66 If you need to manually reset a user password, use the following steps.
67
67
68 1. Navigate to your |RCE| install location.
68 1. Navigate to your |RCE| install location.
69 2. Run the interactive ``ishell`` prompt.
69 2. Run the interactive ``ishell`` prompt.
70 3. Set a new password.
70 3. Set a new password.
71
71
72 Use the following code example to carry out these steps.
72 Use the following code example to carry out these steps.
73
73
74 .. code-block:: bash
74 .. code-block:: bash
75
75
76 # starts the ishell interactive prompt
76 # starts the ishell interactive prompt
77 $ rccontrol ishell enterprise-1
77 $ rccontrol ishell enterprise-1
78
78
79 .. code-block:: mysql
79 .. code-block:: python
80
80
81 In [1]: from rhodecode.lib.auth import generate_auth_token
81 In [1]: from rhodecode.lib.auth import generate_auth_token
82 In [2]: from rhodecode.lib.auth import get_crypt_password
82 In [2]: from rhodecode.lib.auth import get_crypt_password
83 # Enter the user name whose password you wish to change
83 # Enter the user name whose password you wish to change
84 In [3]: my_user = 'USERNAME'
84 In [3]: my_user = 'USERNAME'
85 In [4]: u = User.get_by_username(my_user)
85 In [4]: u = User.get_by_username(my_user)
86 # If this fails then the user does not exist
86 # If this fails then the user does not exist
87 In [5]: u.auth_token = generate_auth_token(my_user)
87 In [5]: u.auth_token = generate_auth_token(my_user)
88 # Set the new password
88 # Set the new password
89 In [6]: u.password = get_crypt_password('PASSWORD')
89 In [6]: u.password = get_crypt_password('PASSWORD')
90 In [7]: Session().add(u);Session().commit()
90 In [7]: Session().add(u);Session().commit()
91 In [8]: exit()
91 In [8]: exit()
92
92
93
93
94 Change user details
94 Change user details
95 ^^^^^^^^^^^^^^^^^^^
95 ^^^^^^^^^^^^^^^^^^^
96
96
97 If you need to manually change some of users details, use the following steps.
97 If you need to manually change some of users details, use the following steps.
98
98
99 1. Navigate to your |RCE| install location.
99 1. Navigate to your |RCE| install location.
100 2. Run the interactive ``ishell`` prompt.
100 2. Run the interactive ``ishell`` prompt.
101 3. Set a new arguments for users.
101 3. Set a new arguments for users.
102
102
103 Use the following code example to carry out these steps.
103 Use the following code example to carry out these steps.
104
104
105 .. code-block:: bash
105 .. code-block:: bash
106
106
107 # starts the ishell interactive prompt
107 # starts the ishell interactive prompt
108 $ rccontrol ishell enterprise-1
108 $ rccontrol ishell enterprise-1
109
109
110 .. code-block:: mysql
110 .. code-block:: python
111
111
112 # Use this example to change email and username of LDAP user
112 # Use this example to change email and username of LDAP user
113 In [1]: my_user = User.get_by_username('some_username')
113 In [1]: my_user = User.get_by_username('some_username')
114 In [2]: my_user.email = 'new_email@foobar.com'
114 In [2]: my_user.email = 'new_email@foobar.com'
115 In [3]: my_user.username = 'SomeUser'
115 In [3]: my_user.username = 'SomeUser'
116 In [4]: Session().add(my_user);Session().commit()
116 In [4]: Session().add(my_user);Session().commit()
117 In [5]: exit()
117 In [5]: exit()
118
118
119
119
120 Change user login type
120 Change user login type
121 ^^^^^^^^^^^^^^^^^^^^^^
121 ^^^^^^^^^^^^^^^^^^^^^^
122
122
123 Sometimes it's required to change account type from RhodeCode to LDAP or
123 Sometimes it's required to change account type from RhodeCode to LDAP or
124 other external authentication type.
124 other external authentication type.
125 If you need to manually change the method of login, use the following steps.
125 If you need to manually change the method of login, use the following steps.
126
126
127 1. Navigate to your |RCE| install location.
127 1. Navigate to your |RCE| install location.
128 2. Run the interactive ``ishell`` prompt.
128 2. Run the interactive ``ishell`` prompt.
129 3. Set a new arguments for users.
129 3. Set a new arguments for users.
130
130
131 Use the following code example to carry out these steps.
131 Use the following code example to carry out these steps.
132 Available values for new_extern_type can be found when browsing available
132 Available values for new_extern_type can be found when browsing available
133 authentication types in RhodeCode admin interface for authentication.
133 authentication types in RhodeCode admin interface for authentication.
134 Use the text which is shown after '#' sign, eg.
134 Use the text which is shown after '#' sign, eg.
135 ` LDAP (egg:rhodecode-enterprise-ce#ldap)` it's type is 'ldap'
135 ` LDAP (egg:rhodecode-enterprise-ce#ldap)` it's type is 'ldap'
136
136
137 .. code-block:: bash
137 .. code-block:: bash
138
138
139 # starts the ishell interactive prompt
139 # starts the ishell interactive prompt
140 $ rccontrol ishell enterprise-1
140 $ rccontrol ishell enterprise-1
141
141
142 .. code-block:: mysql
142 .. code-block:: python
143
143
144 # Use this example to change users from authentication
144 # Use this example to change users from authentication
145 # using rhodecode internal to ldap
145 # using rhodecode internal to ldap
146 In [1]: new_extern_type = 'ldap'
146 In [1]: new_extern_type = 'ldap'
147 In [2]: my_user = User.get_by_username('some_username')
147 In [2]: my_user = User.get_by_username('some_username')
148 In [3]: my_user.extern_type = new_extern_type
148 In [3]: my_user.extern_type = new_extern_type
149 In [4]: my_user.extern_name = new_extern_type
149 In [4]: my_user.extern_name = new_extern_type
150 In [5]: Session().add(my_user);Session().commit()
150 In [5]: Session().add(my_user);Session().commit()
151 In [6]: exit()
151 In [6]: exit()
@@ -1,210 +1,209 b''
1 .. _api:
1 .. _api:
2
2
3 API Documentation
3 API Documentation
4 =================
4 =================
5
5
6 The |RCE| API uses a single scheme for calling all API methods. The API is
6 The |RCE| API uses a single scheme for calling all API methods. The API is
7 implemented with JSON protocol in both directions. To send API requests to
7 implemented with JSON protocol in both directions. To send API requests to
8 your instance of |RCE|, use the following URL format
8 your instance of |RCE|, use the following URL format
9 ``<your_server>/_admin``
9 ``<your_server>/_admin``
10
10
11 .. note::
11 .. note::
12
12
13 To use the API, you should configure the :file:`~/.rhoderc` file with
13 To use the API, you should configure the :file:`~/.rhoderc` file with
14 access details per instance. For more information, see
14 access details per instance. For more information, see
15 :ref:`config-rhoderc`.
15 :ref:`config-rhoderc`.
16
16
17
17
18 API ACCESS FOR WEB VIEWS
18 API ACCESS FOR WEB VIEWS
19 ------------------------
19 ------------------------
20
20
21 API access can also be turned on for each web view in |RCE| that is
21 API access can also be turned on for each web view in |RCE| that is
22 decorated with a `@LoginRequired` decorator. To enable API access, change
22 decorated with a `@LoginRequired` decorator. To enable API access, change
23 the standard login decorator to `@LoginRequired(api_access=True)`.
23 the standard login decorator to `@LoginRequired(api_access=True)`.
24
24
25 From |RCE| version 1.7.0 you can configure a white list
25 From |RCE| version 1.7.0 you can configure a white list
26 of views that have API access enabled by default. To enable these,
26 of views that have API access enabled by default. To enable these,
27 edit the |RCE| configuration ``.ini`` file. The default location is:
27 edit the |RCE| configuration ``.ini`` file. The default location is:
28
28
29 * |RCE| Pre-2.2.7 :file:`root/rhodecode/data/production.ini`
29 * |RCE| Pre-2.2.7 :file:`root/rhodecode/data/production.ini`
30 * |RCE| 3.0 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
30 * |RCE| 3.0 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
31
31
32 To configure the white list, edit this section of the file. In this
32 To configure the white list, edit this section of the file. In this
33 configuration example, API access is granted to the patch/diff raw file and
33 configuration example, API access is granted to the patch/diff raw file and
34 archive.
34 archive.
35
35
36 .. code-block:: ini
36 .. code-block:: ini
37
37
38 ## List of controllers (using glob syntax) that AUTH TOKENS could be used for access.
38 ## List of controllers (using glob syntax) that AUTH TOKENS could be used for access.
39 ## Adding ?auth_token = <token> to the url authenticates this request as if it
39 ## Adding ?auth_token = <token> to the url authenticates this request as if it
40 ## came from the the logged in user who own this authentication token.
40 ## came from the the logged in user who own this authentication token.
41 ##
41 ##
42 ## Syntax is <ControllerClass>:<function_pattern>.
42 ## Syntax is <ControllerClass>:<function_pattern>.
43 ## The list should be "," separated and on a single line.
43 ## The list should be "," separated and on a single line.
44 ##
44 ##
45 api_access_controllers_whitelist = RepoCommitsView:repo_commit_raw,RepoCommitsView:repo_commit_patch,RepoCommitsView:repo_commit_download
45 api_access_controllers_whitelist = RepoCommitsView:repo_commit_raw,RepoCommitsView:repo_commit_patch,RepoCommitsView:repo_commit_download
46
46
47 After this change, a |RCE| view can be accessed without login by adding a
47 After this change, a |RCE| view can be accessed without login by adding a
48 GET parameter ``?auth_token=<auth_token>`` to a url. For example to
48 GET parameter ``?auth_token=<auth_token>`` to a url. For example to
49 access the raw diff.
49 access the raw diff.
50
50
51 .. code-block:: html
51 .. code-block:: html
52
52
53 http://<server>/<repo>/changeset-diff/<sha>?auth_token=<auth_token>
53 http://<server>/<repo>/changeset-diff/<sha>?auth_token=<auth_token>
54
54
55 By default this is only enabled on RSS/ATOM feed views. Exposing raw diffs is a
55 By default this is only enabled on RSS/ATOM feed views. Exposing raw diffs is a
56 good way to integrate with 3rd party services like code review, or build farms
56 good way to integrate with 3rd party services like code review, or build farms
57 that could download archives.
57 that could download archives.
58
58
59 API ACCESS
59 API ACCESS
60 ----------
60 ----------
61
61
62 All clients are required to send JSON-RPC spec JSON data.
62 All clients are required to send JSON-RPC spec JSON data.
63
63
64 .. code-block:: bash
64 .. code-block:: bash
65
65
66 {
66 {
67 "id:"<id>",
67 "id:"<id>",
68 "auth_token":"<auth_token>",
68 "auth_token":"<auth_token>",
69 "method":"<method_name>",
69 "method":"<method_name>",
70 "args":{"<arg_key>":"<arg_val>"}
70 "args":{"<arg_key>":"<arg_val>"}
71 }
71 }
72
72
73 Example call for auto pulling from remote repositories using curl:
73 Example call for auto pulling from remote repositories using curl:
74
74
75 .. code-block:: bash
75 .. code-block:: bash
76
76
77 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,
77 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,
78 "auth_token":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull", "args":{"repoid":"CPython"}}'
78 "auth_token":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull", "args":{"repoid":"CPython"}}'
79
79
80 Provide those parameters:
80 Provide those parameters:
81 - **id** A value of any type, which is used to match the response with the
81 - **id** A value of any type, which is used to match the response with the
82 request that it is replying to.
82 request that it is replying to.
83 - **auth_token** for access and permission validation.
83 - **auth_token** for access and permission validation.
84 - **method** is name of method to call
84 - **method** is name of method to call
85 - **args** is an ``key:value`` list of arguments to pass to method
85 - **args** is an ``key:value`` list of arguments to pass to method
86
86
87 .. note::
87 .. note::
88
88
89 To get your |authtoken|, from the |RCE| interface,
89 To get your |authtoken|, from the |RCE| interface,
90 go to:
90 go to:
91 :menuselection:`username --> My account --> Auth tokens`
91 :menuselection:`username --> My account --> Auth tokens`
92
92
93 For security reasons you should always create a dedicated |authtoken| for
93 For security reasons you should always create a dedicated |authtoken| for
94 API use only.
94 API use only.
95
95
96
96
97 The |RCE| API will always return a JSON-RPC response:
97 The |RCE| API will always return a JSON-RPC response:
98
98
99 .. code-block:: bash
99 .. code-block:: bash
100
100
101 {
101 {
102 "id": <id>, # matching id sent by request
102 "id": <id>, # matching id sent by request
103 "result": "<result>"|null, # JSON formatted result, null if any errors
103 "result": "<result>"|null, # JSON formatted result, null if any errors
104 "error": "null"|<error_message> # JSON formatted error (if any)
104 "error": "null"|<error_message> # JSON formatted error (if any)
105 }
105 }
106
106
107 All responses from API will be with `HTTP/1.0 200 OK` status code.
107 All responses from API will be with `HTTP/1.0 200 OK` status code.
108 If there is an error when calling the API, the *error* key will contain a
108 If there is an error when calling the API, the *error* key will contain a
109 failure description and the *result* will be `null`.
109 failure description and the *result* will be `null`.
110
110
111 API CLIENT
111 API CLIENT
112 ----------
112 ----------
113
113
114 To install the |RCE| API, see :ref:`install-tools`. To configure the API per
114 To install the |RCE| API, see :ref:`install-tools`. To configure the API per
115 instance, see the :ref:`rc-tools` section as you need to configure a
115 instance, see the :ref:`rc-tools` section as you need to configure a
116 :file:`~/.rhoderc` file with your |authtokens|.
116 :file:`~/.rhoderc` file with your |authtokens|.
117
117
118 Once you have set up your instance API access, use the following examples to
118 Once you have set up your instance API access, use the following examples to
119 get started.
119 get started.
120
120
121 .. code-block:: bash
121 .. code-block:: bash
122
122
123 # Getting the 'rhodecode' repository
123 # Getting the 'rhodecode' repository
124 # from a RhodeCode Enterprise instance
124 # from a RhodeCode Enterprise instance
125 rhodecode-api --instance-name=enterprise-1 get_repo repoid:rhodecode
125 rhodecode-api --instance-name=enterprise-1 get_repo repoid:rhodecode
126
126
127 Calling method get_repo => http://127.0.0.1:5000
127 Calling method get_repo => http://127.0.0.1:5000
128 Server response
128 Server response
129 {
129 {
130 <json data>
130 <json data>
131 }
131 }
132
132
133 # Creating a new mercurial repository called 'brand-new'
133 # Creating a new mercurial repository called 'brand-new'
134 # with a description 'Repo-description'
134 # with a description 'Repo-description'
135 rhodecode-api --instance-name=enterprise-1 create_repo repo_name:brand-new repo_type:hg description:Repo-description
135 rhodecode-api --instance-name=enterprise-1 create_repo repo_name:brand-new repo_type:hg description:Repo-description
136 {
136 {
137 "error": null,
137 "error": null,
138 "id": 1110,
138 "id": 1110,
139 "result": {
139 "result": {
140 "msg": "Created new repository `brand-new`",
140 "msg": "Created new repository `brand-new`",
141 "success": true,
141 "success": true,
142 "task": null
142 "task": null
143 }
143 }
144 }
144 }
145
145
146 A broken example, what not to do.
146 A broken example, what not to do.
147
147
148 .. code-block:: bash
148 .. code-block:: bash
149
149
150 # A call missing the required arguments
150 # A call missing the required arguments
151 # and not specifying the instance
151 # and not specifying the instance
152 rhodecode-api get_repo
152 rhodecode-api get_repo
153
153
154 Calling method get_repo => http://127.0.0.1:5000
154 Calling method get_repo => http://127.0.0.1:5000
155 Server response
155 Server response
156 "Missing non optional `repoid` arg in JSON DATA"
156 "Missing non optional `repoid` arg in JSON DATA"
157
157
158 You can specify pure JSON using the ``--format`` parameter.
158 You can specify pure JSON using the ``--format`` parameter.
159
159
160 .. code-block:: bash
160 .. code-block:: bash
161
161
162 rhodecode-api --format=json get_repo repoid:rhodecode
162 rhodecode-api --format=json get_repo repoid:rhodecode
163
163
164 In such case only output that this function shows is pure JSON, we can use that
164 In such case only output that this function shows is pure JSON, we can use that
165 and pipe output to some json formatter.
165 and pipe output to some json formatter.
166
166
167 If output is in pure JSON format, you can pipe output to a JSON formatter.
167 If output is in pure JSON format, you can pipe output to a JSON formatter.
168
168
169 .. code-block:: bash
169 .. code-block:: bash
170
170
171 rhodecode-api --instance-name=enterprise-1 --format=json get_repo repoid:rhodecode | python -m json.tool
171 rhodecode-api --instance-name=enterprise-1 --format=json get_repo repoid:rhodecode | python -m json.tool
172
172
173 API METHODS
173 API METHODS
174 -----------
174 -----------
175
175
176 Each method by default required following arguments.
176 Each method by default required following arguments.
177
177
178 .. code-block:: bash
178 .. code-block:: bash
179
179
180 id : "<id_for_response>"
180 id : "<id_for_response>"
181 auth_token : "<auth_token>"
181 auth_token : "<auth_token>"
182 method : "<method name>"
182 method : "<method name>"
183 args : {}
183 args : {}
184
184
185 Use each **param** from docs and put it in args, Optional parameters
185 Use each **param** from docs and put it in args, Optional parameters
186 are not required in args.
186 are not required in args.
187
187
188 .. code-block:: bash
188 .. code-block:: bash
189
189
190 args: {"repoid": "rhodecode"}
190 args: {"repoid": "rhodecode"}
191
191
192 .. Note: From this point on things are generated by the script in
192 .. Note: From this point on things are generated by the script in
193 `scripts/fabfile.py`. To change things below, update the docstrings in the
193 `scripts/fabfile.py`. To change things below, update the docstrings in the
194 ApiController.
194 ApiController.
195
195
196 .. --- API DEFS MARKER ---
196 .. --- API DEFS MARKER ---
197 .. toctree::
197 .. toctree::
198
198
199 methods/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
206 methods/repo-group-methods
205 methods/repo-group-methods
207 methods/search-methods
206 methods/search-methods
208 methods/server-methods
207 methods/server-methods
209 methods/user-methods
208 methods/user-methods
210 methods/user-group-methods
209 methods/user-group-methods
@@ -1,311 +1,347 b''
1 # -*- coding: utf-8 -*-
1 # Configuration file for the Sphinx documentation builder.
2 #
3 # RhodeCode Enterprise documentation build configuration file, created by
4 # sphinx-quickstart on Tue Nov 4 11:48:37 2014.
5 #
6 # This file is execfile()d with the current directory set to its
7 # containing dir.
8 #
2 #
9 # Note that not all possible configuration values are present in this
3 # For the full list of built-in configuration values, see the documentation:
10 # autogenerated file.
4 # https://www.sphinx-doc.org/en/master/usage/configuration.html
11 #
5
12 # All configuration values have a default; values that are commented out
6 # -- Project information -----------------------------------------------------
13 # serve to show the default.
7 # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
14
8
9 import os
15 import sys
10 import sys
16 import os
17 import datetime
11 import datetime
18 import sphinx_rtd_theme
12
13 # sphinx injects tags magically during build, we re-define it here to make linters happy
14 tags = tags # noqa
19
15
20 # If extensions (or modules to document with autodoc) are in another directory,
16 # If extensions (or modules to document with autodoc) are in another directory,
21 # add these directories to sys.path here. If the directory is relative to the
17 # add these directories to sys.path here. If the directory is relative to the
22 # documentation root, use os.path.abspath to make it absolute, like shown here.
18 # documentation root, use os.path.abspath to make it absolute, like shown here.
23 sys.path.insert(0, os.path.abspath('.'))
19 sys.path.insert(0, os.path.abspath("."))
24 import common
20
21
22 def _get_version():
23 with open("../rhodecode/VERSION") as f:
24 return f.read().strip()
25
26
27 now = datetime.datetime.today()
28
29 # The full project version, used as the replacement for |release| and e.g. in the HTML templates.
30 # For example, for the Python documentation, this may be something like 2.6.0rc1.
31 # If you don’t need the separation provided between version and release, just set them both to the same value.
32 release = _get_version()
33
34 # The major project version, used as the replacement for |version|.
35 # For example, for the Python documentation, this may be something like 2.6.
36 version = ".".join(release.split(".", 2)[:2]) # First two parts of release
37
38
39 # General information about the project.
40 project = "RhodeCode Enterprise"
41 copyright = f"2010-{now.year}, RhodeCode GmbH"
42 author = "RhodeCode GmbH"
25
43
26 # -- General configuration ------------------------------------------------
44 # -- General configuration ------------------------------------------------
27
45
28 # If your documentation needs a minimal Sphinx version, state it here.
46 # If your documentation needs a minimal Sphinx version, state it here.
29 #needs_sphinx = '1.0'
47 # needs_sphinx = '1.0'
30
48
31 # Add any Sphinx extension module names here, as strings. They can be
49 # Add any Sphinx extension module names here, as strings. They can be
32 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
50 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
33 # ones.
51 # ones.
34 extensions = [
52 extensions = [
35 'sphinx.ext.autodoc',
53 "sphinx.ext.autodoc",
36 'sphinx.ext.intersphinx',
54 "sphinx.ext.intersphinx",
37 'sphinx.ext.todo',
55 "sphinx.ext.todo",
38 'sphinx.ext.imgmath'
56 "sphinx.ext.imgmath",
39 ]
57 ]
40
58
41 intersphinx_mapping = {
59 intersphinx_mapping = {
42 'enterprise': ('https://docs.rhodecode.com/RhodeCode-Enterprise/', None),
60 "enterprise": ("https://docs.rhodecode.com/RhodeCode-Enterprise/", None),
43 'control': ('https://docs.rhodecode.com/RhodeCode-Control/', None),
61 "rcstack": ("https://docs.rhodecode.com/rcstack/", None),
62 "control": ("https://docs.rhodecode.com/RhodeCode-Control/", None),
44 }
63 }
45
64
46 # Add any paths that contain templates here, relative to this directory.
65 # Add any paths that contain templates here, relative to this directory.
47 templates_path = ['_templates']
66 templates_path = ["_templates"]
48
67
49 # The suffix of source filenames.
68 # The suffix of source filenames.
50 source_suffix = '.rst'
69 source_suffix = ".rst"
51
70
52 # The encoding of source files.
71 # The encoding of source files.
53 #source_encoding = 'utf-8-sig'
72 # source_encoding = 'utf-8-sig'
54
73
55 # The master toctree document.
74 # The master toctree document.
56 master_doc = 'index'
75 master_doc = "index"
57
76
58 # The version info for the project you're documenting, acts as replacement for
77 # The version info for the project you're documenting, acts as replacement for
59 # |version| and |release|, also used in various other places throughout the
78 # |version| and |release|, also used in various other places throughout the
60 # built documents.
79 # built documents.
61
80
62
81
63 def _get_version():
64 with open('../rhodecode/VERSION') as f:
65 return f.read().strip()
66
67
68 # The full version, including alpha/beta/rc tags.
69 release = _get_version()
70 # The short X.Y version.
71 version = '.'.join(release.split('.', 2)[:2]) # First two parts of release
72
73 # General information about the project.
74 project = u'RhodeCode Enterprise %s ' % _get_version()
75 copyright = u'2010-{now.year}, RhodeCode GmbH'.format(
76 now=datetime.datetime.today())
77
78
79 # The language for content autogenerated by Sphinx. Refer to documentation
82 # The language for content autogenerated by Sphinx. Refer to documentation
80 # for a list of supported languages.
83 # for a list of supported languages.
81 #language = None
84 # language = None
82
85
83 rst_epilog = common.rst_epilog + """
86 rst_epilog = """
84 .. |async| replace:: asynchronous
87 .. |async| replace:: asynchronous
88 .. |AE| replace:: Appenlight
89 .. |authtoken| replace:: Authentication Token
90 .. |authtokens| replace:: **Auth Tokens**
91 .. |RCCEshort| replace:: Community
92 .. |RCEEshort| replace:: Enterprise
93 .. |git| replace:: Git
94 .. |hg| replace:: Mercurial
95 .. |svn| replace:: Subversion
96 .. |LDAP| replace:: LDAP / Active Directory
97 .. |os| replace:: operating system
98 .. |OS| replace:: Operating System
99 .. |PY| replace:: Python
100 .. |pr| replace:: pull request
101 .. |prs| replace:: pull requests
102 .. |psf| replace:: Python Software Foundation
103 .. |repo| replace:: repository
104 .. |repos| replace:: repositories
105 .. |RCC| replace:: RhodeCode Control
106 .. |RCE| replace:: RhodeCode Enterprise
107 .. |RCCE| replace:: RhodeCode Community
108 .. |RCEE| replace:: RhodeCode Enterprise
109 .. |RCX| replace:: RhodeCode Extensions
110 .. |RCT| replace:: RhodeCode Tools
111 .. |RCEBOLD| replace:: **RhodeCode Enterprise**
112 .. |RCEITALICS| replace:: `RhodeCode Enterprise`
113 .. |RNS| replace:: Release Notes
85 """
114 """
86
115
87 # There are two options for replacing |today|: either, you set today to some
116 # There are two options for replacing |today|: either, you set today to some
88 # non-false value, then it is used:
117 # non-false value, then it is used:
89 #today = ''
118 # today = ''
90 # Else, today_fmt is used as the format for a strftime call.
119 # Else, today_fmt is used as the format for a strftime call.
91 #today_fmt = '%B %d, %Y'
120 # today_fmt = '%B %d, %Y'
92
121
93 # List of patterns, relative to source directory, that match files and
122 # List of patterns, relative to source directory, that match files and
94 # directories to ignore when looking for source files.
123 # directories to ignore when looking for source files.
95 exclude_patterns = [
124 exclude_patterns = [
96 # Special directories
125 # Special directories
97 '_build',
126 "_build",
98 'result',
127 "result",
99
100 # Other RST files
128 # Other RST files
101 'admin/rhodecode-backup.rst',
129 "admin/rhodecode-backup.rst",
102 'issue-trackers/redmine.rst',
130 "issue-trackers/redmine.rst",
103 'known-issues/error-msg-guide.rst',
131 "known-issues/error-msg-guide.rst",
104 'tutorials/docs-build.rst',
132 "tutorials/docs-build.rst",
105 'integrations/example-ext.py',
133 "integrations/example-ext.py",
106 'collaboration/supported-workflows.rst',
134 "collaboration/supported-workflows.rst",
107 ]
135 ]
108
136
109
137
110 # The reST default role (used for this markup: `text`) to use for all
138 # The reST default role (used for this markup: `text`) to use for all
111 # documents.
139 # documents.
112 #default_role = None
140 # default_role = None
113
141
114 # If true, '()' will be appended to :func: etc. cross-reference text.
142 # If true, '()' will be appended to :func: etc. cross-reference text.
115 #add_function_parentheses = True
143 # add_function_parentheses = True
116
144
117 # If true, the current module name will be prepended to all description
145 # If true, the current module name will be prepended to all description
118 # unit titles (such as .. function::).
146 # unit titles (such as .. function::).
119 #add_module_names = True
147 # add_module_names = True
120
148
121 # If true, sectionauthor and moduleauthor directives will be shown in the
149 # If true, sectionauthor and moduleauthor directives will be shown in the
122 # output. They are ignored by default.
150 # output. They are ignored by default.
123 #show_authors = False
151 # show_authors = False
124
152
125 # The name of the Pygments (syntax highlighting) style to use.
153 # The name of the Pygments (syntax highlighting) style to use.
126 pygments_style = 'sphinx'
154 pygments_style = "sphinx"
127
155
128 # A list of ignored prefixes for module index sorting.
156 # A list of ignored prefixes for module index sorting.
129 #modindex_common_prefix = []
157 # modindex_common_prefix = []
130
158
131 # If true, keep warnings as "system message" paragraphs in the built documents.
159 # If true, keep warnings as "system message" paragraphs in the built documents.
132 keep_warnings = tags.has("dev")
160 keep_warnings = tags.has("dev")
133
161
134
162
135 # -- Options for HTML output ----------------------------------------------
163 # -- Options for HTML output ----------------------------------------------
136
164
137 # The theme to use for HTML and HTML Help pages. See the documentation for
165 # The theme to use for HTML and HTML Help pages. See the documentation for
138 # a list of builtin themes.
166 # a list of builtin themes.
139 #html_theme = 'rctheme'
167 html_theme = "furo"
140 html_theme = 'sphinx_rtd_theme'
141
168
142 # Theme options are theme-specific and customize the look and feel of a theme
169 # Theme options are theme-specific and customize the look and feel of a theme
143 # further. For a list of options available for each theme, see the
170 # further. For a list of options available for each theme, see the
144 # documentation.
171 # documentation.
145 #html_theme_options = {}
172 # html_theme_options = {}
146 html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
173
147
174
148 # Add any paths that contain custom themes here, relative to this directory.
175 # Add any paths that contain custom themes here, relative to this directory.
149 #html_theme_path = []
176 # html_theme_path = []
150
177
151 # The name for this set of Sphinx documents. If None, it defaults to
178 # The name for this set of Sphinx documents. If None, it defaults to
152 # "<project> v<release> documentation".
179 # "<project> v<release> documentation".
153 #html_title = None
180 # html_title = None
154
181
155 # A shorter title for the navigation bar. Default is the same as html_title.
182 # A shorter title for the navigation bar. Default is the same as html_title.
156 #html_short_title = None
183 # html_short_title = None
157
184
158 # The name of an image file (relative to this directory) to place at the top
185 # The name of an image file (relative to this directory) to place at the top
159 # of the sidebar.
186 # of the sidebar.
160 #html_logo = None
187 # html_logo = None
161 html_sidebars = {
188
162 '**': ['globaltoc.html'],
189
163 }
190 #html_sidebars = {
191 # "**": ["globaltoc.html"],
192 #}
164
193
165 # The name of an image file (within the static path) to use as favicon of the
194 # The name of an image file (within the static path) to use as favicon of the
166 # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
195 # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
167 # pixels large.
196 # pixels large.
168 html_favicon = 'images/favicon.ico'
197 html_favicon = "images/favicon.ico"
169
198
170 # Add any paths that contain custom static files (such as style sheets) here,
199 # Add any paths that contain custom static files (such as style sheets) here,
171 # relative to this directory. They are copied after the builtin static files,
200 # relative to this directory. They are copied after the builtin static files,
172 # so a file named "default.css" will overwrite the builtin "default.css".
201 # so a file named "default.css" will overwrite the builtin "default.css".
173 html_static_path = ['static/css/add.css']
202 html_static_path = ["static/css/add.css"]
174
203
175 # Add any extra paths that contain custom files (such as robots.txt or
204 # Add any extra paths that contain custom files (such as robots.txt or
176 # .htaccess) here, relative to this directory. These files are copied
205 # .htaccess) here, relative to this directory. These files are copied
177 # directly to the root of the documentation.
206 # directly to the root of the documentation.
178 #html_extra_path = []
207 # html_extra_path = []
179
208
180 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
209 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
181 # using the given strftime format.
210 # using the given strftime format.
182 #html_last_updated_fmt = '%b %d, %Y'
211 html_last_updated_fmt = " %H:%m %b %d, %Y"
183
212
184 # If true, SmartyPants will be used to convert quotes and dashes to
213 # If true, SmartyPants will be used to convert quotes and dashes to
185 # typographically correct entities.
214 # typographically correct entities.
186 #html_use_smartypants = True
215 # html_use_smartypants = True
187
216
188 # Custom sidebar templates, maps document names to template names.
217 # Custom sidebar templates, maps document names to template names.
189 #html_sidebars = {}
218 # html_sidebars = {}
190
219
191 # Additional templates that should be rendered to pages, maps page names to
220 # Additional templates that should be rendered to pages, maps page names to
192 # template names.
221 # template names.
193 #html_additional_pages = {}
222 # html_additional_pages = {}
194
223
195 # If false, no module index is generated.
224 # If false, no module index is generated.
196 #html_domain_indices = True
225 # html_domain_indices = True
197
226
198 # If false, no index is generated.
227 # If false, no index is generated.
199 #html_use_index = True
228 # html_use_index = True
200
229
201 # If true, the index is split into individual pages for each letter.
230 # If true, the index is split into individual pages for each letter.
202 #html_split_index = False
231 # html_split_index = False
203
232
204 # If true, links to the reST sources are added to the pages.
233 # If true, links to the reST sources are added to the pages.
205 #html_show_sourcelink = True
234 # html_show_sourcelink = True
206
235
207 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
236 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
208 #html_show_sphinx = True
237 html_show_sphinx = False
209
238
210 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
239 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
211 #html_show_copyright = True
240 # html_show_copyright = True
212
241
213 # If true, an OpenSearch description file will be output, and all pages will
242 # If true, an OpenSearch description file will be output, and all pages will
214 # contain a <link> tag referring to it. The value of this option must be the
243 # contain a <link> tag referring to it. The value of this option must be the
215 # base URL from which the finished HTML is served.
244 # base URL from which the finished HTML is served.
216 #html_use_opensearch = ''
245 # html_use_opensearch = ''
217
246
218 # This is the file name suffix for HTML files (e.g. ".xhtml").
247 # This is the file name suffix for HTML files (e.g. ".xhtml").
219 #html_file_suffix = None
248 # html_file_suffix = None
220
249
221 # Output file base name for HTML help builder.
250 # Output file base name for HTML help builder.
222 htmlhelp_basename = 'rhodecode-enterprise'
251 htmlhelp_basename = "rhodecode-enterprise"
223
252
224
253
225 # -- Options for LaTeX output ---------------------------------------------
254 # -- Options for LaTeX output ---------------------------------------------
226
255
227 latex_elements = {
256 latex_elements = {
228 'classoptions': ',oneside',
257 "classoptions": ",oneside",
229 'babel': '\\usepackage[english]{babel}',
258 "babel": "\\usepackage[english]{babel}",
230
259 # The paper size ('letterpaper' or 'a4paper').
231 # The paper size ('letterpaper' or 'a4paper').
260 #'papersize': 'letterpaper',
232 #'papersize': 'letterpaper',
261 # The font size ('10pt', '11pt' or '12pt').
233
262 #'pointsize': '10pt',
234 # The font size ('10pt', '11pt' or '12pt').
263 # Additional stuff for the LaTeX preamble.
235 #'pointsize': '10pt',
264 #'preamble': '',
236
237 # Additional stuff for the LaTeX preamble.
238 #'preamble': '',
239 }
265 }
240
266
241 # Grouping the document tree into LaTeX files. List of tuples
267 # Grouping the document tree into LaTeX files. List of tuples
242 # (source start file, target name, title,
268 # (source start file, target name, title,
243 # author, documentclass [howto, manual, or own class]).
269 # author, documentclass [howto, manual, or own class]).
244 latex_documents = [
270 latex_documents = [
245 ('index', 'RhodeCodeEnterprise.tex', u'RhodeCode Enterprise',
271 (
246 u'RhodeCode GmbH', 'manual'),
272 "index",
273 "RhodeCodeEnterprise.tex",
274 "RhodeCode Enterprise",
275 "RhodeCode GmbH",
276 "manual",
277 ),
247 ]
278 ]
248
279
249 # The name of an image file (relative to this directory) to place at the top of
280 # The name of an image file (relative to this directory) to place at the top of
250 # the title page.
281 # the title page.
251 #latex_logo = None
282 # latex_logo = None
252
283
253 # For "manual" documents, if this is true, then toplevel headings are parts,
284 # For "manual" documents, if this is true, then toplevel headings are parts,
254 # not chapters.
285 # not chapters.
255 #latex_use_parts = False
286 # latex_use_parts = False
256
287
257 # If true, show page references after internal links.
288 # If true, show page references after internal links.
258 latex_show_pagerefs = True
289 latex_show_pagerefs = True
259
290
260 # If true, show URL addresses after external links.
291 # If true, show URL addresses after external links.
261 latex_show_urls = 'footnote'
292 latex_show_urls = "footnote"
262
293
263 # Documents to append as an appendix to all manuals.
294 # Documents to append as an appendix to all manuals.
264 #latex_appendices = []
295 # latex_appendices = []
265
296
266 # If false, no module index is generated.
297 # If false, no module index is generated.
267 #latex_domain_indices = True
298 # latex_domain_indices = True
268
299
269 # Mode for literal blocks wider than the frame. Can be
300 # Mode for literal blocks wider than the frame. Can be
270 # overflow, shrink or truncate
301 # overflow, shrink or truncate
271 pdf_fit_mode = "truncate"
302 pdf_fit_mode = "truncate"
272
303
273
304
274 # -- Options for manual page output ---------------------------------------
305 # -- Options for manual page output ---------------------------------------
275
306
276 # One entry per manual page. List of tuples
307 # One entry per manual page. List of tuples
277 # (source start file, name, description, authors, manual section).
308 # (source start file, name, description, authors, manual section).
278 man_pages = [
309 man_pages = [
279 ('index', 'rhodecodeenterprise', u'RhodeCode Enterprise',
310 ("index", "rhodecodeenterprise", "RhodeCode Enterprise", ["RhodeCode GmbH"], 1)
280 [u'RhodeCode GmbH'], 1)
281 ]
311 ]
282
312
283 # If true, show URL addresses after external links.
313 # If true, show URL addresses after external links.
284 #man_show_urls = False
314 # man_show_urls = False
285
315
286
316
287 # -- Options for Texinfo output -------------------------------------------
317 # -- Options for Texinfo output -------------------------------------------
288
318
289 # Grouping the document tree into Texinfo files. List of tuples
319 # Grouping the document tree into Texinfo files. List of tuples
290 # (source start file, target name, title, author,
320 # (source start file, target name, title, author,
291 # dir menu entry, description, category)
321 # dir menu entry, description, category)
292 texinfo_documents = [
322 texinfo_documents = [
293 ('index', 'RhodeCodeEnterprise', u'RhodeCode Enterprise',
323 (
294 u'RhodeCode Docs Team', 'RhodeCodeEnterprise', 'RhodeCode Docs Project',
324 "index",
295 'Miscellaneous'),
325 "RhodeCodeEnterprise",
326 "RhodeCode Enterprise",
327 "RhodeCode Docs Team",
328 "RhodeCodeEnterprise",
329 "RhodeCode Docs Project",
330 "Miscellaneous",
331 ),
296 ]
332 ]
297
333
298 # Documents to append as an appendix to all manuals.
334 # Documents to append as an appendix to all manuals.
299 #texinfo_appendices = []
335 # texinfo_appendices = []
300
336
301 # If false, no module index is generated.
337 # If false, no module index is generated.
302 #texinfo_domain_indices = True
338 # texinfo_domain_indices = True
303
339
304 # How to display URL addresses: 'footnote', 'no', or 'inline'.
340 # How to display URL addresses: 'footnote', 'no', or 'inline'.
305 #texinfo_show_urls = 'footnote'
341 # texinfo_show_urls = 'footnote'
306
342
307 # If true, do not generate a @detailmenu in the "Top" node's menu.
343 # If true, do not generate a @detailmenu in the "Top" node's menu.
308 #texinfo_no_detailmenu = False
344 # texinfo_no_detailmenu = False
309
345
310 # We want to see todo notes in case of a pre-release build of the documentation
346 # We want to see todo notes in case of a pre-release build of the documentation
311 todo_include_todos = tags.has("dev")
347 todo_include_todos = tags.has("dev")
@@ -1,85 +1,85 b''
1
1
2 .. _config-celery:
2 .. _config-celery:
3
3
4 Configure Celery
4 Configure Celery
5 ----------------
5 ----------------
6
6
7 Celery_ is an asynchronous task queue. It's a part of RhodeCode scheduler
7 Celery_ is an asynchronous task queue. It's a part of RhodeCode scheduler
8 functionality. Celery_ makes certain heavy tasks perform more efficiently.
8 functionality. Celery_ makes certain heavy tasks perform more efficiently.
9 Most important it allows sending notification emails, create repository forks,
9 Most important it allows sending notification emails, create repository forks,
10 and import repositories in async way. It is also used for bi-directional
10 and import repositories in async way. It is also used for bi-directional
11 repository sync in scheduler.
11 repository sync in scheduler.
12
12
13 If you decide to use Celery you also need a working message queue.
13 If you decide to use Celery you also need a working message queue.
14 There are two fully supported message brokers is rabbitmq_ and redis_ (recommended).
14 There are two fully supported message brokers is rabbitmq_ and redis_ (recommended).
15
15
16 Since release 4.18.X we recommend using redis_ as a backend since it's generally
16 Since release 4.18.X we recommend using redis_ as a backend since it's generally
17 easier to work with, and results in simpler stack as redis is generally recommended
17 easier to work with, and results in simpler stack as redis is generally recommended
18 for caching purposes.
18 for caching purposes.
19
19
20
20
21 In order to install and configure Celery, follow these steps:
21 In order to install and configure Celery, follow these steps:
22
22
23 1. Install RabbitMQ or Redis for a message queue, see the documentation on the Celery website for
23 1. Install RabbitMQ or Redis for a message queue, see the documentation on the Celery website for
24 `redis installation`_ or `rabbitmq installation`_
24 `redis installation`_ or `rabbitmq installation`_
25
25
26
26
27 1a. If you choose RabbitMQ example configuration after installation would look like that::
27 1a. If you choose RabbitMQ example configuration after installation would look like that::
28
28
29 sudo rabbitmqctl add_user rcuser secret_password
29 sudo rabbitmqctl add_user rcuser secret_password
30 sudo rabbitmqctl add_vhost rhodevhost
30 sudo rabbitmqctl add_vhost rhodevhost
31 sudo rabbitmqctl set_user_tags rcuser rhodecode
31 sudo rabbitmqctl set_user_tags rcuser rhodecode
32 sudo rabbitmqctl set_permissions -p rhodevhost rcuser ".*" ".*" ".*"
32 sudo rabbitmqctl set_permissions -p rhodevhost rcuser ".*" ".*" ".*"
33
33
34
34
35 2. Enable celery, and install `celery worker` process script using the `enable-module`::
35 2. Enable celery, and install `celery worker` process script using the `enable-module`::
36
36
37 rccontrol enable-module celery {instance-id}
37 rccontrol enable-module celery {instance-id}
38
38
39 .. note::
39 .. note::
40
40
41 In case when using multiple instances in one or multiple servers it's highly
41 In case when using multiple instances in one or multiple servers it's highly
42 recommended that celery is running only once, for all servers connected to
42 recommended that celery is running only once, for all servers connected to
43 the same database. Having multiple celery instances running without special
43 the same database. Having multiple celery instances running without special
44 reconfiguration could cause scheduler issues.
44 reconfiguration could cause scheduler issues.
45
45
46
46
47 3. Configure Celery in the
47 3. Configure Celery in the
48 :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
48 :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
49 Set the broker_url as minimal settings required to enable operation.
49 Set the broker_url as minimal settings required to enable operation.
50 If used our example data from pt 1a, here is how the broker url should look like::
50 If used our example data from pt 1a, here is how the broker url should look like::
51
51
52 # for Redis
52 # for Redis
53 celery.broker_url = redis://localhost:6379/8
53 celery.broker_url = redis://localhost:6379/8
54
54
55 # for RabbitMQ
55 # for RabbitMQ
56 celery.broker_url = amqp://rcuser:secret_password@localhost:5672/rhodevhost
56 celery.broker_url = amqp://rcuser:secret_password@localhost:5672/rhodevhost
57
57
58 Full configuration example is below:
58 Full configuration example is below:
59
59
60 .. code-block:: ini
60 .. code-block:: ini
61
61
62 # Set this section of the ini file to match your Celery installation
62 # Set this section of the ini file to match your Celery installation
63 ####################################
63 ####################################
64 ### CELERY CONFIG ####
64 ### CELERY CONFIG ####
65 ####################################
65 ####################################
66
66
67 use_celery = true
67 use_celery = true
68 celery.broker_url = redis://localhost:6379/8
68 celery.broker_url = redis://localhost:6379/8
69
69
70 # maximum tasks to execute before worker restart
70 # maximum tasks to execute before worker restart
71 celery.max_tasks_per_child = 100
71 celery.max_tasks_per_child = 20
72
72
73 ## tasks will never be sent to the queue, but executed locally instead.
73 ## tasks will never be sent to the queue, but executed locally instead.
74 celery.task_always_eager = false
74 celery.task_always_eager = false
75
75
76
76
77 .. _python: http://www.python.org/
77 .. _python: http://www.python.org/
78 .. _mercurial: http://mercurial.selenic.com/
78 .. _mercurial: http://mercurial.selenic.com/
79 .. _celery: http://celeryproject.org/
79 .. _celery: http://celeryproject.org/
80 .. _redis: http://redis.io
80 .. _redis: http://redis.io
81 .. _redis installation: https://redis.io/topics/quickstart
81 .. _redis installation: https://redis.io/topics/quickstart
82 .. _rabbitmq: http://www.rabbitmq.com/
82 .. _rabbitmq: http://www.rabbitmq.com/
83 .. _rabbitmq installation: http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html
83 .. _rabbitmq installation: http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html
84 .. _rabbitmq website installation: http://www.rabbitmq.com/download.html
84 .. _rabbitmq website installation: http://www.rabbitmq.com/download.html
85 .. _Celery installation: http://docs.celeryproject.org/en/latest/getting-started/introduction.html#bundles
85 .. _Celery installation: http://docs.celeryproject.org/en/latest/getting-started/introduction.html#bundles
@@ -1,60 +1,58 b''
1 .. _integrations:
1 .. _integrations:
2
2
3 Integrations
3 Integrations
4 ------------
4 ------------
5
5
6 |RCE| supports integrations with external services for various events,
6 |RCE| supports integrations with external services for various events,
7 such as commit pushes and pull requests. Multiple integrations of the same type
7 such as commit pushes and pull requests. Multiple integrations of the same type
8 can be added at the same time; this is useful for posting different events to
8 can be added at the same time; this is useful for posting different events to
9 different Slack channels, for example.
9 different Slack channels, for example.
10
10
11 Supported integrations
11 Supported integrations
12 ^^^^^^^^^^^^^^^^^^^^^^
12 ^^^^^^^^^^^^^^^^^^^^^^
13
13
14 ================================ ================== ========================================
14 ================================ ================== ========================================
15 Type/Name RhodeCode Edition Description
15 Type/Name RhodeCode Edition Description
16 ================================ ================== ========================================
16 ================================ ================== ========================================
17 :ref:`integrations-webhook` |RCCEshort| Trigger events as `json` to a custom url
17 :ref:`integrations-webhook` |RCCEshort| Trigger events as `json` to a custom url
18 :ref:`integrations-slack` |RCCEshort| Integrate with https://slack.com/
18 :ref:`integrations-slack` |RCCEshort| Integrate with https://slack.com/
19 :ref:`integrations-hipchat` |RCCEshort| Integrate with https://www.hipchat.com/
20 :ref:`integrations-email` |RCCEshort| Send repo push commits by email
19 :ref:`integrations-email` |RCCEshort| Send repo push commits by email
21 :ref:`integrations-ci` |RCCEshort| Trigger Builds for Common CI Systems
20 :ref:`integrations-ci` |RCCEshort| Trigger Builds for Common CI Systems
22 :ref:`integrations-rcextensions` |RCCEshort| Advanced low-level integration framework
21 :ref:`integrations-rcextensions` |RCCEshort| Advanced low-level integration framework
23
22
24 :ref:`integrations-jenkins` |RCEEshort| Trigger Builds for Jenkins CI System
23 :ref:`integrations-jenkins` |RCEEshort| Trigger Builds for Jenkins CI System
25 :ref:`integrations-redmine` |RCEEshort| Close/Resolve/Reference Redmine issues
24 :ref:`integrations-redmine` |RCEEshort| Close/Resolve/Reference Redmine issues
26 :ref:`integrations-jira` |RCEEshort| Close/Resolve/Reference JIRA issues
25 :ref:`integrations-jira` |RCEEshort| Close/Resolve/Reference JIRA issues
27 ================================ ================== ========================================
26 ================================ ================== ========================================
28
27
29 .. _creating-integrations:
28 .. _creating-integrations:
30
29
31 Creating an Integration
30 Creating an Integration
32 ^^^^^^^^^^^^^^^^^^^^^^^
31 ^^^^^^^^^^^^^^^^^^^^^^^
33
32
34 Integrations can be added globally via the admin UI:
33 Integrations can be added globally via the admin UI:
35
34
36 :menuselection:`Admin --> Integrations`
35 :menuselection:`Admin --> Integrations`
37
36
38 or per repository in each repository's settings:
37 or per repository in each repository's settings:
39
38
40 :menuselection:`Admin --> Repositories --> Edit --> Integrations`
39 :menuselection:`Admin --> Repositories --> Edit --> Integrations`
41
40
42 To create an integration, select the type from the list in the *Create New
41 To create an integration, select the type from the list in the *Create New
43 Integration* section.
42 Integration* section.
44
43
45 The *Current Integrations* section shows existing integrations that have been
44 The *Current Integrations* section shows existing integrations that have been
46 created along with their type (eg. Slack) and enabled status.
45 created along with their type (eg. Slack) and enabled status.
47
46
48 See pages specific to each type of integration for more instructions:
47 See pages specific to each type of integration for more instructions:
49
48
50 .. toctree::
49 .. toctree::
51
50
52 slack
51 slack
53 hipchat
54 redmine
52 redmine
55 jira
53 jira
56 webhook
54 webhook
57 email
55 email
58 ci
56 ci
59 jenkins
57 jenkins
60 integrations-rcextensions
58 integrations-rcextensions
@@ -1,8 +1,11 b''
1 sphinx==1.8.2
1 sphinx==7.2.6
2 six==1.11.0
2
3 sphinx_rtd_theme==0.4.1
3 furo==2023.9.10
4 docutils==0.16.0
4 sphinx-press-theme==0.8.0
5 pygments==2.3.0
5 sphinx-rtd-theme==1.3.0
6 markupsafe==1.0.0
6
7 jinja2==2.9.6
7 pygments==2.16.1
8 pytz==2018.4
8
9 docutils<0.19
10 markupsafe==2.1.3
11 jinja2==3.1.2
@@ -1,187 +1,186 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/min/dropzone.min.js",
38 "<%= dirs.js.node_modules %>/dropzone/dist/min/dropzone.min.js",
39 "<%= dirs.js.node_modules %>/sweetalert2/dist/sweetalert2.min.js",
39 "<%= dirs.js.node_modules %>/sweetalert2/dist/sweetalert2.min.js",
40 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js",
40 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/sticky-sidebar.min.js",
41 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
41 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
42 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
42 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
43 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
43 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
44 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
45 "<%= dirs.js.src %>/logging.js",
44 "<%= dirs.js.src %>/logging.js",
46 "<%= dirs.js.src %>/bootstrap.js",
45 "<%= dirs.js.src %>/bootstrap.js",
47 "<%= dirs.js.src %>/i18n_utils.js",
46 "<%= dirs.js.src %>/i18n_utils.js",
48 "<%= dirs.js.src %>/deform.js",
47 "<%= dirs.js.src %>/deform.js",
49 "<%= dirs.js.src %>/ejs.js",
48 "<%= dirs.js.src %>/ejs.js",
50 "<%= dirs.js.src %>/ejs_templates/utils.js",
49 "<%= dirs.js.src %>/ejs_templates/utils.js",
51 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
50 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
52 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
51 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
53 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
52 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
54 "<%= dirs.js.src %>/plugins/within_viewport.js",
53 "<%= dirs.js.src %>/plugins/within_viewport.js",
55 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
54 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
56 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
55 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
57 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
56 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
58 "<%= dirs.js.src %>/plugins/jquery.scrollstop.js",
57 "<%= dirs.js.src %>/plugins/jquery.scrollstop.js",
59 "<%= dirs.js.src %>/plugins/jquery.within-viewport.js",
58 "<%= dirs.js.src %>/plugins/jquery.within-viewport.js",
60 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
59 "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js",
61 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
60 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
62 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
61 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
63 "<%= dirs.js.src %>/select2/select2.js",
62 "<%= dirs.js.src %>/select2/select2.js",
64 "<%= dirs.js.src %>/codemirror/codemirror.js",
63 "<%= dirs.js.src %>/codemirror/codemirror.js",
65 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
64 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
66 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
65 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
67 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
66 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
68 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
67 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
69 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
68 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
70 "<%= dirs.js.dest %>/mode/meta.js",
69 "<%= dirs.js.dest %>/mode/meta.js",
71 "<%= dirs.js.dest %>/mode/meta_ext.js",
70 "<%= dirs.js.dest %>/mode/meta_ext.js",
72 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
71 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
73 "<%= dirs.js.src %>/rhodecode/utils/array.js",
72 "<%= dirs.js.src %>/rhodecode/utils/array.js",
74 "<%= dirs.js.src %>/rhodecode/utils/string.js",
73 "<%= dirs.js.src %>/rhodecode/utils/string.js",
75 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
74 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
76 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
75 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
77 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
76 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
78 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
77 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
79 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
78 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
80 "<%= dirs.js.src %>/rhodecode/utils/os.js",
79 "<%= dirs.js.src %>/rhodecode/utils/os.js",
81 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
80 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
82 "<%= dirs.js.src %>/rhodecode/init.js",
81 "<%= dirs.js.src %>/rhodecode/init.js",
83 "<%= dirs.js.src %>/rhodecode/changelog.js",
82 "<%= dirs.js.src %>/rhodecode/changelog.js",
84 "<%= dirs.js.src %>/rhodecode/codemirror.js",
83 "<%= dirs.js.src %>/rhodecode/codemirror.js",
85 "<%= dirs.js.src %>/rhodecode/comments.js",
84 "<%= dirs.js.src %>/rhodecode/comments.js",
86 "<%= dirs.js.src %>/rhodecode/constants.js",
85 "<%= dirs.js.src %>/rhodecode/constants.js",
87 "<%= dirs.js.src %>/rhodecode/files.js",
86 "<%= dirs.js.src %>/rhodecode/files.js",
88 "<%= dirs.js.src %>/rhodecode/followers.js",
87 "<%= dirs.js.src %>/rhodecode/followers.js",
89 "<%= dirs.js.src %>/rhodecode/menus.js",
88 "<%= dirs.js.src %>/rhodecode/menus.js",
90 "<%= dirs.js.src %>/rhodecode/notifications.js",
89 "<%= dirs.js.src %>/rhodecode/notifications.js",
91 "<%= dirs.js.src %>/rhodecode/permissions.js",
90 "<%= dirs.js.src %>/rhodecode/permissions.js",
92 "<%= dirs.js.src %>/rhodecode/pjax.js",
91 "<%= dirs.js.src %>/rhodecode/pjax.js",
93 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
92 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
94 "<%= dirs.js.src %>/rhodecode/settings.js",
93 "<%= dirs.js.src %>/rhodecode/settings.js",
95 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
94 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
96 "<%= dirs.js.src %>/rhodecode/tooltips.js",
95 "<%= dirs.js.src %>/rhodecode/tooltips.js",
97 "<%= dirs.js.src %>/rhodecode/users.js",
96 "<%= dirs.js.src %>/rhodecode/users.js",
98 "<%= dirs.js.src %>/rhodecode/appenlight.js",
97 "<%= dirs.js.src %>/rhodecode/appenlight.js",
99 "<%= dirs.js.src %>/rhodecode.js",
98 "<%= dirs.js.src %>/rhodecode.js",
100 "<%= dirs.js.dest %>/rhodecode-components.js"
99 "<%= dirs.js.dest %>/rhodecode-components.js"
101 ],
100 ],
102 "dest": "<%= dirs.js.dest %>/scripts.js",
101 "dest": "<%= dirs.js.dest %>/scripts.js",
103 "nonull": true
102 "nonull": true
104 }
103 }
105 },
104 },
106 "uglify": {
105 "uglify": {
107 "dist": {
106 "dist": {
108 "src": "<%= dirs.js.dest %>/scripts.js",
107 "src": "<%= dirs.js.dest %>/scripts.js",
109 "dest": "<%= dirs.js.dest %>/scripts.min.js"
108 "dest": "<%= dirs.js.dest %>/scripts.min.js"
110 }
109 }
111 },
110 },
112 "less": {
111 "less": {
113 "development": {
112 "development": {
114 "options": {
113 "options": {
115 "compress": false,
114 "compress": false,
116 "yuicompress": false,
115 "yuicompress": false,
117 "optimization": 0
116 "optimization": 0
118 },
117 },
119 "files": {
118 "files": {
120 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
119 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
121 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
120 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
122 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
121 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
123 }
122 }
124 },
123 },
125 "production": {
124 "production": {
126 "options": {
125 "options": {
127 "compress": true,
126 "compress": true,
128 "yuicompress": true,
127 "yuicompress": true,
129 "optimization": 2
128 "optimization": 2
130 },
129 },
131 "files": {
130 "files": {
132 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
131 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
133 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
132 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less",
134 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
133 "<%= dirs.css.dest %>/style-ipython.css": "<%= dirs.css.src %>/ipython.less"
135 }
134 }
136 },
135 },
137 "components": {
136 "components": {
138 "files": [
137 "files": [
139 {
138 {
140 "cwd": "<%= dirs.js.src %>/components/",
139 "cwd": "<%= dirs.js.src %>/components/",
141 "dest": "<%= dirs.js.src %>/components/",
140 "dest": "<%= dirs.js.src %>/components/",
142 "src": [
141 "src": [
143 "**/*.less"
142 "**/*.less"
144 ],
143 ],
145 "expand": true,
144 "expand": true,
146 "ext": ".css"
145 "ext": ".css"
147 }
146 }
148 ]
147 ]
149 }
148 }
150 },
149 },
151 "watch": {
150 "watch": {
152 "less": {
151 "less": {
153 "files": [
152 "files": [
154 "<%= dirs.css.src %>/**/*.less",
153 "<%= dirs.css.src %>/**/*.less",
155 "<%= dirs.js.src %>/components/**/*.less"
154 "<%= dirs.js.src %>/components/**/*.less"
156 ],
155 ],
157 "tasks": [
156 "tasks": [
158 "less:development",
157 "less:development",
159 "less:components",
158 "less:components",
160 "concat:polymercss",
159 "concat:polymercss",
161 "webpack",
160 "webpack",
162 "concat:dist"
161 "concat:dist"
163 ]
162 ]
164 },
163 },
165 "js": {
164 "js": {
166 "files": [
165 "files": [
167 "!<%= dirs.js.src %>/components/root-styles.gen.html",
166 "!<%= dirs.js.src %>/components/root-styles.gen.html",
168 "<%= dirs.js.src %>/**/*.js",
167 "<%= dirs.js.src %>/**/*.js",
169 "<%= dirs.js.src %>/components/**/*.html"
168 "<%= dirs.js.src %>/components/**/*.html"
170 ],
169 ],
171 "tasks": [
170 "tasks": [
172 "less:components",
171 "less:components",
173 "concat:polymercss",
172 "concat:polymercss",
174 "webpack",
173 "webpack",
175 "concat:dist"
174 "concat:dist"
176 ]
175 ]
177 }
176 }
178 },
177 },
179 "jshint": {
178 "jshint": {
180 "rhodecode": {
179 "rhodecode": {
181 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
180 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
182 "options": {
181 "options": {
183 "jshintrc": ".jshintrc"
182 "jshintrc": ".jshintrc"
184 }
183 }
185 }
184 }
186 }
185 }
187 }
186 }
@@ -1,62 +1,61 b''
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "2.0.0",
3 "version": "5.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 "@polymer/iron-a11y-keys": "^3.0.0",
13 "@polymer/iron-ajax": "^3.0.0",
14 "@polymer/iron-autogrow-textarea": "^3.0.0",
15 "@polymer/paper-button": "^3.0.0",
16 "@polymer/paper-spinner": "^3.0.0",
17 "@polymer/paper-toast": "^3.0.0",
18 "@polymer/paper-toggle-button": "^3.0.0",
19 "@polymer/paper-tooltip": "^3.0.0",
20 "@polymer/polymer": "^3.0.0",
21 "@webcomponents/webcomponentsjs": "^2.0.0",
22 "babel-core": "^6.26.3",
23 "babel-loader": "^7.1.2",
24 "babel-plugin-transform-object-rest-spread": "^6.26.0",
25 "babel-preset-env": "^1.6.0",
13 "clipboard": "^2.0.1",
26 "clipboard": "^2.0.1",
27 "copy-webpack-plugin": "^4.4.2",
28 "css-loader": "^0.28.11",
29 "dropzone": "^5.5.0",
14 "exports-loader": "^0.6.4",
30 "exports-loader": "^0.6.4",
15 "favico.js": "^0.3.10",
31 "favico.js": "^0.3.10",
16 "dropzone": "^5.5.0",
17 "grunt": "^0.4.5",
32 "grunt": "^0.4.5",
18 "grunt-cli": "^1.3.1",
33 "grunt-cli": "^1.4.3",
19 "grunt-contrib-concat": "^0.5.1",
34 "grunt-contrib-concat": "^0.5.1",
20 "grunt-contrib-copy": "^1.0.0",
35 "grunt-contrib-copy": "^1.0.0",
21 "grunt-contrib-jshint": "^0.12.0",
36 "grunt-contrib-jshint": "^0.12.0",
22 "grunt-contrib-less": "^1.1.0",
37 "grunt-contrib-less": "^1.1.0",
38 "grunt-contrib-uglify": "^4.0.1",
23 "grunt-contrib-watch": "^0.6.1",
39 "grunt-contrib-watch": "^0.6.1",
24 "grunt-webpack": "^3.1.3",
40 "grunt-webpack": "^3.1.3",
25 "grunt-contrib-uglify": "^4.0.1",
41 "html-loader": "^0.4.4",
26 "sweetalert2": "^9.10.12",
42 "html-webpack-plugin": "^3.2.0",
43 "imports-loader": "^0.7.1",
27 "jquery": "1.11.3",
44 "jquery": "1.11.3",
45 "jshint": "^2.9.1-rc3",
28 "mark.js": "8.11.1",
46 "mark.js": "8.11.1",
29 "jshint": "^2.9.1-rc3",
30 "moment": "^2.18.1",
47 "moment": "^2.18.1",
31 "mousetrap": "^1.6.1",
48 "mousetrap": "^1.6.1",
49 "polymer-webpack-loader": "^2.0.1",
32 "qrious": "^4.0.2",
50 "qrious": "^4.0.2",
51 "raw-loader": "1.0.0-beta.0",
33 "sticky-sidebar": "3.3.1",
52 "sticky-sidebar": "3.3.1",
53 "style-loader": "^0.21.0",
54 "sweetalert2": "^9.10.12",
55 "ts-loader": "^1.3.3",
34 "waypoints": "4.0.1",
56 "waypoints": "4.0.1",
35 "webpack": "4.23.1",
57 "webpack": "4.23.1",
36 "webpack-cli": "3.1.2",
58 "webpack-cli": "3.1.2",
37 "babel-core": "^6.26.3",
59 "webpack-uglify-js-plugin": "^1.1.9"
38 "babel-loader": "^7.1.2",
39 "babel-plugin-transform-object-rest-spread": "^6.26.0",
40 "babel-preset-env": "^1.6.0",
41 "copy-webpack-plugin": "^4.4.2",
42 "css-loader": "^0.28.11",
43 "html-loader": "^0.4.4",
44 "html-webpack-plugin": "^3.2.0",
45 "imports-loader": "^0.7.1",
46 "polymer-webpack-loader": "^2.0.1",
47 "style-loader": "^0.21.0",
48 "webpack-uglify-js-plugin": "^1.1.9",
49 "raw-loader": "1.0.0-beta.0",
50 "ts-loader": "^1.3.3",
51 "@webcomponents/webcomponentsjs": "^2.0.0",
52 "@polymer/polymer": "^3.0.0",
53 "@polymer/paper-button": "^3.0.0",
54 "@polymer/paper-spinner": "^3.0.0",
55 "@polymer/paper-tooltip": "^3.0.0",
56 "@polymer/paper-toast": "^3.0.0",
57 "@polymer/paper-toggle-button": "^3.0.0",
58 "@polymer/iron-ajax": "^3.0.0",
59 "@polymer/iron-autogrow-textarea": "^3.0.0",
60 "@polymer/iron-a11y-keys": "^3.0.0"
61 }
60 }
62 }
61 }
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: 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/lib/bleach_whitelist.py to rhodecode/lib/html_sanitizer_defs.py
NO CONTENT: file renamed from rhodecode/lib/bleach_whitelist.py to rhodecode/lib/html_sanitizer_defs.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/templates/admin/settings/settings_automation.mako to rhodecode/templates/admin/automation/automation.mako
NO CONTENT: file renamed from rhodecode/templates/admin/settings/settings_automation.mako to rhodecode/templates/admin/automation/automation.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: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: 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/tests/pylons_plugin.py to rhodecode/tests/fixture_mods/fixture_pyramid.py
NO CONTENT: file renamed from rhodecode/tests/pylons_plugin.py to rhodecode/tests/fixture_mods/fixture_pyramid.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/plugin.py to rhodecode/tests/fixture_mods/fixture_utils.py
NO CONTENT: file renamed from rhodecode/tests/plugin.py to rhodecode/tests/fixture_mods/fixture_utils.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (542 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now