##// 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,10 +1,17 b''
1 1 {
2 2 "presets": [
3 ["env", {
3 [
4 "env",
5 {
4 6 "targets": {
5 "browsers": ["last 2 versions"]
7 "browsers": [
8 "last 2 versions"
9 ]
6 10 }
7 }]
11 }
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 1 [bumpversion]
2 current_version = 4.27.1
2 current_version = 5.0.0
3 3 message = release: Bump version {current_version} to {new_version}
4 4
5 5 [bumpversion:file:rhodecode/VERSION]
6
@@ -1,4 +1,5 b''
1 1 syntax: glob
2
2 3 *.egg
3 4 *.egg-info
4 5 *.idea
@@ -18,6 +19,7 b' syntax: regexp'
18 19 ^\.pydevproject$
19 20 ^\.coverage$
20 21 ^\.cache.*$
22 ^\.ruff_cache.*$
21 23 ^\.rhodecode$
22 24
23 25 ^rcextensions
@@ -36,6 +38,7 b' syntax: regexp'
36 38 ^junit\.xml$
37 39 ^node_modules/
38 40 ^node_binaries/
41 ^package-lock.json
39 42 ^pylint.log$
40 43 ^rcextensions/
41 44 ^result$
@@ -53,6 +56,7 b' syntax: regexp'
53 56 ^rhodecode_dev\.log$
54 57 ^test\.db$
55 58
59
56 60 # ac-tests
57 61 ^acceptance_tests/\.cache.*$
58 62 ^acceptance_tests/externals
@@ -1,12 +1,12 b''
1 1 # top level files
2
3 include MANIFEST.in
4 include README.rst
5 include CHANGES.rst
6 include LICENSE.txt
2 include *.rst
3 include *.txt
7 4
8 5 include rhodecode/VERSION
9 6
7 # all python files inside packages
8 graft rhodecode
9
10 10 # docs
11 11 recursive-include docs *
12 12
@@ -48,5 +48,10 b' recursive-include rhodecode/public/js *'
48 48 recursive-include rhodecode/templates *
49 49
50 50 # skip any tests files
51 recursive-exclude rhodecode/api/tests *
51 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 5 # set by: PATH_TO_OUTDATED_PACKAGES=/some/path/outdated_packages.py
4 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 8 .PHONY: clean
11 clean: ## full clean
9 ## Cleanup compiled and cache py files
10 clean:
12 11 make test-clean
13 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 16 .PHONY: test
17 test: ## run test-clean and tests
17 ## run test-clean and tests
18 test:
18 19 make test-clean
19 20 make test-only
20 21
21 22
22 23 .PHONY:test-clean
23 test-clean: ## run test-clean and tests
24 ## run test-clean and tests
25 test-clean:
24 26 rm -rf coverage.xml htmlcov junit.xml pylint.log result
25 27 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
26 28 find . -type f \( -iname '.coverage.*' \) -exec rm '{}' ';'
27 29
28 30
29 31 .PHONY: test-only
30 test-only: ## run tests
32 ## Run tests only without cleanup
33 test-only:
31 34 PYTHONHASHSEED=random \
32 35 py.test -x -vv -r xw -p no:sugar \
33 --cov=rhodecode --cov-report=term-missing --cov-report=html \
34 rhodecode
36 --cov-report=term-missing --cov-report=html \
37 --cov=rhodecode rhodecode
35 38
36 39
37 40 .PHONY: test-only-mysql
38 test-only-mysql: ## run tests against mysql
41 ## run tests against mysql
42 test-only-mysql:
39 43 PYTHONHASHSEED=random \
40 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 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 50 .PHONY: test-only-postgres
47 test-only-postgres: ## run tests against postgres
51 ## run tests against postgres
52 test-only-postgres:
48 53 PYTHONHASHSEED=random \
49 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 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 65 .PHONY: docs
55 docs: ## build docs
56 (cd docs; nix-build default.nix -o result; make clean html)
66 ## build docs
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 71 .PHONY: docs-clean
60 docs-clean: ## Cleanup docs
61 (cd docs; make clean)
72 ## Cleanup docs
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 77 .PHONY: docs-cleanup
65 docs-cleanup: ## Cleanup docs
66 (cd docs; make cleanup)
78 ## Cleanup docs
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 83 .PHONY: web-build
70 web-build: ## Build static/js
71 NODE_PATH=$(NODE_PATH) $(GRUNT)
72
73
74 .PHONY: generate-pkgs
75 generate-pkgs: ## generate new python packages
76 nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses"
84 ## Build JS packages static/js
85 web-build:
86 docker run -it --rm -v $(PWD):/project --workdir=/project rhodecode/static-files-build:16 -c "npm install && /project/node_modules/.bin/grunt"
87 # run static file check
88 ./rhodecode/tests/scripts/static-file-check.sh rhodecode/public/
89 rm -rf node_modules
77 90
78 91
79 92 .PHONY: pip-packages
80 pip-packages: ## show outdated packages
93 ## Show outdated packages
94 pip-packages:
81 95 python ${OUTDATED_PACKAGES}
82 96
83 97
84 .PHONY: generate-js-pkgs
85 generate-js-pkgs: ## generate js packages
86 rm -rf node_modules && \
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" && \
88 sed -i -e 's/http:\/\//https:\/\//g' pkgs/node-packages.nix
98 .PHONY: build
99 ## Build sdist/egg
100 build:
101 python -m build
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
92 generate-license-meta: ## Generate license metadata
93 nix-build pkgs/license-generate.nix -o result-license && \
94 cat result-license/licenses.json | python -m json.tool > rhodecode/config/licenses.json
146 .PHONY: dev-srv-g
147 ## run gunicorn multi process workers
148 dev-srv-g:
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
97 help:
98 @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-24s\033[0m %s\n", $$1, $$2}'
155 .PHONY: show-help
156 show-help:
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,4 +1,3 b''
1 ## -*- coding: utf-8 -*-
2 1
3 2 ; #########################################
4 3 ; RHODECODE COMMUNITY EDITION CONFIGURATION
@@ -27,9 +26,10 b' debug = true'
27 26 #smtp_use_ssl = true
28 27
29 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 31 host = 127.0.0.1
32 port = 5000
32 port = 10020
33 33
34 34 ; ##################################################
35 35 ; WAITRESS WSGI SERVER - Recommended for Development
@@ -53,82 +53,11 b' asyncore_use_poll = true'
53 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 58 ; Module to use, this setting shouldn't be changed
59 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 61 ; Prefix middleware for RhodeCode.
133 62 ; recommended when using proxy setup.
134 63 ; allows to set RhodeCode under a prefix in server.
@@ -143,8 +72,16 b' prefix = /'
143 72 [app:main]
144 73 ; The %(here)s variable will be replaced with the absolute path of parent directory
145 74 ; of this file
146 ; In addition ENVIRONMENT variables usage is possible, e.g
147 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
75 ; Each option in the app:main can be override by an environmental variable
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 86 use = egg:rhodecode-enterprise-ce
150 87
@@ -211,12 +148,6 b' lang = en'
211 148 ; Settings this to true could lead to very long startup time.
212 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 151 ; URL at which the application is running. This is used for Bootstrapping
221 152 ; requests in context when no web request is available. Used in ishell, or
222 153 ; SSH calls. Set this for events to receive proper url for SSH calls.
@@ -370,23 +301,43 b' file_store.backend = local'
370 301 ; path to store the uploaded binaries
371 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 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 325 use_celery = false
381 326
327 ; path to store schedule database
328 #celerybeat-schedule.path =
329
382 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 336 ; rabbitmq example
386 337 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
387 338
388 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 342 ; tasks will never be sent to the queue, but executed locally instead.
392 343 celery.task_always_eager = false
@@ -418,13 +369,42 b' rc_cache.cache_repo_longterm.expiration_'
418 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 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 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 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 409 ; alternative `cache_perms` redis backend with distributed lock
430 410 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
@@ -440,14 +420,18 b' rc_cache.cache_perms.expiration_time = 3'
440 420 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
441 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 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 431 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
448 432 rc_cache.cache_repo.expiration_time = 2592000
449 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 436 ; alternative `cache_repo` redis backend with distributed lock
453 437 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
@@ -463,14 +447,16 b' rc_cache.cache_repo.expiration_time = 25'
463 447 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
464 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 454 ; BEAKER SESSION
469 455 ; ##############
470 456
471 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).
473 ; Fastest ones are Redis and ext:database
458 ; types are file, ext:redis, ext:database, ext:memcached
459 ; Fastest ones are ext:redis and ext:database, DO NOT use memory type for session
474 460 beaker.session.type = file
475 461 beaker.session.data_dir = %(here)s/data/sessions
476 462
@@ -565,10 +551,12 b' sqlalchemy.db1.echo = false'
565 551
566 552 ; recycle the connections after this amount of seconds
567 553 sqlalchemy.db1.pool_recycle = 3600
568 sqlalchemy.db1.convert_unicode = true
569 554
570 555 ; the number of connections to keep open inside the connection pool.
571 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 560 #sqlalchemy.db1.pool_size = 5
573 561
574 562 ; The number of connections to allow in connection pool "overflow", that is
@@ -599,9 +587,10 b' vcs.scm_app_implementation = http'
599 587 ; `http` - use http-rpc backend (default)
600 588 vcs.hooks.protocol = http
601 589
602 ; Host on which this instance is listening for hooks. If vcsserver is in other location
603 ; this should be adjusted.
604 vcs.hooks.host = 127.0.0.1
590 ; Host on which this instance is listening for hooks. vcsserver will call this host to pull/push hooks so it should be
591 ; accessible via network.
592 ; Use vcs.hooks.host = "*" to bind to current hostname (for Docker)
593 vcs.hooks.host = *
605 594
606 595 ; Start VCSServer with this instance as a subprocess, useful for development
607 596 vcs.start_server = false
@@ -620,6 +609,9 b' vcs.connection_timeout = 3600'
620 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 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 617 ; Subversion proxy support (mod_dav_svn)
@@ -702,55 +694,74 b' ssh.enable_ui_key_generator = true'
702 694 ; http://appenlight.rhodecode.com for details how to obtain an account
703 695
704 696 ; Appenlight integration enabled
705 appenlight = false
697 #appenlight = false
706 698
707 appenlight.server_url = https://api.appenlight.com
708 appenlight.api_key = YOUR_API_KEY
699 #appenlight.server_url = https://api.appenlight.com
700 #appenlight.api_key = YOUR_API_KEY
709 701 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
710 702
711 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 706 ; TWEAK AMOUNT OF INFO SENT HERE
715 707
716 708 ; enables 404 error logging (default False)
717 appenlight.report_404 = false
709 #appenlight.report_404 = false
718 710
719 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 714 ; record slow requests in application
723 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 718 ; enable hooking to application loggers
727 appenlight.logging = true
719 #appenlight.logging = true
728 720
729 721 ; minimum log level for log capture
730 appenlight.logging.level = WARNING
722 #ppenlight.logging.level = WARNING
731 723
732 724 ; send logs only from erroneous/slow requests
733 725 ; (saves API quota for intensive logging)
734 appenlight.logging_on_error = false
726 #appenlight.logging_on_error = false
735 727
736 728 ; list of additional keywords that should be grabbed from environ object
737 729 ; can be string with comma separated list of words in lowercase
738 730 ; (by default client will always send following info:
739 731 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
740 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 735 ; list of keywords that should be blanked from request object
744 736 ; can be string with comma separated list of words in lowercase
745 737 ; (by default client will always blank keys that contain following words
746 738 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
747 739 ; this list be extended with additional keywords set here
748 appenlight.request_keys_blacklist =
740 #appenlight.request_keys_blacklist =
749 741
750 742 ; list of namespaces that should be ignores when gathering log entries
751 743 ; can be string with comma separated list of namespaces
752 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 766 ; Dummy marker to add new entries after.
756 767 ; Add any custom entries below. Please don't remove this marker.
@@ -760,6 +771,7 b' custom.conf = 1'
760 771 ; #####################
761 772 ; LOGGING CONFIGURATION
762 773 ; #####################
774
763 775 [loggers]
764 776 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
765 777
@@ -767,7 +779,7 b' keys = root, sqlalchemy, beaker, celery,'
767 779 keys = console, console_sql
768 780
769 781 [formatters]
770 keys = generic, color_formatter, color_formatter_sql
782 keys = generic, json, color_formatter, color_formatter_sql
771 783
772 784 ; #######
773 785 ; LOGGERS
@@ -814,6 +826,8 b' qualname = celery'
814 826 class = StreamHandler
815 827 args = (sys.stderr, )
816 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 831 formatter = color_formatter
818 832
819 833 [handler_console_sql]
@@ -823,6 +837,8 b' formatter = color_formatter'
823 837 class = StreamHandler
824 838 args = (sys.stderr, )
825 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 842 formatter = color_formatter_sql
827 843
828 844 ; ##########
@@ -843,3 +859,7 b' datefmt = %Y-%m-%d %H:%M:%S'
843 859 class = rhodecode.lib.logging_formatter.ColorFormatterSql
844 860 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
845 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
@@ -11,6 +11,8 b' import time'
11 11 import threading
12 12 import traceback
13 13 import random
14 import socket
15 import dataclasses
14 16 from gunicorn.glogging import Logger
15 17
16 18
@@ -18,8 +20,14 b' def get_workers():'
18 20 import multiprocessing
19 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 28 errorlog = '-'
29
30 # Access logging output for gunicorn (-) is stdout
23 31 accesslog = '-'
24 32
25 33
@@ -29,12 +37,112 b" accesslog = '-'"
29 37 worker_tmp_dir = None
30 38 tmp_upload_dir = None
31 39
40 # use re-use port logic
41 #reuse_port = True
42
32 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 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
37 # workers = get_workers()
96 # The Amount of time a worker can spend with handling a request before it
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 148 def _get_process_rss(pid=None):
@@ -50,12 +158,9 b' def _get_process_rss(pid=None):'
50 158
51 159
52 160 def _get_config(ini_path):
161 import configparser
53 162
54 163 try:
55 import configparser
56 except ImportError:
57 import ConfigParser as configparser
58 try:
59 164 config = configparser.RawConfigParser()
60 165 config.read(ini_path)
61 166 return config
@@ -63,22 +168,14 b' def _get_config(ini_path):'
63 168 return None
64 169
65 170
66 def _time_with_offset(memory_usage_check_interval):
67 return time.time() - random.randint(0, memory_usage_check_interval/2.0)
68
69
70 def pre_fork(server, worker):
71 pass
72
171 def get_memory_usage_params(config=None):
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
73 176
74 def post_fork(server, worker):
75
76 # memory spec defaults
77 _memory_max_usage = 0
78 _memory_usage_check_interval = 60
79 _memory_usage_recovery_threshold = 0.8
80
81 ini_path = os.path.abspath(server.cfg.paste)
177 if config:
178 ini_path = os.path.abspath(config)
82 179 conf = _get_config(ini_path)
83 180
84 181 section = 'server:main'
@@ -93,19 +190,47 b' def post_fork(server, worker):'
93 190 if conf.has_option(section, 'memory_usage_recovery_threshold'):
94 191 _memory_usage_recovery_threshold = conf.getfloat(section, 'memory_usage_recovery_threshold')
95 192
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
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)
205
206
207 def pre_fork(server, worker):
208 pass
209
210
211 def post_fork(server, worker):
212
213 memory_conf = get_memory_usage_params()
214 _memory_max_usage = memory_conf.max_usage
215 _memory_usage_check_interval = memory_conf.check_interval
216 _memory_usage_recovery_threshold = memory_conf.recovery_threshold
217
218 worker._memory_max_usage = int(os.environ.get('RC_GUNICORN_MEMORY_MAX_USAGE', '')
219 or _memory_max_usage)
220 worker._memory_usage_check_interval = int(os.environ.get('RC_GUNICORN_MEMORY_USAGE_CHECK_INTERVAL', '')
221 or _memory_usage_check_interval)
222 worker._memory_usage_recovery_threshold = float(os.environ.get('RC_GUNICORN_MEMORY_USAGE_RECOVERY_THRESHOLD', '')
223 or _memory_usage_recovery_threshold)
99 224
100 225 # register memory last check time, with some random offset so we don't recycle all
101 226 # at once
102 227 worker._last_memory_check_time = _time_with_offset(_memory_usage_check_interval)
103 228
104 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 231 _format_data_size(_memory_max_usage))
107 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 236 def pre_exec(server):
@@ -115,6 +240,9 b' def pre_exec(server):'
115 240 def on_starting(server):
116 241 server_lbl = '{} {}'.format(server.proc_name, server.address)
117 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 248 def when_ready(server):
@@ -174,42 +302,45 b' def _format_data_size(size, unit="B", pr'
174 302
175 303
176 304 def _check_memory_usage(worker):
177 memory_max_usage = worker._memory_max_usage
178 if not memory_max_usage:
305 _memory_max_usage = worker._memory_max_usage
306 if not _memory_max_usage:
179 307 return
180 308
181 memory_usage_check_interval = worker._memory_usage_check_interval
182 memory_usage_recovery_threshold = memory_max_usage * worker._memory_usage_recovery_threshold
309 _memory_usage_check_interval = worker._memory_usage_check_interval
310 _memory_usage_recovery_threshold = memory_max_usage * worker._memory_usage_recovery_threshold
183 311
184 312 elapsed = time.time() - worker._last_memory_check_time
185 if elapsed > memory_usage_check_interval:
313 if elapsed > _memory_usage_check_interval:
186 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 316 worker.log.info(
189 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 319 # Try to clean it up by forcing a full collection.
192 320 gc.collect()
193 321 mem_usage = _get_process_rss()
194 if mem_usage > memory_usage_recovery_threshold:
322 if mem_usage > _memory_usage_recovery_threshold:
195 323 # Didn't clean up enough, we'll have to terminate.
196 324 worker.log.warning(
197 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 327 # This will cause worker to auto-restart itself
200 328 worker.alive = False
201 329 worker._last_memory_check_time = time.time()
202 330
203 331
204 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
336 def get_thread_id(t_id):
208 337 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
338 return id2name.get(t_id, "unknown_thread_id")
339
209 340 code = []
210 for thread_id, stack in sys._current_frames().items():
341 for thread_id, stack in sys._current_frames().items(): # noqa
211 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 344 for fname, lineno, name, line in traceback.extract_stack(stack):
214 345 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
215 346 if line:
@@ -218,15 +349,15 b' def worker_int(worker):'
218 349
219 350
220 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 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 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 363 def pre_request(worker, req):
@@ -245,6 +376,76 b' def post_request(worker, req, environ, r'
245 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 449 class RhodeCodeLogger(Logger):
249 450 """
250 451 Custom Logger that allows some customization that gunicorn doesn't allow
@@ -258,8 +459,62 b' class RhodeCodeLogger(Logger):'
258 459 def now(self):
259 460 """ return date in RhodeCode Log format """
260 461 now = time.time()
261 msecs = int((now - long(now)) * 1000)
462 msecs = int((now - int(now)) * 1000)
262 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 520 logger_class = RhodeCodeLogger
@@ -1,4 +1,3 b''
1 ## -*- coding: utf-8 -*-
2 1
3 2 ; #########################################
4 3 ; RHODECODE COMMUNITY EDITION CONFIGURATION
@@ -27,91 +26,21 b' debug = false'
27 26 #smtp_use_ssl = true
28 27
29 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 31 host = 127.0.0.1
32 port = 5000
32 port = 10020
33 33
34 34
35 35 ; ###########################
36 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 41 ; Module to use, this setting shouldn't be changed
42 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 44 ; Prefix middleware for RhodeCode.
116 45 ; recommended when using proxy setup.
117 46 ; allows to set RhodeCode under a prefix in server.
@@ -126,8 +55,16 b' prefix = /'
126 55 [app:main]
127 56 ; The %(here)s variable will be replaced with the absolute path of parent directory
128 57 ; of this file
129 ; In addition ENVIRONMENT variables usage is possible, e.g
130 ; sqlalchemy.db1.url = {ENV_RC_DB_URL}
58 ; Each option in the app:main can be override by an environmental variable
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 69 use = egg:rhodecode-enterprise-ce
133 70
@@ -162,12 +99,6 b' lang = en'
162 99 ; Settings this to true could lead to very long startup time.
163 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 102 ; URL at which the application is running. This is used for Bootstrapping
172 103 ; requests in context when no web request is available. Used in ishell, or
173 104 ; SSH calls. Set this for events to receive proper url for SSH calls.
@@ -321,23 +252,43 b' file_store.backend = local'
321 252 ; path to store the uploaded binaries
322 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 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 276 use_celery = false
332 277
278 ; path to store schedule database
279 #celerybeat-schedule.path =
280
333 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 287 ; rabbitmq example
337 288 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
338 289
339 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 293 ; tasks will never be sent to the queue, but executed locally instead.
343 294 celery.task_always_eager = false
@@ -369,13 +320,42 b' rc_cache.cache_repo_longterm.expiration_'
369 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 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 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 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 360 ; alternative `cache_perms` redis backend with distributed lock
381 361 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
@@ -396,11 +376,13 b' rc_cache.cache_perms.expiration_time = 3'
396 376
397 377 ; ***************************************************
398 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 382 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
401 383 rc_cache.cache_repo.expiration_time = 2592000
402 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 387 ; alternative `cache_repo` redis backend with distributed lock
406 388 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
@@ -424,8 +406,8 b' rc_cache.cache_repo.expiration_time = 25'
424 406 ; ##############
425 407
426 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).
428 ; Fastest ones are Redis and ext:database
409 ; types are file, ext:redis, ext:database, ext:memcached
410 ; Fastest ones are ext:redis and ext:database, DO NOT use memory type for session
429 411 beaker.session.type = file
430 412 beaker.session.data_dir = %(here)s/data/sessions
431 413
@@ -520,10 +502,12 b' sqlalchemy.db1.echo = false'
520 502
521 503 ; recycle the connections after this amount of seconds
522 504 sqlalchemy.db1.pool_recycle = 3600
523 sqlalchemy.db1.convert_unicode = true
524 505
525 506 ; the number of connections to keep open inside the connection pool.
526 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 511 #sqlalchemy.db1.pool_size = 5
528 512
529 513 ; The number of connections to allow in connection pool "overflow", that is
@@ -554,9 +538,10 b' vcs.scm_app_implementation = http'
554 538 ; `http` - use http-rpc backend (default)
555 539 vcs.hooks.protocol = http
556 540
557 ; Host on which this instance is listening for hooks. If vcsserver is in other location
558 ; this should be adjusted.
559 vcs.hooks.host = 127.0.0.1
541 ; Host on which this instance is listening for hooks. vcsserver will call this host to pull/push hooks so it should be
542 ; accessible via network.
543 ; Use vcs.hooks.host = "*" to bind to current hostname (for Docker)
544 vcs.hooks.host = *
560 545
561 546 ; Start VCSServer with this instance as a subprocess, useful for development
562 547 vcs.start_server = false
@@ -575,6 +560,9 b' vcs.connection_timeout = 3600'
575 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 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 568 ; Subversion proxy support (mod_dav_svn)
@@ -657,55 +645,74 b' ssh.enable_ui_key_generator = true'
657 645 ; http://appenlight.rhodecode.com for details how to obtain an account
658 646
659 647 ; Appenlight integration enabled
660 appenlight = false
648 #appenlight = false
661 649
662 appenlight.server_url = https://api.appenlight.com
663 appenlight.api_key = YOUR_API_KEY
650 #appenlight.server_url = https://api.appenlight.com
651 #appenlight.api_key = YOUR_API_KEY
664 652 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
665 653
666 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 657 ; TWEAK AMOUNT OF INFO SENT HERE
670 658
671 659 ; enables 404 error logging (default False)
672 appenlight.report_404 = false
660 #appenlight.report_404 = false
673 661
674 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 665 ; record slow requests in application
678 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 669 ; enable hooking to application loggers
682 appenlight.logging = true
670 #appenlight.logging = true
683 671
684 672 ; minimum log level for log capture
685 appenlight.logging.level = WARNING
673 #ppenlight.logging.level = WARNING
686 674
687 675 ; send logs only from erroneous/slow requests
688 676 ; (saves API quota for intensive logging)
689 appenlight.logging_on_error = false
677 #appenlight.logging_on_error = false
690 678
691 679 ; list of additional keywords that should be grabbed from environ object
692 680 ; can be string with comma separated list of words in lowercase
693 681 ; (by default client will always send following info:
694 682 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
695 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 686 ; list of keywords that should be blanked from request object
699 687 ; can be string with comma separated list of words in lowercase
700 688 ; (by default client will always blank keys that contain following words
701 689 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
702 690 ; this list be extended with additional keywords set here
703 appenlight.request_keys_blacklist =
691 #appenlight.request_keys_blacklist =
704 692
705 693 ; list of namespaces that should be ignores when gathering log entries
706 694 ; can be string with comma separated list of namespaces
707 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 717 ; Dummy marker to add new entries after.
711 718 ; Add any custom entries below. Please don't remove this marker.
@@ -715,6 +722,7 b' custom.conf = 1'
715 722 ; #####################
716 723 ; LOGGING CONFIGURATION
717 724 ; #####################
725
718 726 [loggers]
719 727 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
720 728
@@ -722,7 +730,7 b' keys = root, sqlalchemy, beaker, celery,'
722 730 keys = console, console_sql
723 731
724 732 [formatters]
725 keys = generic, color_formatter, color_formatter_sql
733 keys = generic, json, color_formatter, color_formatter_sql
726 734
727 735 ; #######
728 736 ; LOGGERS
@@ -769,6 +777,8 b' qualname = celery'
769 777 class = StreamHandler
770 778 args = (sys.stderr, )
771 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 782 formatter = generic
773 783
774 784 [handler_console_sql]
@@ -778,6 +788,8 b' formatter = generic'
778 788 class = StreamHandler
779 789 args = (sys.stderr, )
780 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 793 formatter = generic
782 794
783 795 ; ##########
@@ -798,3 +810,7 b' datefmt = %Y-%m-%d %H:%M:%S'
798 810 class = rhodecode.lib.logging_formatter.ColorFormatterSql
799 811 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
800 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
2 nix-shell pkgs/shell-generate.nix
3 cd docs
4 pip2nix generate
1 ## BUILD
2 # cd docs
3 # docker build --tag sphinx-doc-build-rc .
5 4
6 # building the docs
7 cd docs
8 nix-build default.nix -o result
9 make clean html
5 # Build Docs
6 # docker run --rm -v $(PWD):/project --workdir=/project/docs sphinx-doc-build-rc make clean html No newline at end of file
@@ -2,9 +2,9 b''
2 2 #
3 3
4 4 # You can set these variables from the command line.
5 SPHINXOPTS =
6 SPHINXBUILD = ./result/bin/sphinx-build
7 PAPER =
5 SPHINXOPTS ?=
6 SPHINXBUILD ?= sphinx-build
7 SOURCEDIR = source
8 8 BUILDDIR = _build
9 9
10 10 # User-friendly check for sphinx-build
@@ -80,8 +80,9 b' 1) Start by running the interactive ishe'
80 80 2a) Add user called 'admin' into all repositories with write permission.
81 81 Permissions can be also `repository.read`, `repository.admin`, `repository.none`
82 82
83
83 84 .. code-block:: python
84 :dedent: 1
85 :dedent:
85 86
86 87 In [1]: from rhodecode.model.repo import RepoModel
87 88 In [2]: user = User.get_by_username('admin')
@@ -94,7 +95,7 b" 2b) Add user called 'admin' into all rep"
94 95 Permissions can be also can be `group.read`, `group.admin`, `group.none`
95 96
96 97 .. code-block:: python
97 :dedent: 1
98 :dedent:
98 99
99 100 In [1]: from rhodecode.model.repo import RepoModel
100 101 In [2]: user = User.get_by_username('admin')
@@ -108,7 +109,7 b' Delete a problematic pull request'
108 109 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
109 110
110 111 .. code-block:: python
111 :dedent: 1
112 :dedent:
112 113
113 114 In [1]: from rhodecode.model.pull_request import PullRequestModel
114 115 In [2]: pullrequest_id = 123
@@ -25,7 +25,7 b' account permissions.'
25 25 # Open iShell from the terminal
26 26 $ rccontrol ishell enterprise-1
27 27
28 .. code-block:: mysql
28 .. code-block:: python
29 29
30 30 # Use this example to change user permissions
31 31 In [1]: adminuser = User.get_by_username('username')
@@ -49,7 +49,7 b' following example to make changes to thi'
49 49 # Open iShell from the terminal
50 50 $ rccontrol ishell enterprise-1
51 51
52 .. code-block:: mysql
52 .. code-block:: python
53 53
54 54 # Use this example to enable global .hgrc access
55 55 In [1]: new_option = RhodeCodeUi()
@@ -76,7 +76,7 b' Use the following code example to carry '
76 76 # starts the ishell interactive prompt
77 77 $ rccontrol ishell enterprise-1
78 78
79 .. code-block:: mysql
79 .. code-block:: python
80 80
81 81 In [1]: from rhodecode.lib.auth import generate_auth_token
82 82 In [2]: from rhodecode.lib.auth import get_crypt_password
@@ -107,7 +107,7 b' Use the following code example to carry '
107 107 # starts the ishell interactive prompt
108 108 $ rccontrol ishell enterprise-1
109 109
110 .. code-block:: mysql
110 .. code-block:: python
111 111
112 112 # Use this example to change email and username of LDAP user
113 113 In [1]: my_user = User.get_by_username('some_username')
@@ -139,7 +139,7 b" Use the text which is shown after '#' si"
139 139 # starts the ishell interactive prompt
140 140 $ rccontrol ishell enterprise-1
141 141
142 .. code-block:: mysql
142 .. code-block:: python
143 143
144 144 # Use this example to change users from authentication
145 145 # using rhodecode internal to ldap
@@ -202,7 +202,6 b' are not required in args.'
202 202 methods/deprecated-methods
203 203 methods/gist-methods
204 204 methods/pull-request-methods
205 methods/repo-methods
206 205 methods/repo-group-methods
207 206 methods/search-methods
208 207 methods/server-methods
@@ -1,27 +1,45 b''
1 # -*- coding: utf-8 -*-
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.
1 # Configuration file for the Sphinx documentation builder.
8 2 #
9 # Note that not all possible configuration values are present in this
10 # autogenerated file.
11 #
12 # All configuration values have a default; values that are commented out
13 # serve to show the default.
3 # For the full list of built-in configuration values, see the documentation:
4 # https://www.sphinx-doc.org/en/master/usage/configuration.html
5
6 # -- Project information -----------------------------------------------------
7 # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
14 8
9 import os
15 10 import sys
16 import os
17 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 16 # If extensions (or modules to document with autodoc) are in another directory,
21 17 # add these directories to sys.path here. If the directory is relative to the
22 18 # documentation root, use os.path.abspath to make it absolute, like shown here.
23 sys.path.insert(0, os.path.abspath('.'))
24 import common
19 sys.path.insert(0, os.path.abspath("."))
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 44 # -- General configuration ------------------------------------------------
27 45
@@ -32,56 +50,67 b' import common'
32 50 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
33 51 # ones.
34 52 extensions = [
35 'sphinx.ext.autodoc',
36 'sphinx.ext.intersphinx',
37 'sphinx.ext.todo',
38 'sphinx.ext.imgmath'
53 "sphinx.ext.autodoc",
54 "sphinx.ext.intersphinx",
55 "sphinx.ext.todo",
56 "sphinx.ext.imgmath",
39 57 ]
40 58
41 59 intersphinx_mapping = {
42 'enterprise': ('https://docs.rhodecode.com/RhodeCode-Enterprise/', None),
43 'control': ('https://docs.rhodecode.com/RhodeCode-Control/', None),
60 "enterprise": ("https://docs.rhodecode.com/RhodeCode-Enterprise/", None),
61 "rcstack": ("https://docs.rhodecode.com/rcstack/", None),
62 "control": ("https://docs.rhodecode.com/RhodeCode-Control/", None),
44 63 }
45 64
46 65 # Add any paths that contain templates here, relative to this directory.
47 templates_path = ['_templates']
66 templates_path = ["_templates"]
48 67
49 68 # The suffix of source filenames.
50 source_suffix = '.rst'
69 source_suffix = ".rst"
51 70
52 71 # The encoding of source files.
53 72 #source_encoding = 'utf-8-sig'
54 73
55 74 # The master toctree document.
56 master_doc = 'index'
75 master_doc = "index"
57 76
58 77 # The version info for the project you're documenting, acts as replacement for
59 78 # |version| and |release|, also used in various other places throughout the
60 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 82 # The language for content autogenerated by Sphinx. Refer to documentation
80 83 # for a list of supported languages.
81 84 #language = None
82 85
83 rst_epilog = common.rst_epilog + """
86 rst_epilog = """
84 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 116 # There are two options for replacing |today|: either, you set today to some
@@ -94,16 +123,15 b' rst_epilog = common.rst_epilog + """'
94 123 # directories to ignore when looking for source files.
95 124 exclude_patterns = [
96 125 # Special directories
97 '_build',
98 'result',
99
126 "_build",
127 "result",
100 128 # Other RST files
101 'admin/rhodecode-backup.rst',
102 'issue-trackers/redmine.rst',
103 'known-issues/error-msg-guide.rst',
104 'tutorials/docs-build.rst',
105 'integrations/example-ext.py',
106 'collaboration/supported-workflows.rst',
129 "admin/rhodecode-backup.rst",
130 "issue-trackers/redmine.rst",
131 "known-issues/error-msg-guide.rst",
132 "tutorials/docs-build.rst",
133 "integrations/example-ext.py",
134 "collaboration/supported-workflows.rst",
107 135 ]
108 136
109 137
@@ -123,7 +151,7 b' exclude_patterns = ['
123 151 #show_authors = False
124 152
125 153 # The name of the Pygments (syntax highlighting) style to use.
126 pygments_style = 'sphinx'
154 pygments_style = "sphinx"
127 155
128 156 # A list of ignored prefixes for module index sorting.
129 157 #modindex_common_prefix = []
@@ -136,14 +164,13 b' keep_warnings = tags.has("dev")'
136 164
137 165 # The theme to use for HTML and HTML Help pages. See the documentation for
138 166 # a list of builtin themes.
139 #html_theme = 'rctheme'
140 html_theme = 'sphinx_rtd_theme'
167 html_theme = "furo"
141 168
142 169 # Theme options are theme-specific and customize the look and feel of a theme
143 170 # further. For a list of options available for each theme, see the
144 171 # documentation.
145 172 #html_theme_options = {}
146 html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
173
147 174
148 175 # Add any paths that contain custom themes here, relative to this directory.
149 176 #html_theme_path = []
@@ -158,19 +185,21 b' html_theme_path = [sphinx_rtd_theme.get_'
158 185 # The name of an image file (relative to this directory) to place at the top
159 186 # of the sidebar.
160 187 #html_logo = None
161 html_sidebars = {
162 '**': ['globaltoc.html'],
163 }
188
189
190 #html_sidebars = {
191 # "**": ["globaltoc.html"],
192 #}
164 193
165 194 # The name of an image file (within the static path) to use as favicon of the
166 195 # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
167 196 # pixels large.
168 html_favicon = 'images/favicon.ico'
197 html_favicon = "images/favicon.ico"
169 198
170 199 # Add any paths that contain custom static files (such as style sheets) here,
171 200 # relative to this directory. They are copied after the builtin static files,
172 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 204 # Add any extra paths that contain custom files (such as robots.txt or
176 205 # .htaccess) here, relative to this directory. These files are copied
@@ -179,7 +208,7 b" html_static_path = ['static/css/add.css'"
179 208
180 209 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
181 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 213 # If true, SmartyPants will be used to convert quotes and dashes to
185 214 # typographically correct entities.
@@ -205,7 +234,7 b" html_static_path = ['static/css/add.css'"
205 234 #html_show_sourcelink = True
206 235
207 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 239 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
211 240 #html_show_copyright = True
@@ -219,21 +248,18 b" html_static_path = ['static/css/add.css'"
219 248 #html_file_suffix = None
220 249
221 250 # Output file base name for HTML help builder.
222 htmlhelp_basename = 'rhodecode-enterprise'
251 htmlhelp_basename = "rhodecode-enterprise"
223 252
224 253
225 254 # -- Options for LaTeX output ---------------------------------------------
226 255
227 256 latex_elements = {
228 'classoptions': ',oneside',
229 'babel': '\\usepackage[english]{babel}',
230
257 "classoptions": ",oneside",
258 "babel": "\\usepackage[english]{babel}",
231 259 # The paper size ('letterpaper' or 'a4paper').
232 260 #'papersize': 'letterpaper',
233
234 261 # The font size ('10pt', '11pt' or '12pt').
235 262 #'pointsize': '10pt',
236
237 263 # Additional stuff for the LaTeX preamble.
238 264 #'preamble': '',
239 265 }
@@ -242,8 +268,13 b' latex_elements = {'
242 268 # (source start file, target name, title,
243 269 # author, documentclass [howto, manual, or own class]).
244 270 latex_documents = [
245 ('index', 'RhodeCodeEnterprise.tex', u'RhodeCode Enterprise',
246 u'RhodeCode GmbH', 'manual'),
271 (
272 "index",
273 "RhodeCodeEnterprise.tex",
274 "RhodeCode Enterprise",
275 "RhodeCode GmbH",
276 "manual",
277 ),
247 278 ]
248 279
249 280 # The name of an image file (relative to this directory) to place at the top of
@@ -258,7 +289,7 b' latex_documents = ['
258 289 latex_show_pagerefs = True
259 290
260 291 # If true, show URL addresses after external links.
261 latex_show_urls = 'footnote'
292 latex_show_urls = "footnote"
262 293
263 294 # Documents to append as an appendix to all manuals.
264 295 #latex_appendices = []
@@ -276,8 +307,7 b' pdf_fit_mode = "truncate"'
276 307 # One entry per manual page. List of tuples
277 308 # (source start file, name, description, authors, manual section).
278 309 man_pages = [
279 ('index', 'rhodecodeenterprise', u'RhodeCode Enterprise',
280 [u'RhodeCode GmbH'], 1)
310 ("index", "rhodecodeenterprise", "RhodeCode Enterprise", ["RhodeCode GmbH"], 1)
281 311 ]
282 312
283 313 # If true, show URL addresses after external links.
@@ -290,9 +320,15 b' man_pages = ['
290 320 # (source start file, target name, title, author,
291 321 # dir menu entry, description, category)
292 322 texinfo_documents = [
293 ('index', 'RhodeCodeEnterprise', u'RhodeCode Enterprise',
294 u'RhodeCode Docs Team', 'RhodeCodeEnterprise', 'RhodeCode Docs Project',
295 'Miscellaneous'),
323 (
324 "index",
325 "RhodeCodeEnterprise",
326 "RhodeCode Enterprise",
327 "RhodeCode Docs Team",
328 "RhodeCodeEnterprise",
329 "RhodeCode Docs Project",
330 "Miscellaneous",
331 ),
296 332 ]
297 333
298 334 # Documents to append as an appendix to all manuals.
@@ -68,7 +68,7 b' 3. Configure Celery in the'
68 68 celery.broker_url = redis://localhost:6379/8
69 69
70 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 73 ## tasks will never be sent to the queue, but executed locally instead.
74 74 celery.task_always_eager = false
@@ -16,7 +16,6 b' Type/Name Rhod'
16 16 ================================ ================== ========================================
17 17 :ref:`integrations-webhook` |RCCEshort| Trigger events as `json` to a custom url
18 18 :ref:`integrations-slack` |RCCEshort| Integrate with https://slack.com/
19 :ref:`integrations-hipchat` |RCCEshort| Integrate with https://www.hipchat.com/
20 19 :ref:`integrations-email` |RCCEshort| Send repo push commits by email
21 20 :ref:`integrations-ci` |RCCEshort| Trigger Builds for Common CI Systems
22 21 :ref:`integrations-rcextensions` |RCCEshort| Advanced low-level integration framework
@@ -50,7 +49,6 b' See pages specific to each type of integ'
50 49 .. toctree::
51 50
52 51 slack
53 hipchat
54 52 redmine
55 53 jira
56 54 webhook
@@ -1,8 +1,11 b''
1 sphinx==1.8.2
2 six==1.11.0
3 sphinx_rtd_theme==0.4.1
4 docutils==0.16.0
5 pygments==2.3.0
6 markupsafe==1.0.0
7 jinja2==2.9.6
8 pytz==2018.4
1 sphinx==7.2.6
2
3 furo==2023.9.10
4 sphinx-press-theme==0.8.0
5 sphinx-rtd-theme==1.3.0
6
7 pygments==2.16.1
8
9 docutils<0.19
10 markupsafe==2.1.3
11 jinja2==3.1.2
@@ -41,7 +41,6 b''
41 41 "<%= dirs.js.node_modules %>/sticky-sidebar/dist/jquery.sticky-sidebar.min.js",
42 42 "<%= dirs.js.node_modules %>/waypoints/lib/noframework.waypoints.min.js",
43 43 "<%= dirs.js.node_modules %>/waypoints/lib/jquery.waypoints.min.js",
44 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
45 44 "<%= dirs.js.src %>/logging.js",
46 45 "<%= dirs.js.src %>/bootstrap.js",
47 46 "<%= dirs.js.src %>/i18n_utils.js",
@@ -1,6 +1,6 b''
1 1 {
2 2 "name": "rhodecode-enterprise",
3 "version": "2.0.0",
3 "version": "5.0.0",
4 4 "private": true,
5 5 "description" : "RhodeCode JS packaged",
6 6 "license": "SEE LICENSE IN LICENSE.txt",
@@ -9,54 +9,53 b''
9 9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
10 10 },
11 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 26 "clipboard": "^2.0.1",
27 "copy-webpack-plugin": "^4.4.2",
28 "css-loader": "^0.28.11",
29 "dropzone": "^5.5.0",
14 30 "exports-loader": "^0.6.4",
15 31 "favico.js": "^0.3.10",
16 "dropzone": "^5.5.0",
17 32 "grunt": "^0.4.5",
18 "grunt-cli": "^1.3.1",
33 "grunt-cli": "^1.4.3",
19 34 "grunt-contrib-concat": "^0.5.1",
20 35 "grunt-contrib-copy": "^1.0.0",
21 36 "grunt-contrib-jshint": "^0.12.0",
22 37 "grunt-contrib-less": "^1.1.0",
38 "grunt-contrib-uglify": "^4.0.1",
23 39 "grunt-contrib-watch": "^0.6.1",
24 40 "grunt-webpack": "^3.1.3",
25 "grunt-contrib-uglify": "^4.0.1",
26 "sweetalert2": "^9.10.12",
41 "html-loader": "^0.4.4",
42 "html-webpack-plugin": "^3.2.0",
43 "imports-loader": "^0.7.1",
27 44 "jquery": "1.11.3",
45 "jshint": "^2.9.1-rc3",
28 46 "mark.js": "8.11.1",
29 "jshint": "^2.9.1-rc3",
30 47 "moment": "^2.18.1",
31 48 "mousetrap": "^1.6.1",
49 "polymer-webpack-loader": "^2.0.1",
32 50 "qrious": "^4.0.2",
51 "raw-loader": "1.0.0-beta.0",
33 52 "sticky-sidebar": "3.3.1",
53 "style-loader": "^0.21.0",
54 "sweetalert2": "^9.10.12",
55 "ts-loader": "^1.3.3",
34 56 "waypoints": "4.0.1",
35 57 "webpack": "4.23.1",
36 58 "webpack-cli": "3.1.2",
37 "babel-core": "^6.26.3",
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"
59 "webpack-uglify-js-plugin": "^1.1.9"
61 60 }
62 61 }
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 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
This diff has been collapsed as it changes many lines, (9234 lines changed) Show them Hide them
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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