Show More
The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,3 b'' | |||
|
1 | [pip2nix] | |
|
2 | requirements = -r ./requirements_docs.txt | |
|
3 | output = ./python-packages-generated.nix |
@@ -0,0 +1,221 b'' | |||
|
1 | # Generated by pip2nix 0.8.0.dev1 | |
|
2 | # See https://github.com/johbo/pip2nix | |
|
3 | ||
|
4 | { pkgs, fetchurl, fetchgit, fetchhg }: | |
|
5 | ||
|
6 | self: super: { | |
|
7 | "alabaster" = super.buildPythonPackage { | |
|
8 | name = "alabaster-0.7.11"; | |
|
9 | doCheck = false; | |
|
10 | src = fetchurl { | |
|
11 | url = "https://files.pythonhosted.org/packages/3f/46/9346ea429931d80244ab7f11c4fce83671df0b7ae5a60247a2b588592c46/alabaster-0.7.11.tar.gz"; | |
|
12 | sha256 = "1mvm69xsn5xf1jc45kdq1mn0yq0pfn54mv2jcww4s1vwqx6iyfxn"; | |
|
13 | }; | |
|
14 | }; | |
|
15 | "babel" = super.buildPythonPackage { | |
|
16 | name = "babel-2.6.0"; | |
|
17 | doCheck = false; | |
|
18 | propagatedBuildInputs = [ | |
|
19 | self."pytz" | |
|
20 | ]; | |
|
21 | src = fetchurl { | |
|
22 | url = "https://files.pythonhosted.org/packages/be/cc/9c981b249a455fa0c76338966325fc70b7265521bad641bf2932f77712f4/Babel-2.6.0.tar.gz"; | |
|
23 | sha256 = "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"; | |
|
24 | }; | |
|
25 | }; | |
|
26 | "certifi" = super.buildPythonPackage { | |
|
27 | name = "certifi-2018.8.24"; | |
|
28 | doCheck = false; | |
|
29 | src = fetchurl { | |
|
30 | url = "https://files.pythonhosted.org/packages/e1/0f/f8d5e939184547b3bdc6128551b831a62832713aa98c2ccdf8c47ecc7f17/certifi-2018.8.24.tar.gz"; | |
|
31 | sha256 = "0f0nhrj9mlrf79iway4578wrsgmjh0fmacl9zv8zjckdy7b90rip"; | |
|
32 | }; | |
|
33 | }; | |
|
34 | "chardet" = super.buildPythonPackage { | |
|
35 | name = "chardet-3.0.4"; | |
|
36 | doCheck = false; | |
|
37 | src = fetchurl { | |
|
38 | url = "https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz"; | |
|
39 | sha256 = "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"; | |
|
40 | }; | |
|
41 | }; | |
|
42 | "docutils" = super.buildPythonPackage { | |
|
43 | name = "docutils-0.14"; | |
|
44 | doCheck = false; | |
|
45 | src = fetchurl { | |
|
46 | url = "https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz"; | |
|
47 | sha256 = "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"; | |
|
48 | }; | |
|
49 | }; | |
|
50 | "idna" = super.buildPythonPackage { | |
|
51 | name = "idna-2.7"; | |
|
52 | doCheck = false; | |
|
53 | src = fetchurl { | |
|
54 | url = "https://files.pythonhosted.org/packages/65/c4/80f97e9c9628f3cac9b98bfca0402ede54e0563b56482e3e6e45c43c4935/idna-2.7.tar.gz"; | |
|
55 | sha256 = "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"; | |
|
56 | }; | |
|
57 | }; | |
|
58 | "imagesize" = super.buildPythonPackage { | |
|
59 | name = "imagesize-1.1.0"; | |
|
60 | doCheck = false; | |
|
61 | src = fetchurl { | |
|
62 | url = "https://files.pythonhosted.org/packages/41/f5/3cf63735d54aa9974e544aa25858d8f9670ac5b4da51020bbfc6aaade741/imagesize-1.1.0.tar.gz"; | |
|
63 | sha256 = "1dg3wn7qpwmhgqc0r9na2ding1wif9q5spz3j9zn2riwphc2k0zk"; | |
|
64 | }; | |
|
65 | }; | |
|
66 | "jinja2" = super.buildPythonPackage { | |
|
67 | name = "jinja2-2.9.6"; | |
|
68 | doCheck = false; | |
|
69 | propagatedBuildInputs = [ | |
|
70 | self."markupsafe" | |
|
71 | ]; | |
|
72 | src = fetchurl { | |
|
73 | url = "https://files.pythonhosted.org/packages/90/61/f820ff0076a2599dd39406dcb858ecb239438c02ce706c8e91131ab9c7f1/Jinja2-2.9.6.tar.gz"; | |
|
74 | sha256 = "1zzrkywhziqffrzks14kzixz7nd4yh2vc0fb04a68vfd2ai03anx"; | |
|
75 | }; | |
|
76 | }; | |
|
77 | "markupsafe" = super.buildPythonPackage { | |
|
78 | name = "markupsafe-1.0"; | |
|
79 | doCheck = false; | |
|
80 | src = fetchurl { | |
|
81 | url = "https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz"; | |
|
82 | sha256 = "0rdn1s8x9ni7ss8rfiacj7x1085lx8mh2zdwqslnw8xc3l4nkgm6"; | |
|
83 | }; | |
|
84 | }; | |
|
85 | "packaging" = super.buildPythonPackage { | |
|
86 | name = "packaging-17.1"; | |
|
87 | doCheck = false; | |
|
88 | propagatedBuildInputs = [ | |
|
89 | self."pyparsing" | |
|
90 | self."six" | |
|
91 | ]; | |
|
92 | src = fetchurl { | |
|
93 | url = "https://files.pythonhosted.org/packages/77/32/439f47be99809c12ef2da8b60a2c47987786d2c6c9205549dd6ef95df8bd/packaging-17.1.tar.gz"; | |
|
94 | sha256 = "0nrpayk8kij1zm9sjnk38ldz3a6705ggvw8ljylqbrb4vmqbf6gh"; | |
|
95 | }; | |
|
96 | }; | |
|
97 | "pygments" = super.buildPythonPackage { | |
|
98 | name = "pygments-2.2.0"; | |
|
99 | doCheck = false; | |
|
100 | src = fetchurl { | |
|
101 | url = "https://files.pythonhosted.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz"; | |
|
102 | sha256 = "1k78qdvir1yb1c634nkv6rbga8wv4289xarghmsbbvzhvr311bnv"; | |
|
103 | }; | |
|
104 | }; | |
|
105 | "pyparsing" = super.buildPythonPackage { | |
|
106 | name = "pyparsing-2.2.0"; | |
|
107 | doCheck = false; | |
|
108 | src = fetchurl { | |
|
109 | url = "https://files.pythonhosted.org/packages/3c/ec/a94f8cf7274ea60b5413df054f82a8980523efd712ec55a59e7c3357cf7c/pyparsing-2.2.0.tar.gz"; | |
|
110 | sha256 = "016b9gh606aa44sq92jslm89bg874ia0yyiyb643fa6dgbsbqch8"; | |
|
111 | }; | |
|
112 | }; | |
|
113 | "pytz" = super.buildPythonPackage { | |
|
114 | name = "pytz-2018.4"; | |
|
115 | doCheck = false; | |
|
116 | src = fetchurl { | |
|
117 | url = "https://files.pythonhosted.org/packages/10/76/52efda4ef98e7544321fd8d5d512e11739c1df18b0649551aeccfb1c8376/pytz-2018.4.tar.gz"; | |
|
118 | sha256 = "0jgpqx3kk2rhv81j1izjxvmx8d0x7hzs1857pgqnixic5wq2ar60"; | |
|
119 | }; | |
|
120 | }; | |
|
121 | "requests" = super.buildPythonPackage { | |
|
122 | name = "requests-2.19.1"; | |
|
123 | doCheck = false; | |
|
124 | propagatedBuildInputs = [ | |
|
125 | self."chardet" | |
|
126 | self."idna" | |
|
127 | self."urllib3" | |
|
128 | self."certifi" | |
|
129 | ]; | |
|
130 | src = fetchurl { | |
|
131 | url = "https://files.pythonhosted.org/packages/54/1f/782a5734931ddf2e1494e4cd615a51ff98e1879cbe9eecbdfeaf09aa75e9/requests-2.19.1.tar.gz"; | |
|
132 | sha256 = "0snf8xxdzsgh1x2zv3vilvbrv9jbpmnfagzzb1rjmmvflckdh8pc"; | |
|
133 | }; | |
|
134 | }; | |
|
135 | "setuptools" = super.buildPythonPackage { | |
|
136 | name = "setuptools-40.2.0"; | |
|
137 | doCheck = false; | |
|
138 | src = fetchurl { | |
|
139 | url = "https://files.pythonhosted.org/packages/ef/1d/201c13e353956a1c840f5d0fbf0461bd45bbd678ea4843ebf25924e8984c/setuptools-40.2.0.zip"; | |
|
140 | sha256 = "19ng5m7kigllg3x96c91y3a2k28g6kwnbb1v4warrnp4xma1v227"; | |
|
141 | }; | |
|
142 | }; | |
|
143 | "six" = super.buildPythonPackage { | |
|
144 | name = "six-1.11.0"; | |
|
145 | doCheck = false; | |
|
146 | src = fetchurl { | |
|
147 | url = "https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz"; | |
|
148 | sha256 = "1scqzwc51c875z23phj48gircqjgnn3af8zy2izjwmnlxrxsgs3h"; | |
|
149 | }; | |
|
150 | }; | |
|
151 | "snowballstemmer" = super.buildPythonPackage { | |
|
152 | name = "snowballstemmer-1.2.1"; | |
|
153 | doCheck = false; | |
|
154 | src = fetchurl { | |
|
155 | url = "https://files.pythonhosted.org/packages/20/6b/d2a7cb176d4d664d94a6debf52cd8dbae1f7203c8e42426daa077051d59c/snowballstemmer-1.2.1.tar.gz"; | |
|
156 | sha256 = "0a0idq4y5frv7qsg2x62jd7rd272749xk4x99misf5rcifk2d7wi"; | |
|
157 | }; | |
|
158 | }; | |
|
159 | "sphinx" = super.buildPythonPackage { | |
|
160 | name = "sphinx-1.7.8"; | |
|
161 | doCheck = false; | |
|
162 | propagatedBuildInputs = [ | |
|
163 | self."six" | |
|
164 | self."jinja2" | |
|
165 | self."pygments" | |
|
166 | self."docutils" | |
|
167 | self."snowballstemmer" | |
|
168 | self."babel" | |
|
169 | self."alabaster" | |
|
170 | self."imagesize" | |
|
171 | self."requests" | |
|
172 | self."setuptools" | |
|
173 | self."packaging" | |
|
174 | self."sphinxcontrib-websupport" | |
|
175 | self."typing" | |
|
176 | ]; | |
|
177 | src = fetchurl { | |
|
178 | url = "https://files.pythonhosted.org/packages/ac/54/4ef326d0c654da1ed91341a7a1f43efc18a8c770ddd2b8e45df97cb79d82/Sphinx-1.7.8.tar.gz"; | |
|
179 | sha256 = "1ryz0w4c31930f1br2sjwrxwx9cmsy7cqdb0d81g98n9bj250w50"; | |
|
180 | }; | |
|
181 | }; | |
|
182 | "sphinx-rtd-theme" = super.buildPythonPackage { | |
|
183 | name = "sphinx-rtd-theme-0.4.1"; | |
|
184 | doCheck = false; | |
|
185 | propagatedBuildInputs = [ | |
|
186 | self."sphinx" | |
|
187 | ]; | |
|
188 | src = fetchurl { | |
|
189 | url = "https://files.pythonhosted.org/packages/f2/b0/a1933d792b806118ddbca6699f2e2c844d9b1b16e84a89d7effd5cd2a800/sphinx_rtd_theme-0.4.1.tar.gz"; | |
|
190 | sha256 = "1xkyqam8dzbjaymdyvkiif85m4y3jf8crdiwlgcfp8gqcj57aj9v"; | |
|
191 | }; | |
|
192 | }; | |
|
193 | "sphinxcontrib-websupport" = super.buildPythonPackage { | |
|
194 | name = "sphinxcontrib-websupport-1.1.0"; | |
|
195 | doCheck = false; | |
|
196 | src = fetchurl { | |
|
197 | url = "https://files.pythonhosted.org/packages/07/7a/e74b06dce85555ffee33e1d6b7381314169ebf7e31b62c18fcb2815626b7/sphinxcontrib-websupport-1.1.0.tar.gz"; | |
|
198 | sha256 = "1ff3ix76xi1y6m99qxhaq5161ix9swwzydilvdya07mgbcvpzr4x"; | |
|
199 | }; | |
|
200 | }; | |
|
201 | "typing" = super.buildPythonPackage { | |
|
202 | name = "typing-3.6.6"; | |
|
203 | doCheck = false; | |
|
204 | src = fetchurl { | |
|
205 | url = "https://files.pythonhosted.org/packages/bf/9b/2bf84e841575b633d8d91ad923e198a415e3901f228715524689495b4317/typing-3.6.6.tar.gz"; | |
|
206 | sha256 = "0ba9acs4awx15bf9v3nrs781msbd2nx826906nj6fqks2bvca9s0"; | |
|
207 | }; | |
|
208 | }; | |
|
209 | "urllib3" = super.buildPythonPackage { | |
|
210 | name = "urllib3-1.23"; | |
|
211 | doCheck = false; | |
|
212 | src = fetchurl { | |
|
213 | url = "https://files.pythonhosted.org/packages/3c/d2/dc5471622bd200db1cd9319e02e71bc655e9ea27b8e0ce65fc69de0dac15/urllib3-1.23.tar.gz"; | |
|
214 | sha256 = "1bvbd35q3zdcd7gsv38fwpizy7p06dr0154g5gfybrvnbvhwb2m6"; | |
|
215 | }; | |
|
216 | }; | |
|
217 | ||
|
218 | ### Test requirements | |
|
219 | ||
|
220 | ||
|
221 | } |
@@ -0,0 +1,133 b'' | |||
|
1 | |RCE| 4.13.0 |RNS| | |
|
2 | ------------------ | |
|
3 | ||
|
4 | Release Date | |
|
5 | ^^^^^^^^^^^^ | |
|
6 | ||
|
7 | - 2018-09-05 | |
|
8 | ||
|
9 | ||
|
10 | New Features | |
|
11 | ^^^^^^^^^^^^ | |
|
12 | ||
|
13 | - Branch permissions: new set of permissions were added to control branch modification. | |
|
14 | There are 4 basic permissions that can be set for branch names/branch patterns: | |
|
15 | * no-access (any modification for given branch is forbidden) | |
|
16 | * web-merge (modify branch by web based PR merge) | |
|
17 | * push (only non-forced modification on branch are allowed) | |
|
18 | * forced push (all modification to branch are allowed) | |
|
19 | Available in EE edition only. | |
|
20 | - Unified search and repo-switcher: a new persistent search box is now present allowing | |
|
21 | to search for repositories, repository groups, commits (using full text search), | |
|
22 | users, user-groups. Replaces redundant quick-filters/repo switcher. | |
|
23 | - Default Reviewers: added possibility to match against regex based pattern as | |
|
24 | alternative syntax to glob which didn't handle all the cases. | |
|
25 | - Built-in Error tracker: added new exception tracking capability. All errors are now | |
|
26 | tracked and stored. This allows instance admins to see potential problems without | |
|
27 | access to the machine and logs. | |
|
28 | - User Groups: each user group which users have access to expose public profile link. | |
|
29 | It's possible to view the members of a group before attaching it to any resource. | |
|
30 | - New caching framework: existing Beaker cache was completely replaced by dogpile.cache | |
|
31 | library. This new cache framework in addition to solving multiple | |
|
32 | performance/reliability problems of Beaker is used to cache permissions tree. | |
|
33 | This gives huge performance boosts for very large and complex permission trees. | |
|
34 | - Pull Requests: description field is now allowed to use a RST/Markdown syntax. | |
|
35 | - SVN: added support for SVN 1.10 release line. | |
|
36 | ||
|
37 | ||
|
38 | General | |
|
39 | ^^^^^^^ | |
|
40 | ||
|
41 | - Google: updated google auth plugin with latest API changes. | |
|
42 | - Frontend: Switched to Polymer 2.0. | |
|
43 | - Events: added a default timeout for operation calling the endpoint url, so | |
|
44 | they won't block forever. | |
|
45 | - SQLAlchemy: allow DB connection ping/refresh using dedicated flag from .ini file. | |
|
46 | `sqlalchemy.db1.ping_connection = true` | |
|
47 | - Pull Requests: added option to force-refresh merge workspace in case of problems. | |
|
48 | Adding GET param `?force_refresh=1` into PR page triggers the refresh. | |
|
49 | - Pull Requests: show more info about version of comment vs latest version. | |
|
50 | - Diffs: skip line numbers during copy from a diff view. | |
|
51 | - License: use simple cache to read license info. | |
|
52 | Due to the complex and expensive encryption, this reduces requests time by ~10ms. | |
|
53 | - Debug: add new custom logging to track unique requests across systems. | |
|
54 | Allows tracking single requests in very busy system by unique ID added into logging system. | |
|
55 | - Configuration: .ini files now can replace a special placeholders e.g "{ENV_NAME}" | |
|
56 | into a value from the ENVIRONMENT. Allows easier setup in Docker and similar. | |
|
57 | - Backend: don't support vcsserver.scm_app anymore, now it uses http even if scm_app | |
|
58 | is specified. | |
|
59 | - Repositories: re-order creation/fork forms for better UX and consistency. | |
|
60 | - UI: Add the number of inactive users in _admin/users and _admin/user_groups | |
|
61 | - UX: updated registration form to better indicate what is the process of binding a | |
|
62 | RhodeCode account with external one like Google. | |
|
63 | - API: pull-requests allow automatic title generation via API | |
|
64 | - VCSServer: errors: use a better interface to track exceptions and tracebacks. | |
|
65 | - VCSServer: caches: replaced beaker with dogpile cache. | |
|
66 | - GIT: use GIT_DISCOVERY_ACROSS_FILESYSTEM for better compatibility on NFS servers. | |
|
67 | - Dependencies: bumped mercurial to 4.6.2 | |
|
68 | - Dependencies: bumped evolve to 8.0.1 | |
|
69 | - Dependencies: bumped hgsubversion to 1.9.2 | |
|
70 | - Dependencies: bumped git version to 2.16.4 | |
|
71 | - Dependencies: bumped SVN to 1.10.2 | |
|
72 | - Dependencies: added alternative pymysql drivers for mysql | |
|
73 | - NIX: updated to 18.03 nix packages, now shipped with python 2.7.15 | |
|
74 | release and multiple other new libraries. | |
|
75 | ||
|
76 | ||
|
77 | Security | |
|
78 | ^^^^^^^^ | |
|
79 | ||
|
80 | - Mercurial: general protocol security updates. | |
|
81 | * Fixes Mercurial's CVE for lack of permissions checking on mercurial batch commands. | |
|
82 | * Introduced more strict checks for permissions, now they default to push instead of pull. | |
|
83 | * Decypher batch commands and pick top-most permission to be required. | |
|
84 | * This follows changes in Mercurial CORE after 4.6.1 release. | |
|
85 | - Fixed bug in bleach sanitizer allowing certain custom payload to bypass it. Now | |
|
86 | we always fails if sanitizing fails. This could lead to stored XSS | |
|
87 | - Fixed stored XSS in binary file rendering. | |
|
88 | - Fixed stored XSS in repo forks datagrid. | |
|
89 | ||
|
90 | ||
|
91 | Performance | |
|
92 | ^^^^^^^^^^^ | |
|
93 | ||
|
94 | - Permissions: Permission trees for users and now cached, after calculation. | |
|
95 | This reduces response time for some pages dramatically. | |
|
96 | In case of any permission changes caches are invalidated. | |
|
97 | - Core: new dogpile.cache based cache framework was introduced, which is faster than | |
|
98 | previously used Beaker. | |
|
99 | ||
|
100 | ||
|
101 | Fixes | |
|
102 | ^^^^^ | |
|
103 | ||
|
104 | - Audit Logs: store properly IP for certain events. | |
|
105 | - External Auth: pass along came_from into the url so we get properly | |
|
106 | redirected back after logging using external auth provider. | |
|
107 | - Pull Requests: lock submit on pull request to prevent double submission on a fast click. | |
|
108 | - Pull Requests: fixed a case of unresolved comments attached to removed file in pull request. | |
|
109 | That prevented from closing it. | |
|
110 | - Pull Requests: use numeric repo id for creation of shadow repos. Fixes a problem | |
|
111 | when repository is renamed during PR lifetime. | |
|
112 | - API: fixed creation of a pull request with default reviewer rules. | |
|
113 | - Default Reviewers: fixed voting rule calculation on user group. | |
|
114 | - Pull Requests: in GIT use force fetch and update for target ref. | |
|
115 | This solves a case when in PR a target repository is force updated (by push force) | |
|
116 | and is out of sync. | |
|
117 | - VCSServer: detect early potential locale problem, and fallback to LC_ALL=C, | |
|
118 | instead of crashing vcsserver. | |
|
119 | - Pull Requests: use a safer way of destroying shadow repositories. | |
|
120 | Fixes some problems in NFS storage and big repositories | |
|
121 | ||
|
122 | ||
|
123 | Upgrade notes | |
|
124 | ^^^^^^^^^^^^^ | |
|
125 | ||
|
126 | - The direct backend `vcsserver.scm_app` is not supported anymore. This backed was | |
|
127 | already deprecated some time ago. Now it will use `http` mode even if scm_app is | |
|
128 | specified. Please contact us in case you still use it, and not sure how to upgrade. | |
|
129 | - New dogpile cache settings are not ported to converted .ini. If users want to do | |
|
130 | adjustments please copy the settings over dogpile cache section from a newly | |
|
131 | generated rhodecode.template.ini file. This file is stored next to rhodecode.ini | |
|
132 | - SVN 1.10.2 was introduced in this release. Please make sure to update your | |
|
133 | mod_dav to the same version for best compatibility. |
@@ -0,0 +1,52 b'' | |||
|
1 | ||
|
2 | ============================== | |
|
3 | Generate the Nix expressions | |
|
4 | ============================== | |
|
5 | ||
|
6 | Details can be found in the repository of `RhodeCode Enterprise CE`_ inside of | |
|
7 | the file `docs/contributing/dependencies.rst`. | |
|
8 | ||
|
9 | Start the environment as follows: | |
|
10 | ||
|
11 | .. code:: shell | |
|
12 | ||
|
13 | nix-shell pkgs/shell-generate.nix | |
|
14 | ||
|
15 | ||
|
16 | ||
|
17 | Python dependencies | |
|
18 | =================== | |
|
19 | ||
|
20 | .. code:: shell | |
|
21 | ||
|
22 | pip2nix generate --licenses | |
|
23 | # or | |
|
24 | nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses" | |
|
25 | ||
|
26 | ||
|
27 | NodeJS dependencies | |
|
28 | =================== | |
|
29 | ||
|
30 | .. code:: shell | |
|
31 | ||
|
32 | rm -rf node_modules | |
|
33 | nix-shell pkgs/shell-generate.nix --command " | |
|
34 | node2nix --input package.json \ | |
|
35 | -o pkgs/node-packages.nix \ | |
|
36 | -e pkgs/node-env.nix \ | |
|
37 | -c pkgs/node-default.nix \ | |
|
38 | -d --flatten --nodejs-6 " | |
|
39 | ||
|
40 | ||
|
41 | ||
|
42 | Bower dependencies | |
|
43 | ================== | |
|
44 | ||
|
45 | .. code:: shell | |
|
46 | ||
|
47 | nix-shell pkgs/shell-generate.nix --command "bower2nix bower.json pkgs/bower-packages.nix" | |
|
48 | ||
|
49 | ||
|
50 | .. Links | |
|
51 | ||
|
52 | .. _RhodeCode Enterprise CE: https://code.rhodecode.com/rhodecode-enterprise-ce |
@@ -0,0 +1,17 b'' | |||
|
1 | { pkgs | |
|
2 | , pythonPackages | |
|
3 | }: | |
|
4 | ||
|
5 | rec { | |
|
6 | pip2nix-src = pkgs.fetchzip { | |
|
7 | url = https://github.com/johbo/pip2nix/archive/51e6fdae34d0e8ded9efeef7a8601730249687a6.tar.gz; | |
|
8 | sha256 = "02a4jjgi7lsvf8mhrxsd56s9a3yg20081rl9bgc2m84w60v2gbz2"; | |
|
9 | }; | |
|
10 | ||
|
11 | pip2nix = import pip2nix-src { | |
|
12 | inherit | |
|
13 | pkgs | |
|
14 | pythonPackages; | |
|
15 | }; | |
|
16 | ||
|
17 | } |
@@ -0,0 +1,13 b'' | |||
|
1 | diff -rup Beaker-1.9.1-orig/beaker/ext/database.py Beaker-1.9.1/beaker/ext/database.py | |
|
2 | --- Beaker-1.9.1-orig/beaker/ext/database.py 2018-05-22 18:22:34.802619619 +0200 | |
|
3 | +++ Beaker-1.9.1/beaker/ext/database.py 2018-05-22 17:07:14.048335196 +0200 | |
|
4 | @@ -91,7 +91,8 @@ class DatabaseNamespaceManager(OpenResou | |
|
5 | sa.Column('created', types.DateTime, nullable=False), | |
|
6 | sa.Column('data', types.PickleType, nullable=False), | |
|
7 | sa.UniqueConstraint('namespace'), | |
|
8 | - schema=schema_name if schema_name else meta.schema | |
|
9 | + schema=schema_name if schema_name else meta.schema, | |
|
10 | + extend_existing=True | |
|
11 | ) | |
|
12 | cache.create(checkfirst=True) | |
|
13 | return cache |
@@ -0,0 +1,53 b'' | |||
|
1 | { pkgs ? (import <nixpkgs> {}) | |
|
2 | , pythonPackages ? "python27Packages" | |
|
3 | }: | |
|
4 | ||
|
5 | with pkgs.lib; | |
|
6 | ||
|
7 | let _pythonPackages = pythonPackages; in | |
|
8 | let | |
|
9 | pythonPackages = getAttr _pythonPackages pkgs; | |
|
10 | ||
|
11 | pip2nix = import ./nix-common/pip2nix.nix { | |
|
12 | inherit | |
|
13 | pkgs | |
|
14 | pythonPackages; | |
|
15 | }; | |
|
16 | ||
|
17 | in | |
|
18 | ||
|
19 | pkgs.stdenv.mkDerivation { | |
|
20 | name = "pip2nix-generated"; | |
|
21 | buildInputs = [ | |
|
22 | # Allows to generate python packages | |
|
23 | pip2nix.pip2nix | |
|
24 | pythonPackages.pip-tools | |
|
25 | ||
|
26 | # Allows to generate bower dependencies | |
|
27 | pkgs.nodePackages.bower2nix | |
|
28 | ||
|
29 | # Allows to generate node dependencies | |
|
30 | pkgs.nodePackages.node2nix | |
|
31 | ||
|
32 | # We need mysql_config to be around | |
|
33 | pkgs.mysql | |
|
34 | ||
|
35 | # We need postgresql to be around | |
|
36 | pkgs.postgresql | |
|
37 | ||
|
38 | # Curl is needed for pycurl | |
|
39 | pkgs.curl | |
|
40 | ]; | |
|
41 | ||
|
42 | shellHook = '' | |
|
43 | runHook preShellHook | |
|
44 | runHook postShellHook | |
|
45 | ''; | |
|
46 | ||
|
47 | preShellHook = '' | |
|
48 | echo "Starting Generate Shell" | |
|
49 | # Custom prompt to distinguish from other dev envs. | |
|
50 | export PS1="\n\[\033[1;32m\][Generate-shell:\w]$\[\033[0m\] " | |
|
51 | export PYCURL_SSL_LIBRARY=openssl | |
|
52 | ''; | |
|
53 | } |
|
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, binary diff hidden |
|
1 | NO CONTENT: new file 100644, binary diff hidden |
|
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,5 +1,5 b'' | |||
|
1 | 1 | [bumpversion] |
|
2 |
current_version = 4.1 |
|
|
2 | current_version = 4.13.0 | |
|
3 | 3 | message = release: Bump version {current_version} to {new_version} |
|
4 | 4 | |
|
5 | 5 | [bumpversion:file:rhodecode/VERSION] |
@@ -5,25 +5,20 b' done = false' | |||
|
5 | 5 | done = true |
|
6 | 6 | |
|
7 | 7 | [task:rc_tools_pinned] |
|
8 | done = true | |
|
9 | 8 | |
|
10 | 9 | [task:fixes_on_stable] |
|
11 | done = true | |
|
12 | 10 | |
|
13 | 11 | [task:pip2nix_generated] |
|
14 | done = true | |
|
15 | 12 | |
|
16 | 13 | [task:changelog_updated] |
|
17 | done = true | |
|
18 | 14 | |
|
19 | 15 | [task:generate_api_docs] |
|
20 | done = true | |
|
16 | ||
|
17 | [task:updated_translation] | |
|
21 | 18 | |
|
22 | 19 | [release] |
|
23 |
state = |
|
|
24 |
version = 4.1 |
|
|
25 | ||
|
26 | [task:updated_translation] | |
|
20 | state = in_progress | |
|
21 | version = 4.13.0 | |
|
27 | 22 | |
|
28 | 23 | [task:generate_js_routes] |
|
29 | 24 |
@@ -26,6 +26,8 b' recursive-include rhodecode *.mako' | |||
|
26 | 26 | # 502 page |
|
27 | 27 | include rhodecode/public/502.html |
|
28 | 28 | |
|
29 | # robots | |
|
30 | include rhodecode/public/robots.txt | |
|
29 | 31 | |
|
30 | 32 | # images, css |
|
31 | 33 | include rhodecode/public/css/*.css |
@@ -7,8 +7,9 b' About' | |||
|
7 | 7 | |
|
8 | 8 | ``RhodeCode`` is a fast and powerful management tool for Mercurial_ and GIT_ |
|
9 | 9 | and Subversion_ with a built in push/pull server, full text search, |
|
10 |
pull requests and powerful |
|
|
10 | pull requests and powerful code-review system. It works on http/https and | |
|
11 | 11 | has a few unique features like: |
|
12 | ||
|
12 | 13 |
|
|
13 | 14 | - advanced permission system with IP restrictions |
|
14 | 15 | - rich set of authentication plugins including LDAP, |
@@ -78,10 +79,9 b' Listed bellow are various support resour' | |||
|
78 | 79 | |
|
79 | 80 | - Official issue tracker `RhodeCode Issue tracker <https://issues.rhodecode.com>`_ |
|
80 | 81 | |
|
81 | - Search our community portal `Community portal <https://community.rhodecode.com>`_ | |
|
82 | - Official Slack Community Channel `RhodeCode Slack <https://rhodecode.com/join>`_ | |
|
82 | 83 | |
|
83 | - Join #rhodecode on FreeNode (irc.freenode.net) | |
|
84 | or use http://webchat.freenode.net/?channels=rhodecode for web access to irc. | |
|
84 | - Search our community portal `Community portal <https://community.rhodecode.com>`_ | |
|
85 | 85 | |
|
86 | 86 | - You can also follow RhodeCode on twitter **@RhodeCode** where we often post |
|
87 | 87 | news and other interesting stuff about RhodeCode. |
@@ -3,15 +3,15 b'' | |||
|
3 | 3 | "description": "User interface for elements for rhodecode", |
|
4 | 4 | "main": "index.html", |
|
5 | 5 | "dependencies": { |
|
6 |
"webcomponentsjs": "^ |
|
|
7 |
"polymer": "Polymer/polymer#^ |
|
|
8 |
"paper-button": "PolymerElements/paper-button#^ |
|
|
9 |
"paper-spinner": "PolymerElements/paper-spinner#^ |
|
|
10 |
"paper-tooltip": "PolymerElements/paper-tooltip#^1.1 |
|
|
11 |
"paper-toast": "PolymerElements/paper-toast#^ |
|
|
12 |
"paper-toggle-button": "PolymerElements/paper-toggle-button#^ |
|
|
13 |
"iron-ajax": "PolymerElements/iron-ajax#^ |
|
|
14 |
"iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^ |
|
|
15 |
"iron-a11y-keys": "PolymerElements/iron-a11y-keys#^ |
|
|
6 | "webcomponentsjs": "^1.2.3", | |
|
7 | "polymer": "Polymer/polymer#^2.6.0", | |
|
8 | "paper-button": "PolymerElements/paper-button#^2.1.2", | |
|
9 | "paper-spinner": "PolymerElements/paper-spinner#^2.1.0", | |
|
10 | "paper-tooltip": "PolymerElements/paper-tooltip#^2.1.1", | |
|
11 | "paper-toast": "PolymerElements/paper-toast#^2.1.2", | |
|
12 | "paper-toggle-button": "PolymerElements/paper-toggle-button#^2.1.1", | |
|
13 | "iron-ajax": "PolymerElements/iron-ajax#^2.1.3", | |
|
14 | "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^2.2.0", | |
|
15 | "iron-a11y-keys": "PolymerElements/iron-a11y-keys#^2.1.2" | |
|
16 | 16 | } |
|
17 | 17 | } |
@@ -2,7 +2,6 b'' | |||
|
2 | 2 | |
|
3 | 3 | ################################################################################ |
|
4 | 4 | ## RHODECODE COMMUNITY EDITION CONFIGURATION ## |
|
5 | # The %(here)s variable will be replaced with the parent directory of this file# | |
|
6 | 5 | ################################################################################ |
|
7 | 6 | |
|
8 | 7 | [DEFAULT] |
@@ -46,10 +45,9 b' debug = true' | |||
|
46 | 45 | host = 127.0.0.1 |
|
47 | 46 | port = 5000 |
|
48 | 47 | |
|
49 | ################################## | |
|
50 |
## |
|
|
51 | ## Recommended for Development ## | |
|
52 | ################################## | |
|
48 | ########################################################### | |
|
49 | ## WAITRESS WSGI SERVER - Recommended for Development #### | |
|
50 | ########################################################### | |
|
53 | 51 | |
|
54 | 52 | use = egg:waitress#main |
|
55 | 53 | ## number of worker threads |
@@ -67,15 +65,15 b' asyncore_use_poll = true' | |||
|
67 | 65 | ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini |
|
68 | 66 | |
|
69 | 67 | #use = egg:gunicorn#main |
|
70 |
## Sets the number of process workers. |
|
|
71 | ## when this option is set to more than one worker, recommended | |
|
72 | ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers | |
|
73 | ## The `instance_id = *` must be set in the [app:main] section below | |
|
68 | ## Sets the number of process workers. More workers means more concurent connections | |
|
69 | ## RhodeCode can handle at the same time. Each additional worker also it increases | |
|
70 | ## memory usage as each has it's own set of caches. | |
|
71 | ## Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more | |
|
72 | ## than 8-10 unless for really big deployments .e.g 700-1000 users. | |
|
73 | ## `instance_id = *` must be set in the [app:main] section below (which is the default) | |
|
74 | ## when using more than 1 worker. | |
|
74 | 75 | #workers = 2 |
|
75 | ## number of threads for each of the worker, must be set to 1 for gevent | |
|
76 | ## generally recommended to be at 1 | |
|
77 | #threads = 1 | |
|
78 | ## process name | |
|
76 | ## process name visible in process list | |
|
79 | 77 | #proc_name = rhodecode |
|
80 | 78 | ## type of worker class, one of sync, gevent |
|
81 | 79 | ## recommended for bigger setup is using of of other than sync one |
@@ -103,6 +101,11 b' use = egg:PasteDeploy#prefix' | |||
|
103 | 101 | prefix = / |
|
104 | 102 | |
|
105 | 103 | [app:main] |
|
104 | ## The %(here)s variable will be replaced with the absolute path of parent directory | |
|
105 | ## of this file | |
|
106 | ## In addition ENVIRONMENT variables usage is possible, e.g | |
|
107 | ## sqlalchemy.db1.url = {ENV_RC_DB_URL} | |
|
108 | ||
|
106 | 109 | use = egg:rhodecode-enterprise-ce |
|
107 | 110 | |
|
108 | 111 | ## enable proxy prefix middleware, defined above |
@@ -148,12 +151,12 b' gzip_responses = false' | |||
|
148 | 151 | ## autogenerate javascript routes file on startup |
|
149 | 152 | generate_js_files = false |
|
150 | 153 | |
|
151 | ## Optional Languages | |
|
152 | ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh | |
|
154 | ## System global default language. | |
|
155 | ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh | |
|
153 | 156 | lang = en |
|
154 | 157 | |
|
155 |
## |
|
|
156 | ## set to false after first startup, to allow faster server restarts. | |
|
158 | ## Perform a full repository scan and import on each server start. | |
|
159 | ## Settings this to true could lead to very long startup time. | |
|
157 | 160 | startup.import_repos = false |
|
158 | 161 | |
|
159 | 162 | ## Uncomment and set this path to use archive download cache. |
@@ -167,23 +170,23 b' startup.import_repos = false' | |||
|
167 | 170 | ## SSH calls. Set this for events to receive proper url for SSH calls. |
|
168 | 171 | app.base_url = http://rhodecode.local |
|
169 | 172 | |
|
170 | ## change this to unique ID for security | |
|
173 | ## Unique application ID. Should be a random unique string for security. | |
|
171 | 174 | app_instance_uuid = rc-production |
|
172 | 175 | |
|
173 |
## |
|
|
176 | ## Cut off limit for large diffs (size in bytes). If overall diff size on | |
|
174 | 177 | ## commit, or pull request exceeds this limit this diff will be displayed |
|
175 | 178 | ## partially. E.g 512000 == 512Kb |
|
176 | 179 | cut_off_limit_diff = 512000 |
|
177 | 180 | |
|
178 |
## |
|
|
181 | ## Cut off limit for large files inside diffs (size in bytes). Each individual | |
|
179 | 182 | ## file inside diff which exceeds this limit will be displayed partially. |
|
180 | 183 | ## E.g 128000 == 128Kb |
|
181 | 184 | cut_off_limit_file = 128000 |
|
182 | 185 | |
|
183 |
## use cache version of |
|
|
186 | ## use cached version of vcs repositories everywhere. Recommended to be `true` | |
|
184 | 187 | vcs_full_cache = true |
|
185 | 188 | |
|
186 |
## |
|
|
189 | ## Force https in RhodeCode, fixes https redirects, assumes it's always https. | |
|
187 | 190 | ## Normally this is controlled by proper http flags sent from http server |
|
188 | 191 | force_https = false |
|
189 | 192 | |
@@ -230,7 +233,7 b' gist_alias_url =' | |||
|
230 | 233 | # GistView:* |
|
231 | 234 | api_access_controllers_whitelist = |
|
232 | 235 | |
|
233 |
## |
|
|
236 | ## Default encoding used to convert from and to unicode | |
|
234 | 237 | ## can be also a comma separated list of encoding in case of mixed encodings |
|
235 | 238 | default_encoding = UTF-8 |
|
236 | 239 | |
@@ -277,8 +280,8 b' allow_repo_location_change = true' | |||
|
277 | 280 | ## allows to setup custom hooks in settings page |
|
278 | 281 | allow_custom_hooks_settings = true |
|
279 | 282 | |
|
280 | ## generated license token, goto license page in RhodeCode settings to obtain | |
|
281 | ## new token | |
|
283 | ## Generated license token required for EE edition license. | |
|
284 | ## New generated token value can be found in Admin > settings > license page. | |
|
282 | 285 | license_token = |
|
283 | 286 | |
|
284 | 287 | ## supervisor connection uri, for managing supervisor and logs. |
@@ -308,65 +311,66 b' celery.max_tasks_per_child = 100' | |||
|
308 | 311 | ## tasks will never be sent to the queue, but executed locally instead. |
|
309 | 312 | celery.task_always_eager = false |
|
310 | 313 | |
|
311 | #################################### | |
|
312 |
### |
|
|
313 | #################################### | |
|
314 |
# |
|
|
315 |
## can boost performance, eg. |
|
|
314 | ##################################### | |
|
315 | ### DOGPILE CACHE #### | |
|
316 | ##################################### | |
|
317 | ## Default cache dir for caches. Putting this into a ramdisk | |
|
318 | ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require | |
|
319 | ## large amount of space | |
|
316 | 320 | cache_dir = %(here)s/data |
|
317 | 321 | |
|
318 | ## locking and default file storage for Beaker. Putting this into a ramdisk | |
|
319 | ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data | |
|
320 | beaker.cache.data_dir = %(here)s/data/cache/beaker_data | |
|
321 | beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock | |
|
322 | ||
|
323 | beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long | |
|
322 | ## `cache_perms` cache settings for permission tree, auth TTL. | |
|
323 | rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace | |
|
324 | rc_cache.cache_perms.expiration_time = 300 | |
|
324 | 325 | |
|
325 | beaker.cache.super_short_term.type = memory | |
|
326 | beaker.cache.super_short_term.expire = 10 | |
|
327 | beaker.cache.super_short_term.key_length = 256 | |
|
326 | ## alternative `cache_perms` redis backend with distributed lock | |
|
327 | #rc_cache.cache_perms.backend = dogpile.cache.rc.redis | |
|
328 | #rc_cache.cache_perms.expiration_time = 300 | |
|
329 | ## redis_expiration_time needs to be greater then expiration_time | |
|
330 | #rc_cache.cache_perms.arguments.redis_expiration_time = 7200 | |
|
331 | #rc_cache.cache_perms.arguments.socket_timeout = 30 | |
|
332 | #rc_cache.cache_perms.arguments.host = localhost | |
|
333 | #rc_cache.cache_perms.arguments.port = 6379 | |
|
334 | #rc_cache.cache_perms.arguments.db = 0 | |
|
335 | #rc_cache.cache_perms.arguments.distributed_lock = true | |
|
328 | 336 | |
|
329 | beaker.cache.short_term.type = memory | |
|
330 | beaker.cache.short_term.expire = 60 | |
|
331 | beaker.cache.short_term.key_length = 256 | |
|
332 | ||
|
333 | beaker.cache.long_term.type = memory | |
|
334 | beaker.cache.long_term.expire = 36000 | |
|
335 | beaker.cache.long_term.key_length = 256 | |
|
337 | ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS | |
|
338 | rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace | |
|
339 | rc_cache.cache_repo.expiration_time = 2592000 | |
|
336 | 340 | |
|
337 | beaker.cache.sql_cache_short.type = memory | |
|
338 | beaker.cache.sql_cache_short.expire = 10 | |
|
339 | beaker.cache.sql_cache_short.key_length = 256 | |
|
341 | ## alternative `cache_repo` redis backend with distributed lock | |
|
342 | #rc_cache.cache_repo.backend = dogpile.cache.rc.redis | |
|
343 | #rc_cache.cache_repo.expiration_time = 2592000 | |
|
344 | ## redis_expiration_time needs to be greater then expiration_time | |
|
345 | #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400 | |
|
346 | #rc_cache.cache_repo.arguments.socket_timeout = 30 | |
|
347 | #rc_cache.cache_repo.arguments.host = localhost | |
|
348 | #rc_cache.cache_repo.arguments.port = 6379 | |
|
349 | #rc_cache.cache_repo.arguments.db = 1 | |
|
350 | #rc_cache.cache_repo.arguments.distributed_lock = true | |
|
340 | 351 | |
|
341 | ## default is memory cache, configure only if required | |
|
342 | ## using multi-node or multi-worker setup | |
|
343 | #beaker.cache.auth_plugins.type = ext:database | |
|
344 | #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock | |
|
345 | #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode | |
|
346 | #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode | |
|
347 | #beaker.cache.auth_plugins.sa.pool_recycle = 3600 | |
|
348 | #beaker.cache.auth_plugins.sa.pool_size = 10 | |
|
349 | #beaker.cache.auth_plugins.sa.max_overflow = 0 | |
|
352 | ## cache settings for SQL queries, this needs to use memory type backend | |
|
353 | rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru | |
|
354 | rc_cache.sql_cache_short.expiration_time = 30 | |
|
350 | 355 | |
|
351 | beaker.cache.repo_cache_long.type = memorylru_base | |
|
352 | beaker.cache.repo_cache_long.max_items = 4096 | |
|
353 | beaker.cache.repo_cache_long.expire = 2592000 | |
|
356 | ## `cache_repo_longterm` cache for repo object instances, this needs to use memory | |
|
357 | ## type backend as the objects kept are not pickle serializable | |
|
358 | rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru | |
|
359 | ## by default we use 96H, this is using invalidation on push anyway | |
|
360 | rc_cache.cache_repo_longterm.expiration_time = 345600 | |
|
361 | ## max items in LRU cache, reduce this number to save memory, and expire last used | |
|
362 | ## cached objects | |
|
363 | rc_cache.cache_repo_longterm.max_size = 10000 | |
|
354 | 364 | |
|
355 | ## default is memorylru_base cache, configure only if required | |
|
356 | ## using multi-node or multi-worker setup | |
|
357 | #beaker.cache.repo_cache_long.type = ext:memcached | |
|
358 | #beaker.cache.repo_cache_long.url = localhost:11211 | |
|
359 | #beaker.cache.repo_cache_long.expire = 1209600 | |
|
360 | #beaker.cache.repo_cache_long.key_length = 256 | |
|
361 | 365 | |
|
362 | 366 | #################################### |
|
363 | 367 | ### BEAKER SESSION #### |
|
364 | 368 | #################################### |
|
365 | 369 | |
|
366 | 370 | ## .session.type is type of storage options for the session, current allowed |
|
367 | ## types are file, ext:memcached, ext:database, and memory (default). | |
|
371 | ## types are file, ext:memcached, ext:redis, ext:database, and memory (default). | |
|
368 | 372 | beaker.session.type = file |
|
369 |
beaker.session.data_dir = %(here)s/data/sessions |
|
|
373 | beaker.session.data_dir = %(here)s/data/sessions | |
|
370 | 374 | |
|
371 | 375 | ## db based session, fast, and allows easy management over logged in users |
|
372 | 376 | #beaker.session.type = ext:database |
@@ -502,10 +506,7 b' appenlight.log_namespace_blacklist =' | |||
|
502 | 506 | ################################################################################ |
|
503 | 507 | #set debug = false |
|
504 | 508 | |
|
505 | ||
|
506 | ############## | |
|
507 | ## STYLING ## | |
|
508 | ############## | |
|
509 | # enable debug style page | |
|
509 | 510 | debug_style = true |
|
510 | 511 | |
|
511 | 512 | ########################################### |
@@ -514,6 +515,9 b' debug_style = true' | |||
|
514 | 515 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
515 | 516 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
516 | 517 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode |
|
518 | # pymysql is an alternative driver for MySQL, use in case of problems with default one | |
|
519 | #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode | |
|
520 | ||
|
517 | 521 | sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
518 | 522 | |
|
519 | 523 | # see sqlalchemy docs for other advanced settings |
@@ -533,6 +537,9 b' sqlalchemy.db1.convert_unicode = true' | |||
|
533 | 537 | ## which defaults to five. |
|
534 | 538 | #sqlalchemy.db1.max_overflow = 10 |
|
535 | 539 | |
|
540 | ## Connection check ping, used to detect broken database connections | |
|
541 | ## could be enabled to better handle cases if MySQL has gone away errors | |
|
542 | #sqlalchemy.db1.ping_connection = true | |
|
536 | 543 | |
|
537 | 544 | ################## |
|
538 | 545 | ### VCS CONFIG ### |
@@ -547,15 +554,18 b' vcs.server.protocol = http' | |||
|
547 | 554 | |
|
548 | 555 | ## Push/Pull operations protocol, available options are: |
|
549 | 556 | ## `http` - use http-rpc backend (default) |
|
550 | ## | |
|
551 | 557 | vcs.scm_app_implementation = http |
|
552 | 558 | |
|
553 | 559 | ## Push/Pull operations hooks protocol, available options are: |
|
554 | 560 | ## `http` - use http-rpc backend (default) |
|
555 | 561 | vcs.hooks.protocol = http |
|
556 | 562 | |
|
563 | ## Host on which this instance is listening for hooks. If vcsserver is in other location | |
|
564 | ## this should be adjusted. | |
|
565 | vcs.hooks.host = 127.0.0.1 | |
|
566 | ||
|
557 | 567 | vcs.server.log_level = debug |
|
558 |
## Start VCSServer with this instance as a subprocess, useful |
|
|
568 | ## Start VCSServer with this instance as a subprocess, useful for development | |
|
559 | 569 | vcs.start_server = false |
|
560 | 570 | |
|
561 | 571 | ## List of enabled VCS backends, available options are: |
@@ -638,7 +648,7 b' custom.conf = 1' | |||
|
638 | 648 | ### LOGGING CONFIGURATION #### |
|
639 | 649 | ################################ |
|
640 | 650 | [loggers] |
|
641 |
keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper |
|
|
651 | keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper | |
|
642 | 652 | |
|
643 | 653 | [handlers] |
|
644 | 654 | keys = console, console_sql |
@@ -694,9 +704,12 b' level = DEBUG' | |||
|
694 | 704 | formatter = color_formatter |
|
695 | 705 | |
|
696 | 706 | [handler_console_sql] |
|
707 | # "level = DEBUG" logs SQL queries and results. | |
|
708 | # "level = INFO" logs SQL queries. | |
|
709 | # "level = WARN" logs neither. (Recommended for production systems.) | |
|
697 | 710 | class = StreamHandler |
|
698 | 711 | args = (sys.stderr, ) |
|
699 |
level = |
|
|
712 | level = WARN | |
|
700 | 713 | formatter = color_formatter_sql |
|
701 | 714 | |
|
702 | 715 | ################ |
@@ -715,5 +728,5 b' datefmt = %Y-%m-%d %H:%M:%S' | |||
|
715 | 728 | |
|
716 | 729 | [formatter_color_formatter_sql] |
|
717 | 730 | class = rhodecode.lib.logging_formatter.ColorFormatterSql |
|
718 | format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s | |
|
731 | format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s | |
|
719 | 732 | datefmt = %Y-%m-%d %H:%M:%S |
@@ -2,7 +2,6 b'' | |||
|
2 | 2 | |
|
3 | 3 | ################################################################################ |
|
4 | 4 | ## RHODECODE COMMUNITY EDITION CONFIGURATION ## |
|
5 | # The %(here)s variable will be replaced with the parent directory of this file# | |
|
6 | 5 | ################################################################################ |
|
7 | 6 | |
|
8 | 7 | [DEFAULT] |
@@ -46,10 +45,9 b' debug = true' | |||
|
46 | 45 | host = 127.0.0.1 |
|
47 | 46 | port = 5000 |
|
48 | 47 | |
|
49 | ################################## | |
|
50 |
## |
|
|
51 | ## Recommended for Development ## | |
|
52 | ################################## | |
|
48 | ########################################################### | |
|
49 | ## WAITRESS WSGI SERVER - Recommended for Development #### | |
|
50 | ########################################################### | |
|
53 | 51 | |
|
54 | 52 | #use = egg:waitress#main |
|
55 | 53 | ## number of worker threads |
@@ -67,21 +65,21 b' port = 5000' | |||
|
67 | 65 | ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini |
|
68 | 66 | |
|
69 | 67 | use = egg:gunicorn#main |
|
70 |
## Sets the number of process workers. |
|
|
71 | ## when this option is set to more than one worker, recommended | |
|
72 | ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers | |
|
73 | ## The `instance_id = *` must be set in the [app:main] section below | |
|
68 | ## Sets the number of process workers. More workers means more concurent connections | |
|
69 | ## RhodeCode can handle at the same time. Each additional worker also it increases | |
|
70 | ## memory usage as each has it's own set of caches. | |
|
71 | ## Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more | |
|
72 | ## than 8-10 unless for really big deployments .e.g 700-1000 users. | |
|
73 | ## `instance_id = *` must be set in the [app:main] section below (which is the default) | |
|
74 | ## when using more than 1 worker. | |
|
74 | 75 | workers = 2 |
|
75 | ## number of threads for each of the worker, must be set to 1 for gevent | |
|
76 | ## generally recommended to be at 1 | |
|
77 | #threads = 1 | |
|
78 | ## process name | |
|
76 | ## process name visible in process list | |
|
79 | 77 | proc_name = rhodecode |
|
80 | 78 | ## type of worker class, one of sync, gevent |
|
81 | 79 | ## recommended for bigger setup is using of of other than sync one |
|
82 | 80 | worker_class = gevent |
|
83 | 81 | ## The maximum number of simultaneous clients. Valid only for Gevent |
|
84 |
|
|
|
82 | worker_connections = 10 | |
|
85 | 83 | ## max number of requests that worker will handle before being gracefully |
|
86 | 84 | ## restarted, could prevent memory leaks |
|
87 | 85 | max_requests = 1000 |
@@ -103,6 +101,11 b' use = egg:PasteDeploy#prefix' | |||
|
103 | 101 | prefix = / |
|
104 | 102 | |
|
105 | 103 | [app:main] |
|
104 | ## The %(here)s variable will be replaced with the absolute path of parent directory | |
|
105 | ## of this file | |
|
106 | ## In addition ENVIRONMENT variables usage is possible, e.g | |
|
107 | ## sqlalchemy.db1.url = {ENV_RC_DB_URL} | |
|
108 | ||
|
106 | 109 | use = egg:rhodecode-enterprise-ce |
|
107 | 110 | |
|
108 | 111 | ## enable proxy prefix middleware, defined above |
@@ -123,12 +126,12 b' gzip_responses = false' | |||
|
123 | 126 | ## autogenerate javascript routes file on startup |
|
124 | 127 | generate_js_files = false |
|
125 | 128 | |
|
126 | ## Optional Languages | |
|
127 | ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh | |
|
129 | ## System global default language. | |
|
130 | ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh | |
|
128 | 131 | lang = en |
|
129 | 132 | |
|
130 |
## |
|
|
131 | ## set to false after first startup, to allow faster server restarts. | |
|
133 | ## Perform a full repository scan and import on each server start. | |
|
134 | ## Settings this to true could lead to very long startup time. | |
|
132 | 135 | startup.import_repos = false |
|
133 | 136 | |
|
134 | 137 | ## Uncomment and set this path to use archive download cache. |
@@ -142,23 +145,23 b' startup.import_repos = false' | |||
|
142 | 145 | ## SSH calls. Set this for events to receive proper url for SSH calls. |
|
143 | 146 | app.base_url = http://rhodecode.local |
|
144 | 147 | |
|
145 | ## change this to unique ID for security | |
|
148 | ## Unique application ID. Should be a random unique string for security. | |
|
146 | 149 | app_instance_uuid = rc-production |
|
147 | 150 | |
|
148 |
## |
|
|
151 | ## Cut off limit for large diffs (size in bytes). If overall diff size on | |
|
149 | 152 | ## commit, or pull request exceeds this limit this diff will be displayed |
|
150 | 153 | ## partially. E.g 512000 == 512Kb |
|
151 | 154 | cut_off_limit_diff = 512000 |
|
152 | 155 | |
|
153 |
## |
|
|
156 | ## Cut off limit for large files inside diffs (size in bytes). Each individual | |
|
154 | 157 | ## file inside diff which exceeds this limit will be displayed partially. |
|
155 | 158 | ## E.g 128000 == 128Kb |
|
156 | 159 | cut_off_limit_file = 128000 |
|
157 | 160 | |
|
158 |
## use cache version of |
|
|
161 | ## use cached version of vcs repositories everywhere. Recommended to be `true` | |
|
159 | 162 | vcs_full_cache = true |
|
160 | 163 | |
|
161 |
## |
|
|
164 | ## Force https in RhodeCode, fixes https redirects, assumes it's always https. | |
|
162 | 165 | ## Normally this is controlled by proper http flags sent from http server |
|
163 | 166 | force_https = false |
|
164 | 167 | |
@@ -205,7 +208,7 b' gist_alias_url =' | |||
|
205 | 208 | # GistView:* |
|
206 | 209 | api_access_controllers_whitelist = |
|
207 | 210 | |
|
208 |
## |
|
|
211 | ## Default encoding used to convert from and to unicode | |
|
209 | 212 | ## can be also a comma separated list of encoding in case of mixed encodings |
|
210 | 213 | default_encoding = UTF-8 |
|
211 | 214 | |
@@ -252,8 +255,8 b' allow_repo_location_change = true' | |||
|
252 | 255 | ## allows to setup custom hooks in settings page |
|
253 | 256 | allow_custom_hooks_settings = true |
|
254 | 257 | |
|
255 | ## generated license token, goto license page in RhodeCode settings to obtain | |
|
256 | ## new token | |
|
258 | ## Generated license token required for EE edition license. | |
|
259 | ## New generated token value can be found in Admin > settings > license page. | |
|
257 | 260 | license_token = |
|
258 | 261 | |
|
259 | 262 | ## supervisor connection uri, for managing supervisor and logs. |
@@ -283,65 +286,66 b' celery.max_tasks_per_child = 100' | |||
|
283 | 286 | ## tasks will never be sent to the queue, but executed locally instead. |
|
284 | 287 | celery.task_always_eager = false |
|
285 | 288 | |
|
286 | #################################### | |
|
287 |
### |
|
|
288 | #################################### | |
|
289 |
# |
|
|
290 |
## can boost performance, eg. |
|
|
289 | ##################################### | |
|
290 | ### DOGPILE CACHE #### | |
|
291 | ##################################### | |
|
292 | ## Default cache dir for caches. Putting this into a ramdisk | |
|
293 | ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require | |
|
294 | ## large amount of space | |
|
291 | 295 | cache_dir = %(here)s/data |
|
292 | 296 | |
|
293 | ## locking and default file storage for Beaker. Putting this into a ramdisk | |
|
294 | ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data | |
|
295 | beaker.cache.data_dir = %(here)s/data/cache/beaker_data | |
|
296 | beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock | |
|
297 | ||
|
298 | beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long | |
|
297 | ## `cache_perms` cache settings for permission tree, auth TTL. | |
|
298 | rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace | |
|
299 | rc_cache.cache_perms.expiration_time = 300 | |
|
299 | 300 | |
|
300 | beaker.cache.super_short_term.type = memory | |
|
301 | beaker.cache.super_short_term.expire = 10 | |
|
302 | beaker.cache.super_short_term.key_length = 256 | |
|
301 | ## alternative `cache_perms` redis backend with distributed lock | |
|
302 | #rc_cache.cache_perms.backend = dogpile.cache.rc.redis | |
|
303 | #rc_cache.cache_perms.expiration_time = 300 | |
|
304 | ## redis_expiration_time needs to be greater then expiration_time | |
|
305 | #rc_cache.cache_perms.arguments.redis_expiration_time = 7200 | |
|
306 | #rc_cache.cache_perms.arguments.socket_timeout = 30 | |
|
307 | #rc_cache.cache_perms.arguments.host = localhost | |
|
308 | #rc_cache.cache_perms.arguments.port = 6379 | |
|
309 | #rc_cache.cache_perms.arguments.db = 0 | |
|
310 | #rc_cache.cache_perms.arguments.distributed_lock = true | |
|
303 | 311 | |
|
304 | beaker.cache.short_term.type = memory | |
|
305 | beaker.cache.short_term.expire = 60 | |
|
306 | beaker.cache.short_term.key_length = 256 | |
|
307 | ||
|
308 | beaker.cache.long_term.type = memory | |
|
309 | beaker.cache.long_term.expire = 36000 | |
|
310 | beaker.cache.long_term.key_length = 256 | |
|
312 | ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS | |
|
313 | rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace | |
|
314 | rc_cache.cache_repo.expiration_time = 2592000 | |
|
311 | 315 | |
|
312 | beaker.cache.sql_cache_short.type = memory | |
|
313 | beaker.cache.sql_cache_short.expire = 10 | |
|
314 | beaker.cache.sql_cache_short.key_length = 256 | |
|
316 | ## alternative `cache_repo` redis backend with distributed lock | |
|
317 | #rc_cache.cache_repo.backend = dogpile.cache.rc.redis | |
|
318 | #rc_cache.cache_repo.expiration_time = 2592000 | |
|
319 | ## redis_expiration_time needs to be greater then expiration_time | |
|
320 | #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400 | |
|
321 | #rc_cache.cache_repo.arguments.socket_timeout = 30 | |
|
322 | #rc_cache.cache_repo.arguments.host = localhost | |
|
323 | #rc_cache.cache_repo.arguments.port = 6379 | |
|
324 | #rc_cache.cache_repo.arguments.db = 1 | |
|
325 | #rc_cache.cache_repo.arguments.distributed_lock = true | |
|
315 | 326 | |
|
316 | ## default is memory cache, configure only if required | |
|
317 | ## using multi-node or multi-worker setup | |
|
318 | #beaker.cache.auth_plugins.type = ext:database | |
|
319 | #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock | |
|
320 | #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode | |
|
321 | #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode | |
|
322 | #beaker.cache.auth_plugins.sa.pool_recycle = 3600 | |
|
323 | #beaker.cache.auth_plugins.sa.pool_size = 10 | |
|
324 | #beaker.cache.auth_plugins.sa.max_overflow = 0 | |
|
327 | ## cache settings for SQL queries, this needs to use memory type backend | |
|
328 | rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru | |
|
329 | rc_cache.sql_cache_short.expiration_time = 30 | |
|
325 | 330 | |
|
326 | beaker.cache.repo_cache_long.type = memorylru_base | |
|
327 | beaker.cache.repo_cache_long.max_items = 4096 | |
|
328 | beaker.cache.repo_cache_long.expire = 2592000 | |
|
331 | ## `cache_repo_longterm` cache for repo object instances, this needs to use memory | |
|
332 | ## type backend as the objects kept are not pickle serializable | |
|
333 | rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru | |
|
334 | ## by default we use 96H, this is using invalidation on push anyway | |
|
335 | rc_cache.cache_repo_longterm.expiration_time = 345600 | |
|
336 | ## max items in LRU cache, reduce this number to save memory, and expire last used | |
|
337 | ## cached objects | |
|
338 | rc_cache.cache_repo_longterm.max_size = 10000 | |
|
329 | 339 | |
|
330 | ## default is memorylru_base cache, configure only if required | |
|
331 | ## using multi-node or multi-worker setup | |
|
332 | #beaker.cache.repo_cache_long.type = ext:memcached | |
|
333 | #beaker.cache.repo_cache_long.url = localhost:11211 | |
|
334 | #beaker.cache.repo_cache_long.expire = 1209600 | |
|
335 | #beaker.cache.repo_cache_long.key_length = 256 | |
|
336 | 340 | |
|
337 | 341 | #################################### |
|
338 | 342 | ### BEAKER SESSION #### |
|
339 | 343 | #################################### |
|
340 | 344 | |
|
341 | 345 | ## .session.type is type of storage options for the session, current allowed |
|
342 | ## types are file, ext:memcached, ext:database, and memory (default). | |
|
346 | ## types are file, ext:memcached, ext:redis, ext:database, and memory (default). | |
|
343 | 347 | beaker.session.type = file |
|
344 |
beaker.session.data_dir = %(here)s/data/sessions |
|
|
348 | beaker.session.data_dir = %(here)s/data/sessions | |
|
345 | 349 | |
|
346 | 350 | ## db based session, fast, and allows easy management over logged in users |
|
347 | 351 | #beaker.session.type = ext:database |
@@ -484,6 +488,9 b' set debug = false' | |||
|
484 | 488 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
485 | 489 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
486 | 490 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode |
|
491 | # pymysql is an alternative driver for MySQL, use in case of problems with default one | |
|
492 | #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode | |
|
493 | ||
|
487 | 494 | sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
488 | 495 | |
|
489 | 496 | # see sqlalchemy docs for other advanced settings |
@@ -503,6 +510,9 b' sqlalchemy.db1.convert_unicode = true' | |||
|
503 | 510 | ## which defaults to five. |
|
504 | 511 | #sqlalchemy.db1.max_overflow = 10 |
|
505 | 512 | |
|
513 | ## Connection check ping, used to detect broken database connections | |
|
514 | ## could be enabled to better handle cases if MySQL has gone away errors | |
|
515 | #sqlalchemy.db1.ping_connection = true | |
|
506 | 516 | |
|
507 | 517 | ################## |
|
508 | 518 | ### VCS CONFIG ### |
@@ -517,15 +527,17 b' vcs.server.protocol = http' | |||
|
517 | 527 | |
|
518 | 528 | ## Push/Pull operations protocol, available options are: |
|
519 | 529 | ## `http` - use http-rpc backend (default) |
|
520 | ## | |
|
521 | 530 | vcs.scm_app_implementation = http |
|
522 | 531 | |
|
523 | 532 | ## Push/Pull operations hooks protocol, available options are: |
|
524 | 533 | ## `http` - use http-rpc backend (default) |
|
525 | 534 | vcs.hooks.protocol = http |
|
535 | ## Host on which this instance is listening for hooks. If vcsserver is in other location | |
|
536 | ## this should be adjusted. | |
|
537 | vcs.hooks.host = 127.0.0.1 | |
|
526 | 538 | |
|
527 | 539 | vcs.server.log_level = info |
|
528 |
## Start VCSServer with this instance as a subprocess, useful |
|
|
540 | ## Start VCSServer with this instance as a subprocess, useful for development | |
|
529 | 541 | vcs.start_server = false |
|
530 | 542 | |
|
531 | 543 | ## List of enabled VCS backends, available options are: |
@@ -608,7 +620,7 b' custom.conf = 1' | |||
|
608 | 620 | ### LOGGING CONFIGURATION #### |
|
609 | 621 | ################################ |
|
610 | 622 | [loggers] |
|
611 |
keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper |
|
|
623 | keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper | |
|
612 | 624 | |
|
613 | 625 | [handlers] |
|
614 | 626 | keys = console, console_sql |
@@ -664,6 +676,9 b' level = INFO' | |||
|
664 | 676 | formatter = generic |
|
665 | 677 | |
|
666 | 678 | [handler_console_sql] |
|
679 | # "level = DEBUG" logs SQL queries and results. | |
|
680 | # "level = INFO" logs SQL queries. | |
|
681 | # "level = WARN" logs neither. (Recommended for production systems.) | |
|
667 | 682 | class = StreamHandler |
|
668 | 683 | args = (sys.stderr, ) |
|
669 | 684 | level = WARN |
@@ -685,5 +700,5 b' datefmt = %Y-%m-%d %H:%M:%S' | |||
|
685 | 700 | |
|
686 | 701 | [formatter_color_formatter_sql] |
|
687 | 702 | class = rhodecode.lib.logging_formatter.ColorFormatterSql |
|
688 | format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s | |
|
703 | format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s | |
|
689 | 704 | datefmt = %Y-%m-%d %H:%M:%S |
@@ -1,41 +1,40 b'' | |||
|
1 | 1 | # Nix environment for the community edition |
|
2 | 2 | # |
|
3 |
# This shall be as lean as possible, just producing the |
|
|
3 | # This shall be as lean as possible, just producing the enterprise-ce | |
|
4 | 4 | # derivation. For advanced tweaks to pimp up the development environment we use |
|
5 | 5 | # "shell.nix" so that it does not have to clutter this file. |
|
6 | # | |
|
7 | # Configuration, set values in "~/.nixpkgs/config.nix". | |
|
8 | # example | |
|
9 | # { | |
|
10 | # # Thoughts on how to configure the dev environment | |
|
11 | # rc = { | |
|
12 | # codeInternalUrl = "https://usr:token@internal-code.rhodecode.com"; | |
|
13 | # sources = { | |
|
14 | # rhodecode-vcsserver = "/home/user/work/rhodecode-vcsserver"; | |
|
15 | # rhodecode-enterprise-ce = "/home/user/work/rhodecode-enterprise-ce"; | |
|
16 | # rhodecode-enterprise-ee = "/home/user/work/rhodecode-enterprise-ee"; | |
|
17 | # }; | |
|
18 | # }; | |
|
19 | # } | |
|
6 | 20 | |
|
7 | 21 | args@ |
|
8 | 22 | { pythonPackages ? "python27Packages" |
|
9 | 23 | , pythonExternalOverrides ? self: super: {} |
|
10 |
, doCheck ? |
|
|
24 | , doCheck ? false | |
|
11 | 25 | , ... |
|
12 | 26 | }: |
|
13 | 27 | |
|
14 | 28 | let |
|
15 | ||
|
16 | 29 | # Use nixpkgs from args or import them. We use this indirect approach |
|
17 | 30 | # through args to be able to use the name `pkgs` for our customized packages. |
|
18 | 31 | # Otherwise we will end up with an infinite recursion. |
|
19 |
|
|
|
32 | pkgs = args.pkgs or (import <nixpkgs> { }); | |
|
20 | 33 | |
|
21 | # johbo: Interim bridge which allows us to build with the upcoming | |
|
22 | # nixos.16.09 branch (unstable at the moment of writing this note) and the | |
|
23 | # current stable nixos-16.03. | |
|
24 | backwardsCompatibleFetchgit = { ... }@args: | |
|
25 | let | |
|
26 | origSources = nixpkgs.fetchgit args; | |
|
27 | in | |
|
28 | nixpkgs.lib.overrideDerivation origSources (oldAttrs: { | |
|
29 | NIX_PREFETCH_GIT_CHECKOUT_HOOK = '' | |
|
30 | find $out -name '.git*' -print0 | xargs -0 rm -rf | |
|
31 | ''; | |
|
32 | }); | |
|
33 | ||
|
34 | # Create a customized version of nixpkgs which should be used throughout the | |
|
35 | # rest of this file. | |
|
36 | pkgs = nixpkgs.overridePackages (self: super: { | |
|
37 | fetchgit = backwardsCompatibleFetchgit; | |
|
38 | }); | |
|
34 | # Works with the new python-packages, still can fallback to the old | |
|
35 | # variant. | |
|
36 | basePythonPackagesUnfix = basePythonPackages.__unfix__ or ( | |
|
37 | self: basePythonPackages.override (a: { inherit self; })); | |
|
39 | 38 | |
|
40 | 39 | # Evaluates to the last segment of a file system path. |
|
41 | 40 | basename = path: with pkgs.lib; last (splitString "/" path); |
@@ -46,7 +45,7 b' let' | |||
|
46 | 45 | ext = last (splitString "." path); |
|
47 | 46 | in |
|
48 | 47 | !builtins.elem (basename path) [ |
|
49 | ".git" ".hg" "__pycache__" ".eggs" | |
|
48 | ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev" | |
|
50 | 49 | "bower_components" "node_modules" |
|
51 | 50 | "build" "data" "result" "tmp"] && |
|
52 | 51 | !builtins.elem ext ["egg-info" "pyc"] && |
@@ -54,18 +53,20 b' let' | |||
|
54 | 53 | # it would still be good to restore it since we want to ignore "result-*". |
|
55 | 54 | !hasPrefix "result" path; |
|
56 | 55 | |
|
57 | basePythonPackages = with builtins; if isAttrs pythonPackages | |
|
58 | then pythonPackages | |
|
59 | else getAttr pythonPackages pkgs; | |
|
56 | sources = | |
|
57 | let | |
|
58 | inherit (pkgs.lib) all isString attrValues; | |
|
59 | sourcesConfig = pkgs.config.rc.sources or {}; | |
|
60 | in | |
|
61 | # Ensure that sources are configured as strings. Using a path | |
|
62 | # would result in a copy into the nix store. | |
|
63 | assert all isString (attrValues sourcesConfig); | |
|
64 | sourcesConfig; | |
|
60 | 65 | |
|
61 | buildBowerComponents = | |
|
62 | pkgs.buildBowerComponents or | |
|
63 | (import ./pkgs/backport-16.03-build-bower-components.nix { inherit pkgs; }); | |
|
64 | ||
|
65 | sources = pkgs.config.rc.sources or {}; | |
|
66 | version = builtins.readFile ./rhodecode/VERSION; | |
|
66 | version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION"; | |
|
67 | 67 | rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.; |
|
68 | 68 | |
|
69 | buildBowerComponents = pkgs.buildBowerComponents; | |
|
69 | 70 | nodeEnv = import ./pkgs/node-default.nix { |
|
70 | 71 | inherit pkgs; |
|
71 | 72 | }; |
@@ -77,133 +78,145 b' let' | |||
|
77 | 78 | src = rhodecode-enterprise-ce-src; |
|
78 | 79 | }; |
|
79 | 80 | |
|
80 | pythonGeneratedPackages = self: basePythonPackages.override (a: { | |
|
81 | inherit self; | |
|
82 | }) | |
|
83 | // (scopedImport { | |
|
84 | self = self; | |
|
85 | super = basePythonPackages; | |
|
86 | inherit pkgs; | |
|
87 | inherit (pkgs) fetchurl fetchgit; | |
|
88 | } ./pkgs/python-packages.nix); | |
|
81 | rhodecode-testdata-src = sources.rhodecode-testdata or ( | |
|
82 | pkgs.fetchhg { | |
|
83 | url = "https://code.rhodecode.com/upstream/rc_testdata"; | |
|
84 | rev = "v0.10.0"; | |
|
85 | sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0"; | |
|
86 | }); | |
|
89 | 87 | |
|
90 | pythonOverrides = import ./pkgs/python-packages-overrides.nix { | |
|
91 |
|
|
|
92 | basePythonPackages | |
|
93 |
|
|
|
88 | rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" { | |
|
89 | inherit | |
|
90 | doCheck | |
|
91 | pkgs | |
|
92 | pythonPackages; | |
|
94 | 93 | }; |
|
95 | 94 | |
|
96 | 95 | pythonLocalOverrides = self: super: { |
|
97 | 96 | rhodecode-enterprise-ce = |
|
98 | 97 | let |
|
99 | 98 | linkNodeAndBowerPackages = '' |
|
100 | echo "Export RhodeCode CE path" | |
|
101 | 99 | export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src} |
|
102 | echo "Link node packages" | |
|
100 | ||
|
101 | echo "[BEGIN]: Link node packages" | |
|
103 | 102 | rm -fr node_modules |
|
104 | 103 | mkdir node_modules |
|
105 | 104 | # johbo: Linking individual packages allows us to run "npm install" |
|
106 | 105 | # inside of a shell to try things out. Re-entering the shell will |
|
107 | 106 | # restore a clean environment. |
|
108 | 107 | ln -s ${nodeDependencies}/lib/node_modules/* node_modules/ |
|
108 | echo "[DONE]: Link node packages" | |
|
109 | 109 | |
|
110 |
echo " |
|
|
111 | ||
|
112 | echo "Link bower packages" | |
|
110 | echo "[BEGIN]: Link bower packages" | |
|
113 | 111 | rm -fr bower_components |
|
114 | 112 | mkdir bower_components |
|
113 | ln -s ${bowerComponents}/bower_components/* bower_components/ | |
|
114 | echo "[DONE]: Link bower packages" | |
|
115 | ''; | |
|
115 | 116 | |
|
116 | ln -s ${bowerComponents}/bower_components/* bower_components/ | |
|
117 | echo "DONE: Link bower packages" | |
|
118 | ''; | |
|
117 | releaseName = "RhodeCodeEnterpriseCE-${version}"; | |
|
119 | 118 | in super.rhodecode-enterprise-ce.override (attrs: { |
|
120 | ||
|
121 | 119 | inherit |
|
122 | 120 | doCheck |
|
123 | 121 | version; |
|
122 | ||
|
124 | 123 | name = "rhodecode-enterprise-ce-${version}"; |
|
125 | releaseName = "RhodeCodeEnterpriseCE-${version}"; | |
|
124 | releaseName = releaseName; | |
|
126 | 125 | src = rhodecode-enterprise-ce-src; |
|
127 | 126 | dontStrip = true; # prevent strip, we don't need it. |
|
128 | 127 | |
|
129 | buildInputs = | |
|
130 | attrs.buildInputs ++ | |
|
131 | (with self; [ | |
|
132 | pkgs.nodePackages.bower | |
|
133 | pkgs.nodePackages.grunt-cli | |
|
134 | pkgs.subversion | |
|
135 | pytest-catchlog | |
|
136 | rhodecode-testdata | |
|
137 | ]); | |
|
138 | ||
|
139 | #TODO: either move this into overrides, OR use the new machanics from | |
|
140 | # pip2nix and requiremtn.txt file | |
|
141 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ (with self; [ | |
|
142 | rhodecode-tools | |
|
143 | ]); | |
|
144 | ||
|
145 | # TODO: johbo: Make a nicer way to expose the parts. Maybe | |
|
146 | # pkgs/default.nix? | |
|
128 | # expose following attributed outside | |
|
147 | 129 | passthru = { |
|
148 | 130 | inherit |
|
131 | rhodecode-testdata | |
|
149 | 132 | bowerComponents |
|
150 | 133 | linkNodeAndBowerPackages |
|
151 | 134 | myPythonPackagesUnfix |
|
152 |
pythonLocalOverrides |
|
|
135 | pythonLocalOverrides | |
|
136 | pythonCommunityOverrides; | |
|
137 | ||
|
153 | 138 | pythonPackages = self; |
|
154 | 139 | }; |
|
155 | 140 | |
|
141 | buildInputs = | |
|
142 | attrs.buildInputs or [] ++ [ | |
|
143 | rhodecode-testdata | |
|
144 | pkgs.nodePackages.bower | |
|
145 | pkgs.nodePackages.grunt-cli | |
|
146 | ]; | |
|
147 | ||
|
148 | #NOTE: option to inject additional propagatedBuildInputs | |
|
149 | propagatedBuildInputs = | |
|
150 | attrs.propagatedBuildInputs or [] ++ [ | |
|
151 | ||
|
152 | ]; | |
|
153 | ||
|
156 | 154 | LC_ALL = "en_US.UTF-8"; |
|
157 | 155 | LOCALE_ARCHIVE = |
|
158 |
if pkgs.stdenv |
|
|
156 | if pkgs.stdenv.isLinux | |
|
159 | 157 | then "${pkgs.glibcLocales}/lib/locale/locale-archive" |
|
160 | 158 | else ""; |
|
161 | 159 | |
|
160 | # Add bin directory to path so that tests can find 'rhodecode'. | |
|
162 | 161 | preCheck = '' |
|
163 | 162 | export PATH="$out/bin:$PATH" |
|
164 | 163 | ''; |
|
165 | 164 | |
|
165 | # custom check phase for testing | |
|
166 | checkPhase = '' | |
|
167 | runHook preCheck | |
|
168 | PYTHONHASHSEED=random py.test -vv -p no:sugar -r xw --cov-config=.coveragerc --cov=rhodecode --cov-report=term-missing rhodecode | |
|
169 | runHook postCheck | |
|
170 | ''; | |
|
171 | ||
|
166 | 172 | postCheck = '' |
|
167 | rm -rf $out/lib/${self.python.libPrefix}/site-packages/pytest_pylons | |
|
173 | echo "Cleanup of rhodecode/tests" | |
|
168 | 174 | rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests |
|
169 | 175 | ''; |
|
170 | 176 | |
|
171 | preBuild = linkNodeAndBowerPackages + '' | |
|
177 | preBuild = '' | |
|
178 | ||
|
179 | echo "Building frontend assets" | |
|
180 | ${linkNodeAndBowerPackages} | |
|
172 | 181 | grunt |
|
173 | 182 | rm -fr node_modules |
|
174 | 183 | ''; |
|
175 | 184 | |
|
176 | 185 | postInstall = '' |
|
177 | echo "Writing meta information for rccontrol to nix-support/rccontrol" | |
|
186 | echo "Writing enterprise-ce meta information for rccontrol to nix-support/rccontrol" | |
|
178 | 187 | mkdir -p $out/nix-support/rccontrol |
|
179 | 188 | cp -v rhodecode/VERSION $out/nix-support/rccontrol/version |
|
180 |
echo " |
|
|
189 | echo "[DONE]: enterprise-ce meta information for rccontrol written" | |
|
190 | ||
|
191 | mkdir -p $out/etc | |
|
192 | cp configs/production.ini $out/etc | |
|
193 | echo "[DONE]: saved enterprise-ce production.ini into $out/etc" | |
|
181 | 194 | |
|
182 | 195 | # python based programs need to be wrapped |
|
196 | mkdir -p $out/bin | |
|
197 | # rhodecode-tools | |
|
198 | ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/ | |
|
199 | ||
|
200 | # required binaries from dependencies | |
|
201 | #ln -s ${self.python}/bin/python $out/bin | |
|
183 | 202 | ln -s ${self.pyramid}/bin/* $out/bin/ |
|
184 | 203 | ln -s ${self.gunicorn}/bin/gunicorn $out/bin/ |
|
185 | 204 | ln -s ${self.supervisor}/bin/supervisor* $out/bin/ |
|
186 |
ln -s ${self. |
|
|
205 | ln -s ${self.pastescript}/bin/paster $out/bin/ | |
|
187 | 206 | ln -s ${self.channelstream}/bin/channelstream $out/bin/ |
|
188 | 207 | ln -s ${self.celery}/bin/celery $out/bin/ |
|
208 | echo "[DONE]: created symlinks into $out/bin" | |
|
189 | 209 | |
|
190 | # rhodecode-tools | |
|
191 | ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/ | |
|
192 | ||
|
193 | # note that condition should be restricted when adding further tools | |
|
194 | 210 | for file in $out/bin/*; |
|
195 | 211 | do |
|
196 | 212 | wrapProgram $file \ |
|
197 |
|
|
|
198 |
|
|
|
199 |
|
|
|
213 | --prefix PATH : $PATH \ | |
|
214 | --prefix PYTHONPATH : $PYTHONPATH \ | |
|
215 | --set PYTHONHASHSEED random | |
|
200 | 216 | done |
|
201 | 217 | |
|
202 | mkdir $out/etc | |
|
203 | cp configs/production.ini $out/etc | |
|
218 | echo "[DONE]: enterprise-ce binary wrapping" | |
|
204 | 219 | |
|
205 | ||
|
206 | # TODO: johbo: Make part of ac-tests | |
|
207 | 220 | if [ ! -f rhodecode/public/js/scripts.js ]; then |
|
208 | 221 | echo "Missing scripts.js" |
|
209 | 222 | exit 1 |
@@ -213,31 +226,33 b' let' | |||
|
213 | 226 | exit 1 |
|
214 | 227 | fi |
|
215 | 228 | ''; |
|
216 | ||
|
217 | 229 | }); |
|
218 | 230 | |
|
219 | rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" { | |
|
220 | inherit | |
|
221 | doCheck | |
|
222 | pkgs | |
|
223 | pythonPackages; | |
|
224 | }; | |
|
225 | ||
|
226 | 231 | }; |
|
227 | 232 | |
|
228 | rhodecode-testdata-src = sources.rhodecode-testdata or ( | |
|
229 | pkgs.fetchhg { | |
|
230 | url = "https://code.rhodecode.com/upstream/rc_testdata"; | |
|
231 | rev = "v0.10.0"; | |
|
232 | sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0"; | |
|
233 | }); | |
|
233 | basePythonPackages = with builtins; | |
|
234 | if isAttrs pythonPackages then | |
|
235 | pythonPackages | |
|
236 | else | |
|
237 | getAttr pythonPackages pkgs; | |
|
238 | ||
|
239 | pythonGeneratedPackages = import ./pkgs/python-packages.nix { | |
|
240 | inherit pkgs; | |
|
241 | inherit (pkgs) fetchurl fetchgit fetchhg; | |
|
242 | }; | |
|
243 | ||
|
244 | pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix { | |
|
245 | inherit pkgs basePythonPackages; | |
|
246 | }; | |
|
234 | 247 | |
|
235 | 248 | # Apply all overrides and fix the final package set |
|
236 | 249 | myPythonPackagesUnfix = with pkgs.lib; |
|
237 | 250 | (extends pythonExternalOverrides |
|
238 | 251 | (extends pythonLocalOverrides |
|
239 | (extends pythonOverrides | |
|
240 |
|
|
|
252 | (extends pythonCommunityOverrides | |
|
253 | (extends pythonGeneratedPackages | |
|
254 | basePythonPackagesUnfix)))); | |
|
255 | ||
|
241 | 256 | myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix); |
|
242 | 257 | |
|
243 | 258 | in myPythonPackages.rhodecode-enterprise-ce |
@@ -1,4 +1,9 b'' | |||
|
1 | # generating packages | |
|
2 | nix-shell pkgs/shell-generate.nix | |
|
3 | cd docs | |
|
4 | pip2nix generate | |
|
5 | ||
|
1 | 6 | # building the docs |
|
2 | 7 | cd docs |
|
3 | 8 | nix-build default.nix -o result |
|
4 | make clean html No newline at end of file | |
|
9 | make clean html |
@@ -88,17 +88,21 b' want to index:' | |||
|
88 | 88 | (venv)$ rhodecode-index --instance-name=enterprise-1 |
|
89 | 89 | |
|
90 | 90 | # Using default installation |
|
91 |
$ /home/user/.rccontrol/enterprise- |
|
|
92 |
--instance-name=enterprise- |
|
|
91 | $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \ | |
|
92 | --instance-name=enterprise-1 | |
|
93 | 93 | |
|
94 | 94 | # Using a custom mapping file |
|
95 |
$ /home/user/.rccontrol/enterprise- |
|
|
96 |
--instance-name=enterprise- |
|
|
97 |
--mapping=/home/user/.rccontrol/enterprise- |
|
|
95 | $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \ | |
|
96 | --instance-name=enterprise-1 \ | |
|
97 | --mapping=/home/user/.rccontrol/enterprise-1/mapping.ini | |
|
98 | 98 | |
|
99 | 99 | .. note:: |
|
100 | 100 | |
|
101 | |RCT| require |PY| 2.7 to run. | |
|
101 | In case of often indexing the index may become fragmented. Most often a result of that | |
|
102 | is error about `too many open files`. To fix this indexer needs to be executed with | |
|
103 | --optimize flag. E.g `rhodecode-index --instance-name=enterprise-1 --optimize` | |
|
104 | This should be executed regularly, once a week is recommended. | |
|
105 | ||
|
102 | 106 | |
|
103 | 107 | .. _set-index: |
|
104 | 108 |
@@ -12,7 +12,7 b' if there are lots of session files.' | |||
|
12 | 12 | |
|
13 | 13 | Therefore, in a large scale deployment, to give better performance, |
|
14 | 14 | scalability, and maintainability we recommend switching from file-based |
|
15 |
sessions to database-based user sessions or |
|
|
15 | sessions to database-based user sessions or Redis based sessions. | |
|
16 | 16 | |
|
17 | 17 | To switch to database-based user sessions uncomment the following section in |
|
18 | 18 | your :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. |
@@ -41,14 +41,20 b' and make sure you comment out the file b' | |||
|
41 | 41 | #beaker.session.data_dir = %(here)s/data/sessions/data |
|
42 | 42 | |
|
43 | 43 | |
|
44 | To switch to memcached-based user sessions uncomment the following section in | |
|
44 | The `table_name` will be automatically created on specified database if it isn't yet existing. | |
|
45 | Database specified in the `beaker.session.sa.url` can be the same that RhodeCode | |
|
46 | uses, or if required it can be a different one. We recommend to use the same database. | |
|
47 | ||
|
48 | ||
|
49 | ||
|
50 | To switch to reds-based user sessions uncomment the following section in | |
|
45 | 51 | your :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. |
|
46 | 52 | |
|
47 | 53 | .. code-block:: ini |
|
48 | 54 | |
|
49 |
## |
|
|
50 |
beaker.session.type = ext: |
|
|
51 |
beaker.session.url = localhost: |
|
|
55 | ## redis sessions | |
|
56 | beaker.session.type = ext:redis | |
|
57 | beaker.session.url = localhost:6379 | |
|
52 | 58 | |
|
53 | 59 | |
|
54 | 60 | and make sure you comment out the file based sessions. |
@@ -83,7 +83,7 b' comment_pull_request' | |||
|
83 | 83 | create_pull_request |
|
84 | 84 | ------------------- |
|
85 | 85 | |
|
86 | .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, title, description=<Optional:''>, reviewers=<Optional:None>) | |
|
86 | .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>) | |
|
87 | 87 | |
|
88 | 88 | Creates a new pull request. |
|
89 | 89 | |
@@ -104,10 +104,14 b' create_pull_request' | |||
|
104 | 104 | :type source_ref: str |
|
105 | 105 | :param target_ref: Set the target ref name. |
|
106 | 106 | :type target_ref: str |
|
107 |
:param title: Set the pull request title |
|
|
107 | :param title: Optionally Set the pull request title, it's generated otherwise | |
|
108 | 108 | :type title: str |
|
109 | 109 | :param description: Set the pull request description. |
|
110 | 110 | :type description: Optional(str) |
|
111 | :type description_renderer: Optional(str) | |
|
112 | :param description_renderer: Set pull request renderer for the description. | |
|
113 | It should be 'rst', 'markdown' or 'plain'. If not give default | |
|
114 | system renderer will be used | |
|
111 | 115 | :param reviewers: Set the new pull request reviewers list. |
|
112 | 116 | Reviewer defined by review rules will be added automatically to the |
|
113 | 117 | defined list. |
@@ -368,7 +372,7 b' merge_pull_request' | |||
|
368 | 372 | update_pull_request |
|
369 | 373 | ------------------- |
|
370 | 374 | |
|
371 | .. py:function:: update_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, title=<Optional:''>, description=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>) | |
|
375 | .. py:function:: update_pull_request(apiuser, pullrequestid, repoid=<Optional:None>, title=<Optional:''>, description=<Optional:''>, description_renderer=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>) | |
|
372 | 376 | |
|
373 | 377 | Updates a pull request. |
|
374 | 378 | |
@@ -382,6 +386,9 b' update_pull_request' | |||
|
382 | 386 | :type title: str |
|
383 | 387 | :param description: Update pull request description. |
|
384 | 388 | :type description: Optional(str) |
|
389 | :type description_renderer: Optional(str) | |
|
390 | :param description_renderer: Update pull request renderer for the description. | |
|
391 | It should be 'rst', 'markdown' or 'plain' | |
|
385 | 392 | :param reviewers: Update pull request reviewers list with new value. |
|
386 | 393 | :type reviewers: Optional(list) |
|
387 | 394 | Accepts username strings or objects of the format: |
@@ -32,6 +32,7 b' import common' | |||
|
32 | 32 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom |
|
33 | 33 | # ones. |
|
34 | 34 | extensions = [ |
|
35 | 'sphinx.ext.autodoc', | |
|
35 | 36 | 'sphinx.ext.intersphinx', |
|
36 | 37 | 'sphinx.ext.todo', |
|
37 | 38 | 'sphinx.ext.imgmath' |
@@ -42,13 +43,6 b' intersphinx_mapping = {' | |||
|
42 | 43 | 'control': ('https://docs.rhodecode.com/RhodeCode-Control/', None), |
|
43 | 44 | } |
|
44 | 45 | |
|
45 | if tags.has('dev'): | |
|
46 | intersphinx_mapping.update({ | |
|
47 | 'enterprise': ('https://ci.rhodecode.com/documentation/Momentum/', None), | |
|
48 | 'control': ('https://ci.rhodecode.com/documentation/Control/', None), | |
|
49 | }) | |
|
50 | ||
|
51 | ||
|
52 | 46 | # Add any paths that contain templates here, relative to this directory. |
|
53 | 47 | templates_path = ['_templates'] |
|
54 | 48 | |
@@ -65,11 +59,12 b" master_doc = 'index'" | |||
|
65 | 59 | # |version| and |release|, also used in various other places throughout the |
|
66 | 60 | # built documents. |
|
67 | 61 | |
|
68 | # TODO: johbo: Move into common package for documentation utilities | |
|
62 | ||
|
69 | 63 | def _get_version(): |
|
70 | 64 | with open('../rhodecode/VERSION') as f: |
|
71 | 65 | return f.read().strip() |
|
72 | 66 | |
|
67 | ||
|
73 | 68 | # The full version, including alpha/beta/rc tags. |
|
74 | 69 | release = _get_version() |
|
75 | 70 | # The short X.Y version. |
@@ -47,7 +47,7 b' Switch nix to the latest STABLE channel' | |||
|
47 | 47 | |
|
48 | 48 | run:: |
|
49 | 49 | |
|
50 |
nix-channel --add https://nixos.org/channels/nixos-1 |
|
|
50 | nix-channel --add https://nixos.org/channels/nixos-18.03 nixpkgs | |
|
51 | 51 | |
|
52 | 52 | Followed by:: |
|
53 | 53 |
@@ -5,249 +5,215 b' let' | |||
|
5 | 5 | |
|
6 | 6 | pkgs = import <nixpkgs> { inherit system; }; |
|
7 | 7 | |
|
8 |
inherit (pkgs) fetchurl |
|
|
8 | inherit (pkgs) fetchurl; | |
|
9 | 9 | |
|
10 | 10 | buildPythonPackage = pkgs.python27Packages.buildPythonPackage; |
|
11 | 11 | python = pkgs.python27Packages.python; |
|
12 | 12 | |
|
13 | Jinja2 = buildPythonPackage rec { | |
|
14 | name = "Jinja2-2.9.6"; | |
|
15 | buildInputs = []; | |
|
13 | ||
|
14 | alabaster = buildPythonPackage { | |
|
15 | name = "alabaster-0.7.11"; | |
|
16 | doCheck = false; | |
|
17 | src = fetchurl { | |
|
18 | url = "https://files.pythonhosted.org/packages/3f/46/9346ea429931d80244ab7f11c4fce83671df0b7ae5a60247a2b588592c46/alabaster-0.7.11.tar.gz"; | |
|
19 | sha256 = "1mvm69xsn5xf1jc45kdq1mn0yq0pfn54mv2jcww4s1vwqx6iyfxn"; | |
|
20 | }; | |
|
21 | }; | |
|
22 | babel = buildPythonPackage { | |
|
23 | name = "babel-2.6.0"; | |
|
16 | 24 | doCheck = false; |
|
17 |
propagatedBuildInputs = [ |
|
|
25 | propagatedBuildInputs = [ | |
|
26 | pytz | |
|
27 | ]; | |
|
28 | src = fetchurl { | |
|
29 | url = "https://files.pythonhosted.org/packages/be/cc/9c981b249a455fa0c76338966325fc70b7265521bad641bf2932f77712f4/Babel-2.6.0.tar.gz"; | |
|
30 | sha256 = "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"; | |
|
31 | }; | |
|
32 | }; | |
|
33 | certifi = buildPythonPackage { | |
|
34 | name = "certifi-2018.8.24"; | |
|
35 | doCheck = false; | |
|
18 | 36 | src = fetchurl { |
|
19 | url = "https://pypi.python.org/packages/90/61/f820ff0076a2599dd39406dcb858ecb239438c02ce706c8e91131ab9c7f1/Jinja2-2.9.6.tar.gz"; | |
|
20 | md5 = "6411537324b4dba0956aaa8109f3c77b"; | |
|
37 | url = "https://files.pythonhosted.org/packages/e1/0f/f8d5e939184547b3bdc6128551b831a62832713aa98c2ccdf8c47ecc7f17/certifi-2018.8.24.tar.gz"; | |
|
38 | sha256 = "0f0nhrj9mlrf79iway4578wrsgmjh0fmacl9zv8zjckdy7b90rip"; | |
|
39 | }; | |
|
40 | }; | |
|
41 | chardet = buildPythonPackage { | |
|
42 | name = "chardet-3.0.4"; | |
|
43 | doCheck = false; | |
|
44 | src = fetchurl { | |
|
45 | url = "https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz"; | |
|
46 | sha256 = "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"; | |
|
47 | }; | |
|
48 | }; | |
|
49 | docutils = buildPythonPackage { | |
|
50 | name = "docutils-0.14"; | |
|
51 | doCheck = false; | |
|
52 | src = fetchurl { | |
|
53 | url = "https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz"; | |
|
54 | sha256 = "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"; | |
|
21 | 55 | }; |
|
22 | 56 | }; |
|
23 | ||
|
24 | MarkupSafe = buildPythonPackage rec { | |
|
25 | name = "MarkupSafe-1.0"; | |
|
26 | buildInputs = []; | |
|
57 | idna = buildPythonPackage { | |
|
58 | name = "idna-2.7"; | |
|
59 | doCheck = false; | |
|
60 | src = fetchurl { | |
|
61 | url = "https://files.pythonhosted.org/packages/65/c4/80f97e9c9628f3cac9b98bfca0402ede54e0563b56482e3e6e45c43c4935/idna-2.7.tar.gz"; | |
|
62 | sha256 = "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"; | |
|
63 | }; | |
|
64 | }; | |
|
65 | imagesize = buildPythonPackage { | |
|
66 | name = "imagesize-1.1.0"; | |
|
27 | 67 | doCheck = false; |
|
28 | propagatedBuildInputs = []; | |
|
29 | 68 | src = fetchurl { |
|
30 | url = "https://pypi.python.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz"; | |
|
31 | md5 = "2fcedc9284d50e577b5192e8e3578355"; | |
|
69 | url = "https://files.pythonhosted.org/packages/41/f5/3cf63735d54aa9974e544aa25858d8f9670ac5b4da51020bbfc6aaade741/imagesize-1.1.0.tar.gz"; | |
|
70 | sha256 = "1dg3wn7qpwmhgqc0r9na2ding1wif9q5spz3j9zn2riwphc2k0zk"; | |
|
71 | }; | |
|
72 | }; | |
|
73 | jinja2 = buildPythonPackage { | |
|
74 | name = "jinja2-2.9.6"; | |
|
75 | doCheck = false; | |
|
76 | propagatedBuildInputs = [ | |
|
77 | markupsafe | |
|
78 | ]; | |
|
79 | src = fetchurl { | |
|
80 | url = "https://files.pythonhosted.org/packages/90/61/f820ff0076a2599dd39406dcb858ecb239438c02ce706c8e91131ab9c7f1/Jinja2-2.9.6.tar.gz"; | |
|
81 | sha256 = "1zzrkywhziqffrzks14kzixz7nd4yh2vc0fb04a68vfd2ai03anx"; | |
|
32 | 82 | }; |
|
33 | 83 | }; |
|
34 | ||
|
35 | Pygments = buildPythonPackage { | |
|
36 | name = "Pygments-2.2.0"; | |
|
37 | buildInputs = []; | |
|
84 | markupsafe = buildPythonPackage { | |
|
85 | name = "markupsafe-1.0"; | |
|
86 | doCheck = false; | |
|
87 | src = fetchurl { | |
|
88 | url = "https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz"; | |
|
89 | sha256 = "0rdn1s8x9ni7ss8rfiacj7x1085lx8mh2zdwqslnw8xc3l4nkgm6"; | |
|
90 | }; | |
|
91 | }; | |
|
92 | packaging = buildPythonPackage { | |
|
93 | name = "packaging-17.1"; | |
|
38 | 94 | doCheck = false; |
|
39 |
propagatedBuildInputs = [ |
|
|
95 | propagatedBuildInputs = [ | |
|
96 | pyparsing | |
|
97 | six | |
|
98 | ]; | |
|
40 | 99 | src = fetchurl { |
|
41 | url = "https://pypi.python.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz"; | |
|
42 | md5 = "13037baca42f16917cbd5ad2fab50844"; | |
|
100 | url = "https://files.pythonhosted.org/packages/77/32/439f47be99809c12ef2da8b60a2c47987786d2c6c9205549dd6ef95df8bd/packaging-17.1.tar.gz"; | |
|
101 | sha256 = "0nrpayk8kij1zm9sjnk38ldz3a6705ggvw8ljylqbrb4vmqbf6gh"; | |
|
102 | }; | |
|
103 | }; | |
|
104 | pygments = buildPythonPackage { | |
|
105 | name = "pygments-2.2.0"; | |
|
106 | doCheck = false; | |
|
107 | src = fetchurl { | |
|
108 | url = "https://files.pythonhosted.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz"; | |
|
109 | sha256 = "1k78qdvir1yb1c634nkv6rbga8wv4289xarghmsbbvzhvr311bnv"; | |
|
43 | 110 | }; |
|
44 | 111 | }; |
|
45 | ||
|
46 | Sphinx = buildPythonPackage (rec { | |
|
47 | name = "Sphinx-1.6.5"; | |
|
112 | pyparsing = buildPythonPackage { | |
|
113 | name = "pyparsing-2.2.0"; | |
|
114 | doCheck = false; | |
|
48 | 115 | src = fetchurl { |
|
49 | url = "https://pypi.python.org/packages/8b/7e/b188d9a3b9c938e736e02a74c1363c2888e095d770df2c72b4c312f9fdcb/Sphinx-1.6.5.tar.gz"; | |
|
50 | md5 = "cd73118c21ec610432e63e6421ec54f1"; | |
|
116 | url = "https://files.pythonhosted.org/packages/3c/ec/a94f8cf7274ea60b5413df054f82a8980523efd712ec55a59e7c3357cf7c/pyparsing-2.2.0.tar.gz"; | |
|
117 | sha256 = "016b9gh606aa44sq92jslm89bg874ia0yyiyb643fa6dgbsbqch8"; | |
|
51 | 118 | }; |
|
119 | }; | |
|
120 | pytz = buildPythonPackage { | |
|
121 | name = "pytz-2018.4"; | |
|
122 | doCheck = false; | |
|
123 | src = fetchurl { | |
|
124 | url = "https://files.pythonhosted.org/packages/10/76/52efda4ef98e7544321fd8d5d512e11739c1df18b0649551aeccfb1c8376/pytz-2018.4.tar.gz"; | |
|
125 | sha256 = "0jgpqx3kk2rhv81j1izjxvmx8d0x7hzs1857pgqnixic5wq2ar60"; | |
|
126 | }; | |
|
127 | }; | |
|
128 | requests = buildPythonPackage { | |
|
129 | name = "requests-2.19.1"; | |
|
130 | doCheck = false; | |
|
52 | 131 | propagatedBuildInputs = [ |
|
53 | six | |
|
54 |
|
|
|
55 | Pygments | |
|
56 |
|
|
|
57 | snowballstemmer | |
|
58 | babel | |
|
59 | alabaster | |
|
60 | imagesize | |
|
61 | requests | |
|
62 | setuptools | |
|
63 | sphinxcontrib-websupport | |
|
64 | typing | |
|
65 | ||
|
66 | # special cases | |
|
67 | pytz | |
|
68 | sphinx_rtd_theme | |
|
69 | ||
|
132 | chardet | |
|
133 | idna | |
|
134 | urllib3 | |
|
135 | certifi | |
|
70 | 136 | ]; |
|
71 | }); | |
|
72 | ||
|
73 | alabaster = buildPythonPackage rec { | |
|
74 | name = "alabaster-0.7.10"; | |
|
75 | buildInputs = []; | |
|
137 | src = fetchurl { | |
|
138 | url = "https://files.pythonhosted.org/packages/54/1f/782a5734931ddf2e1494e4cd615a51ff98e1879cbe9eecbdfeaf09aa75e9/requests-2.19.1.tar.gz"; | |
|
139 | sha256 = "0snf8xxdzsgh1x2zv3vilvbrv9jbpmnfagzzb1rjmmvflckdh8pc"; | |
|
140 | }; | |
|
141 | }; | |
|
142 | six = buildPythonPackage { | |
|
143 | name = "six-1.11.0"; | |
|
76 | 144 | doCheck = false; |
|
77 | propagatedBuildInputs = []; | |
|
78 | 145 | src = fetchurl { |
|
79 | url = "https://pypi.python.org/packages/d0/a5/e3a9ad3ee86aceeff71908ae562580643b955ea1b1d4f08ed6f7e8396bd7/alabaster-0.7.10.tar.gz"; | |
|
80 | md5 = "7934dccf38801faa105f6e7b4784f493"; | |
|
146 | url = "https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz"; | |
|
147 | sha256 = "1scqzwc51c875z23phj48gircqjgnn3af8zy2izjwmnlxrxsgs3h"; | |
|
148 | }; | |
|
149 | }; | |
|
150 | snowballstemmer = buildPythonPackage { | |
|
151 | name = "snowballstemmer-1.2.1"; | |
|
152 | doCheck = false; | |
|
153 | src = fetchurl { | |
|
154 | url = "https://files.pythonhosted.org/packages/20/6b/d2a7cb176d4d664d94a6debf52cd8dbae1f7203c8e42426daa077051d59c/snowballstemmer-1.2.1.tar.gz"; | |
|
155 | sha256 = "0a0idq4y5frv7qsg2x62jd7rd272749xk4x99misf5rcifk2d7wi"; | |
|
81 | 156 | }; |
|
82 | 157 | }; |
|
83 | ||
|
84 | babel = buildPythonPackage { | |
|
85 | name = "babel-2.5.1"; | |
|
86 | buildInputs = []; | |
|
158 | sphinx = buildPythonPackage { | |
|
159 | name = "sphinx-1.7.8"; | |
|
87 | 160 | doCheck = false; |
|
88 |
propagatedBuildInputs = [ |
|
|
161 | propagatedBuildInputs = [ | |
|
162 | six | |
|
163 | jinja2 | |
|
164 | pygments | |
|
165 | docutils | |
|
166 | snowballstemmer | |
|
167 | babel | |
|
168 | alabaster | |
|
169 | imagesize | |
|
170 | requests | |
|
171 | setuptools | |
|
172 | packaging | |
|
173 | sphinxcontrib-websupport | |
|
174 | typing | |
|
175 | ]; | |
|
89 | 176 | src = fetchurl { |
|
90 | url = "https://pypi.python.org/packages/5a/22/63f1dbb8514bb7e0d0c8a85cc9b14506599a075e231985f98afd70430e1f/Babel-2.5.1.tar.gz"; | |
|
91 | md5 = "60228b3ce93a203357158b909afe8ae1"; | |
|
177 | url = "https://files.pythonhosted.org/packages/ac/54/4ef326d0c654da1ed91341a7a1f43efc18a8c770ddd2b8e45df97cb79d82/Sphinx-1.7.8.tar.gz"; | |
|
178 | sha256 = "1ryz0w4c31930f1br2sjwrxwx9cmsy7cqdb0d81g98n9bj250w50"; | |
|
92 | 179 | }; |
|
93 | 180 | }; |
|
94 | ||
|
95 | certifi = buildPythonPackage { | |
|
96 | name = "certifi-2017.11.5"; | |
|
97 | buildInputs = []; | |
|
181 | sphinx-rtd-theme = buildPythonPackage { | |
|
182 | name = "sphinx-rtd-theme-0.4.1"; | |
|
98 | 183 | doCheck = false; |
|
99 |
propagatedBuildInputs = [ |
|
|
184 | propagatedBuildInputs = [ | |
|
185 | sphinx | |
|
186 | ]; | |
|
100 | 187 | src = fetchurl { |
|
101 | url = "https://pypi.python.org/packages/23/3f/8be01c50ed24a4bd6b8da799839066ce0288f66f5e11f0367323467f0cbc/certifi-2017.11.5.tar.gz"; | |
|
102 | md5 = "c15ac46ed1fe4b607ff3405928f9a992"; | |
|
188 | url = "https://files.pythonhosted.org/packages/f2/b0/a1933d792b806118ddbca6699f2e2c844d9b1b16e84a89d7effd5cd2a800/sphinx_rtd_theme-0.4.1.tar.gz"; | |
|
189 | sha256 = "1xkyqam8dzbjaymdyvkiif85m4y3jf8crdiwlgcfp8gqcj57aj9v"; | |
|
103 | 190 | }; |
|
104 | 191 | }; |
|
105 | ||
|
106 | chardet = buildPythonPackage { | |
|
107 | name = "chardet-3.0.4"; | |
|
108 | buildInputs = []; | |
|
192 | sphinxcontrib-websupport = buildPythonPackage { | |
|
193 | name = "sphinxcontrib-websupport-1.1.0"; | |
|
109 | 194 | doCheck = false; |
|
110 | propagatedBuildInputs = []; | |
|
111 | 195 | src = fetchurl { |
|
112 | url = "https://pypi.python.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz"; | |
|
113 | md5 = "7dd1ba7f9c77e32351b0a0cfacf4055c"; | |
|
196 | url = "https://files.pythonhosted.org/packages/07/7a/e74b06dce85555ffee33e1d6b7381314169ebf7e31b62c18fcb2815626b7/sphinxcontrib-websupport-1.1.0.tar.gz"; | |
|
197 | sha256 = "1ff3ix76xi1y6m99qxhaq5161ix9swwzydilvdya07mgbcvpzr4x"; | |
|
114 | 198 | }; |
|
115 | 199 | }; |
|
116 | ||
|
117 | docutils = buildPythonPackage { | |
|
118 | name = "docutils-0.14"; | |
|
119 | buildInputs = []; | |
|
200 | typing = buildPythonPackage { | |
|
201 | name = "typing-3.6.6"; | |
|
120 | 202 | doCheck = false; |
|
121 | propagatedBuildInputs = []; | |
|
122 | 203 | src = fetchurl { |
|
123 | url = "https://pypi.python.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz"; | |
|
124 | md5 = "c53768d63db3873b7d452833553469de"; | |
|
204 | url = "https://files.pythonhosted.org/packages/bf/9b/2bf84e841575b633d8d91ad923e198a415e3901f228715524689495b4317/typing-3.6.6.tar.gz"; | |
|
205 | sha256 = "0ba9acs4awx15bf9v3nrs781msbd2nx826906nj6fqks2bvca9s0"; | |
|
206 | }; | |
|
207 | }; | |
|
208 | urllib3 = buildPythonPackage { | |
|
209 | name = "urllib3-1.23"; | |
|
210 | doCheck = false; | |
|
211 | src = fetchurl { | |
|
212 | url = "https://files.pythonhosted.org/packages/3c/d2/dc5471622bd200db1cd9319e02e71bc655e9ea27b8e0ce65fc69de0dac15/urllib3-1.23.tar.gz"; | |
|
213 | sha256 = "1bvbd35q3zdcd7gsv38fwpizy7p06dr0154g5gfybrvnbvhwb2m6"; | |
|
125 | 214 | }; |
|
126 | 215 | }; |
|
127 | 216 | |
|
128 | idna = buildPythonPackage { | |
|
129 | name = "idna-2.6"; | |
|
130 | buildInputs = []; | |
|
131 | doCheck = false; | |
|
132 | propagatedBuildInputs = []; | |
|
133 | src = fetchurl { | |
|
134 | url = "https://pypi.python.org/packages/f4/bd/0467d62790828c23c47fc1dfa1b1f052b24efdf5290f071c7a91d0d82fd3/idna-2.6.tar.gz"; | |
|
135 | md5 = "c706e2790b016bd0ed4edd2d4ba4d147"; | |
|
136 | }; | |
|
137 | }; | |
|
138 | ||
|
139 | imagesize = buildPythonPackage { | |
|
140 | name = "imagesize-0.7.1"; | |
|
141 | buildInputs = []; | |
|
142 | doCheck = false; | |
|
143 | propagatedBuildInputs = []; | |
|
144 | src = fetchurl { | |
|
145 | url = "https://pypi.python.org/packages/53/72/6c6f1e787d9cab2cc733cf042f125abec07209a58308831c9f292504e826/imagesize-0.7.1.tar.gz"; | |
|
146 | md5 = "976148283286a6ba5f69b0f81aef8052"; | |
|
147 | }; | |
|
148 | }; | |
|
149 | ||
|
150 | pytz = buildPythonPackage { | |
|
151 | name = "pytz-2017.3"; | |
|
152 | buildInputs = []; | |
|
153 | doCheck = false; | |
|
154 | propagatedBuildInputs = []; | |
|
155 | src = fetchurl { | |
|
156 | url = "https://pypi.python.org/packages/60/88/d3152c234da4b2a1f7a989f89609ea488225eaea015bc16fbde2b3fdfefa/pytz-2017.3.zip"; | |
|
157 | md5 = "7006b56c0d68a162d9fe57d4249c3171"; | |
|
158 | }; | |
|
159 | }; | |
|
160 | ||
|
161 | requests = buildPythonPackage { | |
|
162 | name = "requests-2.18.4"; | |
|
163 | buildInputs = []; | |
|
164 | doCheck = false; | |
|
165 | propagatedBuildInputs = [chardet idna urllib3 certifi]; | |
|
166 | src = fetchurl { | |
|
167 | url = "https://pypi.python.org/packages/b0/e1/eab4fc3752e3d240468a8c0b284607899d2fbfb236a56b7377a329aa8d09/requests-2.18.4.tar.gz"; | |
|
168 | md5 = "081412b2ef79bdc48229891af13f4d82"; | |
|
169 | }; | |
|
170 | }; | |
|
171 | ||
|
172 | six = buildPythonPackage { | |
|
173 | name = "six-1.11.0"; | |
|
174 | buildInputs = []; | |
|
175 | doCheck = false; | |
|
176 | propagatedBuildInputs = []; | |
|
177 | src = fetchurl { | |
|
178 | url = "https://pypi.python.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz"; | |
|
179 | md5 = "d12789f9baf7e9fb2524c0c64f1773f8"; | |
|
180 | }; | |
|
181 | }; | |
|
182 | ||
|
183 | snowballstemmer = buildPythonPackage { | |
|
184 | name = "snowballstemmer-1.2.1"; | |
|
185 | buildInputs = []; | |
|
186 | doCheck = false; | |
|
187 | propagatedBuildInputs = []; | |
|
188 | src = fetchurl { | |
|
189 | url = "https://pypi.python.org/packages/20/6b/d2a7cb176d4d664d94a6debf52cd8dbae1f7203c8e42426daa077051d59c/snowballstemmer-1.2.1.tar.gz"; | |
|
190 | md5 = "643b019667a708a922172e33a99bf2fa"; | |
|
191 | }; | |
|
192 | }; | |
|
193 | ||
|
194 | sphinx-rtd-theme = buildPythonPackage { | |
|
195 | name = "sphinx-rtd-theme-0.2.5b1"; | |
|
196 | buildInputs = []; | |
|
197 | doCheck = false; | |
|
198 | propagatedBuildInputs = []; | |
|
199 | src = fetchurl { | |
|
200 | url = "https://pypi.python.org/packages/59/e4/9e3a74a3271e6734911d3f549e8439db53b8ac29adf10c8f698e6c86246b/sphinx_rtd_theme-0.2.5b1.tar.gz"; | |
|
201 | md5 = "0923473a43bd2527f32151f195f2a521"; | |
|
202 | }; | |
|
203 | }; | |
|
204 | ||
|
205 | sphinxcontrib-websupport = buildPythonPackage { | |
|
206 | name = "sphinxcontrib-websupport-1.0.1"; | |
|
207 | buildInputs = []; | |
|
208 | doCheck = false; | |
|
209 | propagatedBuildInputs = []; | |
|
210 | src = fetchurl { | |
|
211 | url = "https://pypi.python.org/packages/c5/6b/f0630436b931ad4f8331a9399ca18a7d447f0fcc0c7178fb56b1aee68d01/sphinxcontrib-websupport-1.0.1.tar.gz"; | |
|
212 | md5 = "84df26463b1ba65b07f926dbe2055665"; | |
|
213 | }; | |
|
214 | }; | |
|
215 | ||
|
216 | typing = buildPythonPackage { | |
|
217 | name = "typing-3.6.2"; | |
|
218 | buildInputs = []; | |
|
219 | doCheck = false; | |
|
220 | propagatedBuildInputs = []; | |
|
221 | src = fetchurl { | |
|
222 | url = "https://pypi.python.org/packages/ca/38/16ba8d542e609997fdcd0214628421c971f8c395084085354b11ff4ac9c3/typing-3.6.2.tar.gz"; | |
|
223 | md5 = "143af0bf3afd1887622771f2f1ffe8e1"; | |
|
224 | }; | |
|
225 | }; | |
|
226 | ||
|
227 | urllib3 = buildPythonPackage { | |
|
228 | name = "urllib3-1.22"; | |
|
229 | buildInputs = []; | |
|
230 | doCheck = false; | |
|
231 | propagatedBuildInputs = []; | |
|
232 | src = fetchurl { | |
|
233 | url = "https://pypi.python.org/packages/ee/11/7c59620aceedcc1ef65e156cc5ce5a24ef87be4107c2b74458464e437a5d/urllib3-1.22.tar.gz"; | |
|
234 | md5 = "0da7bed3fe94bf7dc59ae37885cc72f7"; | |
|
235 | }; | |
|
236 | }; | |
|
237 | ||
|
238 | ||
|
239 | sphinx_rtd_theme = buildPythonPackage rec { | |
|
240 | name = "sphinx-rtd-theme-0.2.5b1"; | |
|
241 | buildInputs = []; | |
|
242 | doCheck = false; | |
|
243 | propagatedBuildInputs = []; | |
|
244 | src = fetchurl { | |
|
245 | url = "https://pypi.python.org/packages/59/e4/9e3a74a3271e6734911d3f549e8439db53b8ac29adf10c8f698e6c86246b/sphinx_rtd_theme-0.2.5b1.tar.gz"; | |
|
246 | md5 = "0923473a43bd2527f32151f195f2a521"; | |
|
247 | }; | |
|
248 | ||
|
249 | ||
|
250 | }; | |
|
251 | 217 | # Avoid that setuptools is replaced, this leads to trouble |
|
252 | 218 | # with buildPythonPackage. |
|
253 | 219 | setuptools = pkgs.python27Packages.setuptools; |
@@ -255,7 +221,7 b' let' | |||
|
255 | 221 | in python.buildEnv.override { |
|
256 | 222 | inherit python; |
|
257 | 223 | extraLibs = [ |
|
258 |
|
|
|
259 |
sphinx |
|
|
224 | sphinx | |
|
225 | sphinx-rtd-theme | |
|
260 | 226 | ]; |
|
261 |
} |
|
|
227 | } No newline at end of file |
@@ -37,6 +37,7 b' To convert the old version into a curren' | |||
|
37 | 37 | |repo| into a local machine using a recent |git| client, then push it to a new |
|
38 | 38 | |repo| inside |RCE|. |
|
39 | 39 | |
|
40 | ||
|
40 | 41 | VCS Server Memory Consumption |
|
41 | 42 | ----------------------------- |
|
42 | 43 | |
@@ -48,24 +49,34 b' shipped with the optimal configuration a' | |||
|
48 | 49 | To fix this issue, upgrade to |RCE| 3.3.2 or greater, and if you discover |
|
49 | 50 | memory consumption issues check the VCS Server settings. |
|
50 | 51 | |
|
51 | Fedora 23 | |
|
52 | --------- | |
|
52 | Fedora 23 / Ubuntu 18.04 | |
|
53 | ------------------------ | |
|
54 | ||
|
55 | |RCC| has a know problem with locales, due to changes in glibc 2.27+ which affects | |
|
56 | the local-archive format, which is now incompatible with our used glibc 2.26. | |
|
57 | ||
|
53 | 58 | |
|
54 | |RCC| does not run perfectly on Fedora 23 due to a locale issue. This is a | |
|
55 | known issue under investigation due to the Nix packaging of the product, see the | |
|
56 | `Github issue here`_. |RCC| runs fine on Fedora 21. | |
|
59 | To work around this problem, you need set path to ``$LOCAL_ARCHIVE`` to the | |
|
60 | locale package in older pre glibc 2.27 format, or set `LC_ALL=C` in your enviroment. | |
|
61 | ||
|
62 | To use the pre 2.27 locale-archive fix follow these steps: | |
|
57 | 63 | |
|
58 | To work around this problem, you need to point ``$LOCAL_ARCHIVE`` to the | |
|
59 | workaround locale package. | |
|
64 | 1. Download the pre 2.27 locale-archive package | |
|
60 | 65 | |
|
61 | 1. Download this package: | |
|
62 | http://lipa.ms.mff.cuni.cz/~cunav5am/nix/locale-archive | |
|
66 | .. code-block:: bash | |
|
67 | ||
|
68 | wget https://dls.rhodecode.com/assets/locale-archive | |
|
69 | ||
|
63 | 70 |
|
|
64 | 71 | 2. Point ``$LOCAL_ARCHIVE`` to the locale package. |
|
65 | 72 | |
|
66 | 73 | .. code-block:: bash |
|
67 | 74 | |
|
68 |
$ export LOCALE_ARCHIVE=/home/ |
|
|
75 | $ export LOCALE_ARCHIVE=/home/USER/locale-archive # change to your path | |
|
76 | ||
|
77 | This can either added in `~/.rccontrol/supervisor/supervisord.ini` | |
|
78 | or in user .bashrc/.zshrc etc, or via a startup script that | |
|
79 | runs `rccontrol self-init` | |
|
69 | 80 | |
|
70 | 81 | If you happen to be running |RCC| from systemd, use the following |
|
71 | 82 | example to pass the correct locale information on boot. |
@@ -85,4 +96,3 b' example to pass the correct locale infor' | |||
|
85 | 96 | [Install] |
|
86 | 97 | WantedBy=multi-user.target |
|
87 | 98 | |
|
88 | .. _Github issue here: https://github.com/NixOS/nix/issues/599 |
@@ -9,6 +9,7 b' Release Notes' | |||
|
9 | 9 | .. toctree:: |
|
10 | 10 | :maxdepth: 1 |
|
11 | 11 | |
|
12 | release-notes-4.13.0.rst | |
|
12 | 13 | release-notes-4.12.4.rst |
|
13 | 14 | release-notes-4.12.3.rst |
|
14 | 15 | release-notes-4.12.2.rst |
@@ -1,8 +1,8 b'' | |||
|
1 |
|
|
|
1 | sphinx==1.7.8 | |
|
2 | 2 | six==1.11.0 |
|
3 |
sphinx_rtd_theme==0. |
|
|
3 | sphinx_rtd_theme==0.4.1 | |
|
4 | 4 | docutils==0.14.0 |
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
|
8 | pytz No newline at end of file | |
|
5 | pygments==2.2.0 | |
|
6 | markupsafe==1.0.0 | |
|
7 | jinja2==2.9.6 | |
|
8 | pytz==2018.4 |
@@ -1,6 +1,13 b'' | |||
|
1 | 1 | { |
|
2 | 2 | "name": "rhodecode-enterprise", |
|
3 |
"version": "0.0 |
|
|
3 | "version": "1.0.0", | |
|
4 | "private": true, | |
|
5 | "description" : "RhodeCode JS packaged", | |
|
6 | "license": "SEE LICENSE IN LICENSE.txt", | |
|
7 | "repository" : { | |
|
8 | "type" : "hg", | |
|
9 | "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce" | |
|
10 | }, | |
|
4 | 11 | "devDependencies": { |
|
5 | 12 | "grunt": "^0.4.5", |
|
6 | 13 | "grunt-contrib-copy": "^1.0.0", |
@@ -8,16 +15,17 b'' | |||
|
8 | 15 | "grunt-contrib-jshint": "^0.12.0", |
|
9 | 16 | "grunt-contrib-less": "^1.1.0", |
|
10 | 17 | "grunt-contrib-watch": "^0.6.1", |
|
11 |
"crisper": "^2. |
|
|
12 |
"vulcanize": "^1.1 |
|
|
18 | "crisper": "^2.1.1", | |
|
19 | "vulcanize": "^1.16.0", | |
|
13 | 20 | "grunt-crisper": "^1.0.1", |
|
14 | 21 | "grunt-vulcanize": "^1.0.0", |
|
15 | 22 | "node2nix": "^1.0.0", |
|
16 | 23 | "jshint": "^2.9.1-rc3", |
|
17 |
"bower": "^1. |
|
|
24 | "bower": "^1.8.4", | |
|
18 | 25 | "jquery": "1.11.3", |
|
19 | 26 | "favico.js": "^0.3.10", |
|
20 |
"clipboard": "^ |
|
|
27 | "clipboard": "^2.0.1", | |
|
28 | "qrious": "^4.0.2", | |
|
21 | 29 | "moment": "^2.18.1", |
|
22 | 30 | "mousetrap": "^1.6.1", |
|
23 | 31 | "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1" |
@@ -1,33 +1,30 b'' | |||
|
1 | # Generated by bower2nix v3.2.0 (https://github.com/rvl/bower2nix) | |
|
1 | 2 | { fetchbower, buildEnv }: |
|
2 | 3 | buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [ |
|
3 | (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "178h9j8jq9wi5845f5pxhhhqw6x022nzmpzm4di8fgsdl1f6nr5d") | |
|
4 |
(fetchbower "polymer" "Polymer/polymer# |
|
|
5 |
(fetchbower "paper-button" "PolymerElements/paper-button#1. |
|
|
6 |
(fetchbower "paper-spinner" "PolymerElements/paper-spinner#1 |
|
|
7 |
(fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1 |
|
|
8 |
(fetchbower "paper-toast" "PolymerElements/paper-toast#1. |
|
|
9 |
(fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#1. |
|
|
10 |
(fetchbower "iron-ajax" "PolymerElements/iron-ajax#1. |
|
|
11 |
(fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea# |
|
|
12 |
(fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1. |
|
|
13 | (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl") | |
|
14 | (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8") | |
|
15 | (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh") | |
|
16 |
(fetchbower "paper-styles" "PolymerElements/paper-styles# |
|
|
17 | (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j") | |
|
18 | (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d") | |
|
19 |
(fetchbower "iron- |
|
|
20 | (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf") | |
|
21 |
(fetchbower "iron- |
|
|
22 | (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb") | |
|
23 |
(fetchbower "iron-behavior |
|
|
24 | (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv") | |
|
25 | (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1") | |
|
26 |
(fetchbower "iron-a |
|
|
27 | (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns") | |
|
28 | (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj") | |
|
29 | (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl") | |
|
30 | (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn") | |
|
31 | (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r") | |
|
32 | (fetchbower "web-animations-js" "web-animations/web-animations-js#2.2.2" "web-animations/web-animations-js#^2.2.0" "1izfvm3l67vwys0bqbhidi9rqziw2f8wv289386sc6jsxzgkzhga") | |
|
4 | (fetchbower "webcomponentsjs" "1.2.3" "^1.2.3" "0db2fjk779rhl9d4ifpk1j9a83vngx6j3hk7si1752dqxj857267") | |
|
5 | (fetchbower "polymer" "Polymer/polymer#2.6.0" "Polymer/polymer#^2.6.0" "1jw5syjn0naa7dlxzxvsgwb20zbkbpx0pcg0wzjq4wr49c20nw0k") | |
|
6 | (fetchbower "paper-button" "PolymerElements/paper-button#2.1.2" "PolymerElements/paper-button#^2.1.2" "1lwmjwhvimh02gss39yjp5h7yg9mxl1ig59yrk085v86y5f5ilz1") | |
|
7 | (fetchbower "paper-spinner" "PolymerElements/paper-spinner#2.1.0" "PolymerElements/paper-spinner#^2.1.0" "07jamgxzvy4r9pgf5ikj1fm8nkrw6sywgcxvmm7ax58hjvmd4i45") | |
|
8 | (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#2.1.1" "PolymerElements/paper-tooltip#^2.1.1" "0ja9vz4xps7dxfx6kmrwq0gifbjsyc3pk9l3hd5233ss72ghlvgb") | |
|
9 | (fetchbower "paper-toast" "PolymerElements/paper-toast#2.1.2" "PolymerElements/paper-toast#^2.1.2" "0mkj9ayjx2l9hvrz4kw3yjbgrs9w873k05ywv94nh92mzpjkxn04") | |
|
10 | (fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#2.1.1" "PolymerElements/paper-toggle-button#^2.1.1" "1rl5ar3ny6r3v9hr8s68v8b3zh5yl52pikhi4b9iv9grv29g5999") | |
|
11 | (fetchbower "iron-ajax" "PolymerElements/iron-ajax#2.1.3" "PolymerElements/iron-ajax#^2.1.3" "187zb6lkv18yapl292qhn611mbl4i2bqs2dimlwmdjaln285nc1l") | |
|
12 | (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#2.2.0" "PolymerElements/iron-autogrow-textarea#^2.2.0" "1cx7g49m20z08x25z24g2pvv6m6dwfbkga3nsw0rpi3jk7xhznqw") | |
|
13 | (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#2.1.2" "PolymerElements/iron-a11y-keys#^2.1.2" "0zdn3bzfrk88iwahmmzvcjn3m90zga1l8dx42b365n8if0n0zapj") | |
|
14 | (fetchbower "shadycss" "webcomponents/shadycss#1.3.5" "webcomponents/shadycss#^v1.1.0" "1xp07d6jlmc3ywg4cdp2nijwi0vrbzw468242xz0s6zx5z2n2wzf") | |
|
15 | (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#2.0.3" "PolymerElements/iron-flex-layout#1 - 2" "1ir9ili3rkcgbfj6is5s70vyb7m6avz0av0lpjjlhhsplrrl90bk") | |
|
16 | (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#2.1.1" "PolymerElements/paper-behaviors#1 - 2" "0wzyznmy1q64jsm6lck0xma92lg2hz9h9m05r68iy20iyrvbjld7") | |
|
17 | (fetchbower "paper-styles" "PolymerElements/paper-styles#2.1.0" "PolymerElements/paper-styles#1 - 2" "0xzsd7pvjsk7lgcmvx4q0dvps40q3mymkx26zgs8ns91s1ssfqbx") | |
|
18 | (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#2.1.0" "PolymerElements/iron-a11y-announcer#1 - 2" "1hvmw76im8y3pxmg1yfnlkzap429q9i4v1z42y7m8lz0996jmxrz") | |
|
19 | (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#2.3.4" "PolymerElements/iron-overlay-behavior#1 - 2" "0hk2fxhfz7kg27349qz1c87vq6nfdcnjr9az3q95ak3rigsb71wg") | |
|
20 | (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#2.2.1" "PolymerElements/iron-fit-behavior#1 - 2" "0v89am4r2fncr7m9k0f2xqh5bvgn2dqjjc7p515ix4grk89whbs3") | |
|
21 | (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#2.1.1" "PolymerElements/iron-checked-element-behavior#1 - 2" "00gpvnb7anspadw59av7lca6p03qlx59dgnhw3lqf5v223dsh0l3") | |
|
22 | (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#2.1.1" "PolymerElements/iron-behaviors#1 - 2" "0c71l1il76jg8gvyh8bwlqraif53gfnz5700vpg35qyr1biwbr1w") | |
|
23 | (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#2.1.0" "PolymerElements/iron-validatable-behavior#1 - 2" "1j65zv7hcxdcyyanzhp2wap3bnx7cz8ghd44m12fad2206jj6ysi") | |
|
24 | (fetchbower "iron-a11y-keys-behavior" "PolymerElements/iron-a11y-keys-behavior#2.1.1" "PolymerElements/iron-a11y-keys-behavior#1 - 2" "0jsw7wvh4wzcjqdbvxyha99h1ph61lykyyyvdb6hm8m8w40bhs9b") | |
|
25 | (fetchbower "paper-ripple" "PolymerElements/paper-ripple#2.1.1" "PolymerElements/paper-ripple#1 - 2" "0sam6w83nxf9mss79j6hjfsx0288pf4hwr1bw5xclzgpddcjmrm5") | |
|
26 | (fetchbower "font-roboto" "PolymerElements/font-roboto#1.1.0" "PolymerElements/font-roboto#^1.0.1" "0z4msvaa5pnr84j2r957g313fmdbdbrknhdw1axy5g48845yv04s") | |
|
27 | (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#2.1.1" "PolymerElements/iron-resizable-behavior#1 - 2" "0169rg6kby0ypfiwbkin46ywaszwj7r91yn081yqd96l1115aqnk") | |
|
28 | (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#2.1.3" "PolymerElements/iron-form-element-behavior#1 - 2" "1c83kkfqvb5pdlvrhad3l7b11i244a8lykc8kzfnb9ya0xrln0cn") | |
|
29 | (fetchbower "iron-meta" "PolymerElements/iron-meta#2.1.1" "PolymerElements/iron-meta#1 - 2" "12w1pcl3w97xpxihqddbf2d9dx8xz5i1jd9bz1xrmfsh25isni40") | |
|
33 | 30 | ]; } |
@@ -1,12 +1,14 b'' | |||
|
1 |
# This file has been generated by node2nix 1. |
|
|
1 | # This file has been generated by node2nix 1.6.0. Do not edit! | |
|
2 | 2 | |
|
3 | 3 | {pkgs ? import <nixpkgs> { |
|
4 | 4 | inherit system; |
|
5 | }, system ? builtins.currentSystem}: | |
|
5 | }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-6_x"}: | |
|
6 | 6 | |
|
7 | 7 | let |
|
8 | 8 | nodeEnv = import ./node-env.nix { |
|
9 |
inherit (pkgs) stdenv python utillinux runCommand writeTextFile |
|
|
9 | inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile; | |
|
10 | inherit nodejs; | |
|
11 | libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null; | |
|
10 | 12 | }; |
|
11 | 13 | in |
|
12 | 14 | import ./node-packages.nix { |
This diff has been collapsed as it changes many lines, (518 lines changed) Show them Hide them | |||
@@ -1,31 +1,33 b'' | |||
|
1 | 1 | # This file originates from node2nix |
|
2 | 2 | |
|
3 |
{stdenv, |
|
|
3 | {stdenv, nodejs, python2, utillinux, libtool, runCommand, writeTextFile}: | |
|
4 | 4 | |
|
5 | 5 | let |
|
6 | python = if nodejs ? python then nodejs.python else python2; | |
|
7 | ||
|
6 | 8 | # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise |
|
7 | 9 | tarWrapper = runCommand "tarWrapper" {} '' |
|
8 | 10 | mkdir -p $out/bin |
|
9 | ||
|
11 | ||
|
10 | 12 | cat > $out/bin/tar <<EOF |
|
11 | 13 | #! ${stdenv.shell} -e |
|
12 | 14 | $(type -p tar) "\$@" --warning=no-unknown-keyword |
|
13 | 15 | EOF |
|
14 | ||
|
16 | ||
|
15 | 17 | chmod +x $out/bin/tar |
|
16 | 18 | ''; |
|
17 | ||
|
19 | ||
|
18 | 20 | # Function that generates a TGZ file from a NPM project |
|
19 | 21 | buildNodeSourceDist = |
|
20 | 22 | { name, version, src, ... }: |
|
21 | ||
|
23 | ||
|
22 | 24 | stdenv.mkDerivation { |
|
23 | 25 | name = "node-tarball-${name}-${version}"; |
|
24 | 26 | inherit src; |
|
25 | 27 | buildInputs = [ nodejs ]; |
|
26 | 28 | buildPhase = '' |
|
27 | 29 | export HOME=$TMPDIR |
|
28 | tgzFile=$(npm pack) | |
|
30 | tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts) | |
|
29 | 31 | ''; |
|
30 | 32 | installPhase = '' |
|
31 | 33 | mkdir -p $out/tarballs |
@@ -42,151 +44,322 b' let' | |||
|
42 | 44 | # Bundle the dependencies of the package |
|
43 | 45 | mkdir -p node_modules |
|
44 | 46 | cd node_modules |
|
45 | ||
|
47 | ||
|
46 | 48 | # Only include dependencies if they don't exist. They may also be bundled in the package. |
|
47 | 49 | if [ ! -e "${dependency.name}" ] |
|
48 | 50 | then |
|
49 | 51 | ${composePackage dependency} |
|
50 | 52 | fi |
|
51 | ||
|
53 | ||
|
52 | 54 | cd .. |
|
53 | 55 | '' |
|
54 | 56 | ) dependencies); |
|
55 | 57 | |
|
56 | 58 | # Recursively composes the dependencies of a package |
|
57 | 59 | composePackage = { name, packageName, src, dependencies ? [], ... }@args: |
|
58 | let | |
|
59 | fixImpureDependencies = writeTextFile { | |
|
60 | name = "fixDependencies.js"; | |
|
61 | text = '' | |
|
62 | var fs = require('fs'); | |
|
63 | var url = require('url'); | |
|
64 | ||
|
65 | /* | |
|
66 | * Replaces an impure version specification by * | |
|
67 | */ | |
|
68 | function replaceImpureVersionSpec(versionSpec) { | |
|
69 | var parsedUrl = url.parse(versionSpec); | |
|
70 | ||
|
71 | if(versionSpec == "latest" || versionSpec == "unstable" || | |
|
72 | versionSpec.substr(0, 2) == ".." || dependency.substr(0, 2) == "./" || dependency.substr(0, 2) == "~/" || dependency.substr(0, 1) == '/') | |
|
73 | return '*'; | |
|
74 | else if(parsedUrl.protocol == "git:" || parsedUrl.protocol == "git+ssh:" || parsedUrl.protocol == "git+http:" || parsedUrl.protocol == "git+https:" || | |
|
75 | parsedUrl.protocol == "http:" || parsedUrl.protocol == "https:") | |
|
76 | return '*'; | |
|
77 | else | |
|
78 | return versionSpec; | |
|
79 | } | |
|
80 | ||
|
81 | var packageObj = JSON.parse(fs.readFileSync('./package.json')); | |
|
82 | ||
|
83 | /* Replace dependencies */ | |
|
84 | if(packageObj.dependencies !== undefined) { | |
|
85 | for(var dependency in packageObj.dependencies) { | |
|
86 | var versionSpec = packageObj.dependencies[dependency]; | |
|
87 | packageObj.dependencies[dependency] = replaceImpureVersionSpec(versionSpec); | |
|
88 | } | |
|
89 | } | |
|
90 | ||
|
91 | /* Replace development dependencies */ | |
|
92 | if(packageObj.devDependencies !== undefined) { | |
|
93 | for(var dependency in packageObj.devDependencies) { | |
|
94 | var versionSpec = packageObj.devDependencies[dependency]; | |
|
95 | packageObj.devDependencies[dependency] = replaceImpureVersionSpec(versionSpec); | |
|
96 | } | |
|
97 | } | |
|
98 | ||
|
99 | /* Replace optional dependencies */ | |
|
100 | if(packageObj.optionalDependencies !== undefined) { | |
|
101 | for(var dependency in packageObj.optionalDependencies) { | |
|
102 | var versionSpec = packageObj.optionalDependencies[dependency]; | |
|
103 | packageObj.optionalDependencies[dependency] = replaceImpureVersionSpec(versionSpec); | |
|
104 | } | |
|
105 | } | |
|
106 | ||
|
107 | /* Write the fixed JSON file */ | |
|
108 | fs.writeFileSync("package.json", JSON.stringify(packageObj)); | |
|
109 | ''; | |
|
110 | }; | |
|
111 | in | |
|
112 | 60 |
'' |
|
113 | 61 | DIR=$(pwd) |
|
114 | 62 | cd $TMPDIR |
|
115 | ||
|
63 | ||
|
116 | 64 | unpackFile ${src} |
|
117 | ||
|
65 | ||
|
118 | 66 | # Make the base dir in which the target dependency resides first |
|
119 | 67 | mkdir -p "$(dirname "$DIR/${packageName}")" |
|
120 | 68 | |
|
121 | 69 | if [ -f "${src}" ] |
|
122 | 70 | then |
|
123 | 71 | # Figure out what directory has been unpacked |
|
124 |
packageDir=$(find . - |
|
|
125 | ||
|
72 | packageDir="$(find . -maxdepth 1 -type d | tail -1)" | |
|
73 | ||
|
126 | 74 | # Restore write permissions to make building work |
|
75 | find "$packageDir" -type d -print0 | xargs -0 chmod u+x | |
|
127 | 76 | chmod -R u+w "$packageDir" |
|
128 | ||
|
77 | ||
|
129 | 78 | # Move the extracted tarball into the output folder |
|
130 | 79 | mv "$packageDir" "$DIR/${packageName}" |
|
131 | 80 | elif [ -d "${src}" ] |
|
132 | 81 | then |
|
82 | # Get a stripped name (without hash) of the source directory. | |
|
83 | # On old nixpkgs it's already set internally. | |
|
84 | if [ -z "$strippedName" ] | |
|
85 | then | |
|
86 | strippedName="$(stripHash ${src})" | |
|
87 | fi | |
|
88 | ||
|
133 | 89 | # Restore write permissions to make building work |
|
134 |
|
|
|
135 | ||
|
136 |
|
|
|
137 |
|
|
|
90 | chmod -R u+w "$strippedName" | |
|
91 | ||
|
92 | # Move the extracted directory into the output folder | |
|
93 | mv "$strippedName" "$DIR/${packageName}" | |
|
138 | 94 | fi |
|
139 | ||
|
95 | ||
|
140 | 96 | # Unset the stripped name to not confuse the next unpack step |
|
141 | 97 | unset strippedName |
|
142 | ||
|
143 | # Some version specifiers (latest, unstable, URLs, file paths) force NPM to make remote connections or consult paths outside the Nix store. | |
|
144 | # The following JavaScript replaces these by * to prevent that | |
|
98 | ||
|
99 | # Include the dependencies of the package | |
|
145 | 100 | cd "$DIR/${packageName}" |
|
146 | node ${fixImpureDependencies} | |
|
147 | ||
|
148 | # Include the dependencies of the package | |
|
149 | 101 | ${includeDependencies { inherit dependencies; }} |
|
150 | 102 | cd .. |
|
151 | 103 | ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} |
|
152 | 104 | ''; |
|
153 | 105 | |
|
106 | pinpointDependencies = {dependencies, production}: | |
|
107 | let | |
|
108 | pinpointDependenciesFromPackageJSON = writeTextFile { | |
|
109 | name = "pinpointDependencies.js"; | |
|
110 | text = '' | |
|
111 | var fs = require('fs'); | |
|
112 | var path = require('path'); | |
|
113 | ||
|
114 | function resolveDependencyVersion(location, name) { | |
|
115 | if(location == process.env['NIX_STORE']) { | |
|
116 | return null; | |
|
117 | } else { | |
|
118 | var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json"); | |
|
119 | ||
|
120 | if(fs.existsSync(dependencyPackageJSON)) { | |
|
121 | var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON)); | |
|
122 | ||
|
123 | if(dependencyPackageObj.name == name) { | |
|
124 | return dependencyPackageObj.version; | |
|
125 | } | |
|
126 | } else { | |
|
127 | return resolveDependencyVersion(path.resolve(location, ".."), name); | |
|
128 | } | |
|
129 | } | |
|
130 | } | |
|
131 | ||
|
132 | function replaceDependencies(dependencies) { | |
|
133 | if(typeof dependencies == "object" && dependencies !== null) { | |
|
134 | for(var dependency in dependencies) { | |
|
135 | var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency); | |
|
136 | ||
|
137 | if(resolvedVersion === null) { | |
|
138 | process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n"); | |
|
139 | } else { | |
|
140 | dependencies[dependency] = resolvedVersion; | |
|
141 | } | |
|
142 | } | |
|
143 | } | |
|
144 | } | |
|
145 | ||
|
146 | /* Read the package.json configuration */ | |
|
147 | var packageObj = JSON.parse(fs.readFileSync('./package.json')); | |
|
148 | ||
|
149 | /* Pinpoint all dependencies */ | |
|
150 | replaceDependencies(packageObj.dependencies); | |
|
151 | if(process.argv[2] == "development") { | |
|
152 | replaceDependencies(packageObj.devDependencies); | |
|
153 | } | |
|
154 | replaceDependencies(packageObj.optionalDependencies); | |
|
155 | ||
|
156 | /* Write the fixed package.json file */ | |
|
157 | fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2)); | |
|
158 | ''; | |
|
159 | }; | |
|
160 | in | |
|
161 | '' | |
|
162 | node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"} | |
|
163 | ||
|
164 | ${stdenv.lib.optionalString (dependencies != []) | |
|
165 | '' | |
|
166 | if [ -d node_modules ] | |
|
167 | then | |
|
168 | cd node_modules | |
|
169 | ${stdenv.lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies} | |
|
170 | cd .. | |
|
171 | fi | |
|
172 | ''} | |
|
173 | ''; | |
|
174 | ||
|
175 | # Recursively traverses all dependencies of a package and pinpoints all | |
|
176 | # dependencies in the package.json file to the versions that are actually | |
|
177 | # being used. | |
|
178 | ||
|
179 | pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args: | |
|
180 | '' | |
|
181 | if [ -d "${packageName}" ] | |
|
182 | then | |
|
183 | cd "${packageName}" | |
|
184 | ${pinpointDependencies { inherit dependencies production; }} | |
|
185 | cd .. | |
|
186 | ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} | |
|
187 | fi | |
|
188 | ''; | |
|
189 | ||
|
154 | 190 | # Extract the Node.js source code which is used to compile packages with |
|
155 | 191 | # native bindings |
|
156 | 192 | nodeSources = runCommand "node-sources" {} '' |
|
157 | 193 | tar --no-same-owner --no-same-permissions -xf ${nodejs.src} |
|
158 | 194 | mv node-* $out |
|
159 | 195 | ''; |
|
160 | ||
|
196 | ||
|
197 | # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty) | |
|
198 | addIntegrityFieldsScript = writeTextFile { | |
|
199 | name = "addintegrityfields.js"; | |
|
200 | text = '' | |
|
201 | var fs = require('fs'); | |
|
202 | var path = require('path'); | |
|
203 | ||
|
204 | function augmentDependencies(baseDir, dependencies) { | |
|
205 | for(var dependencyName in dependencies) { | |
|
206 | var dependency = dependencies[dependencyName]; | |
|
207 | ||
|
208 | // Open package.json and augment metadata fields | |
|
209 | var packageJSONDir = path.join(baseDir, "node_modules", dependencyName); | |
|
210 | var packageJSONPath = path.join(packageJSONDir, "package.json"); | |
|
211 | ||
|
212 | if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored | |
|
213 | console.log("Adding metadata fields to: "+packageJSONPath); | |
|
214 | var packageObj = JSON.parse(fs.readFileSync(packageJSONPath)); | |
|
215 | ||
|
216 | if(dependency.integrity) { | |
|
217 | packageObj["_integrity"] = dependency.integrity; | |
|
218 | } else { | |
|
219 | packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads. | |
|
220 | } | |
|
221 | ||
|
222 | packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories. | |
|
223 | fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2)); | |
|
224 | } | |
|
225 | ||
|
226 | // Augment transitive dependencies | |
|
227 | if(dependency.dependencies !== undefined) { | |
|
228 | augmentDependencies(packageJSONDir, dependency.dependencies); | |
|
229 | } | |
|
230 | } | |
|
231 | } | |
|
232 | ||
|
233 | if(fs.existsSync("./package-lock.json")) { | |
|
234 | var packageLock = JSON.parse(fs.readFileSync("./package-lock.json")); | |
|
235 | ||
|
236 | if(packageLock.lockfileVersion !== 1) { | |
|
237 | process.stderr.write("Sorry, I only understand lock file version 1!\n"); | |
|
238 | process.exit(1); | |
|
239 | } | |
|
240 | ||
|
241 | if(packageLock.dependencies !== undefined) { | |
|
242 | augmentDependencies(".", packageLock.dependencies); | |
|
243 | } | |
|
244 | } | |
|
245 | ''; | |
|
246 | }; | |
|
247 | ||
|
248 | # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes | |
|
249 | reconstructPackageLock = writeTextFile { | |
|
250 | name = "addintegrityfields.js"; | |
|
251 | text = '' | |
|
252 | var fs = require('fs'); | |
|
253 | var path = require('path'); | |
|
254 | ||
|
255 | var packageObj = JSON.parse(fs.readFileSync("package.json")); | |
|
256 | ||
|
257 | var lockObj = { | |
|
258 | name: packageObj.name, | |
|
259 | version: packageObj.version, | |
|
260 | lockfileVersion: 1, | |
|
261 | requires: true, | |
|
262 | dependencies: {} | |
|
263 | }; | |
|
264 | ||
|
265 | function augmentPackageJSON(filePath, dependencies) { | |
|
266 | var packageJSON = path.join(filePath, "package.json"); | |
|
267 | if(fs.existsSync(packageJSON)) { | |
|
268 | var packageObj = JSON.parse(fs.readFileSync(packageJSON)); | |
|
269 | dependencies[packageObj.name] = { | |
|
270 | version: packageObj.version, | |
|
271 | integrity: "sha1-000000000000000000000000000=", | |
|
272 | dependencies: {} | |
|
273 | }; | |
|
274 | processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies); | |
|
275 | } | |
|
276 | } | |
|
277 | ||
|
278 | function processDependencies(dir, dependencies) { | |
|
279 | if(fs.existsSync(dir)) { | |
|
280 | var files = fs.readdirSync(dir); | |
|
281 | ||
|
282 | files.forEach(function(entry) { | |
|
283 | var filePath = path.join(dir, entry); | |
|
284 | var stats = fs.statSync(filePath); | |
|
285 | ||
|
286 | if(stats.isDirectory()) { | |
|
287 | if(entry.substr(0, 1) == "@") { | |
|
288 | // When we encounter a namespace folder, augment all packages belonging to the scope | |
|
289 | var pkgFiles = fs.readdirSync(filePath); | |
|
290 | ||
|
291 | pkgFiles.forEach(function(entry) { | |
|
292 | if(stats.isDirectory()) { | |
|
293 | var pkgFilePath = path.join(filePath, entry); | |
|
294 | augmentPackageJSON(pkgFilePath, dependencies); | |
|
295 | } | |
|
296 | }); | |
|
297 | } else { | |
|
298 | augmentPackageJSON(filePath, dependencies); | |
|
299 | } | |
|
300 | } | |
|
301 | }); | |
|
302 | } | |
|
303 | } | |
|
304 | ||
|
305 | processDependencies("node_modules", lockObj.dependencies); | |
|
306 | ||
|
307 | fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2)); | |
|
308 | ''; | |
|
309 | }; | |
|
310 | ||
|
161 | 311 | # Builds and composes an NPM package including all its dependencies |
|
162 | buildNodePackage = { name, packageName, version, dependencies ? [], production ? true, npmFlags ? "", dontNpmInstall ? false, preRebuild ? "", ... }@args: | |
|
163 | ||
|
164 | stdenv.lib.makeOverridable stdenv.mkDerivation (builtins.removeAttrs args [ "dependencies" ] // { | |
|
312 | buildNodePackage = | |
|
313 | { name | |
|
314 | , packageName | |
|
315 | , version | |
|
316 | , dependencies ? [] | |
|
317 | , buildInputs ? [] | |
|
318 | , production ? true | |
|
319 | , npmFlags ? "" | |
|
320 | , dontNpmInstall ? false | |
|
321 | , bypassCache ? false | |
|
322 | , preRebuild ? "" | |
|
323 | , dontStrip ? true | |
|
324 | , unpackPhase ? "true" | |
|
325 | , buildPhase ? "true" | |
|
326 | , ... }@args: | |
|
327 | ||
|
328 | let | |
|
329 | forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com"; | |
|
330 | extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ]; | |
|
331 | in | |
|
332 | stdenv.mkDerivation ({ | |
|
165 | 333 | name = "node-${name}-${version}"; |
|
166 | buildInputs = [ tarWrapper python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or []; | |
|
167 | dontStrip = args.dontStrip or true; # Striping may fail a build for some package deployments | |
|
168 | ||
|
169 | inherit dontNpmInstall preRebuild; | |
|
170 | ||
|
171 | unpackPhase = args.unpackPhase or "true"; | |
|
172 | ||
|
173 | buildPhase = args.buildPhase or "true"; | |
|
174 | ||
|
334 | buildInputs = [ tarWrapper python nodejs ] | |
|
335 | ++ stdenv.lib.optional (stdenv.isLinux) utillinux | |
|
336 | ++ stdenv.lib.optional (stdenv.isDarwin) libtool | |
|
337 | ++ buildInputs; | |
|
338 | ||
|
339 | inherit dontStrip; # Stripping may fail a build for some package deployments | |
|
340 | inherit dontNpmInstall preRebuild unpackPhase buildPhase; | |
|
341 | ||
|
175 | 342 | compositionScript = composePackage args; |
|
176 | passAsFile = [ "compositionScript" ]; | |
|
177 | ||
|
178 | installPhase = args.installPhase or '' | |
|
343 | pinpointDependenciesScript = pinpointDependenciesOfPackage args; | |
|
344 | ||
|
345 | passAsFile = [ "compositionScript" "pinpointDependenciesScript" ]; | |
|
346 | ||
|
347 | installPhase = '' | |
|
179 | 348 | # Create and enter a root node_modules/ folder |
|
180 | 349 | mkdir -p $out/lib/node_modules |
|
181 | 350 | cd $out/lib/node_modules |
|
182 | ||
|
351 | ||
|
183 | 352 | # Compose the package and all its dependencies |
|
184 | 353 | source $compositionScriptPath |
|
185 | ||
|
354 | ||
|
355 | # Pinpoint the versions of all dependencies to the ones that are actually being used | |
|
356 | echo "pinpointing versions of dependencies..." | |
|
357 | source $pinpointDependenciesScriptPath | |
|
358 | ||
|
186 | 359 | # Patch the shebangs of the bundled modules to prevent them from |
|
187 | 360 | # calling executables outside the Nix store as much as possible |
|
188 | 361 | patchShebangs . |
|
189 | ||
|
362 | ||
|
190 | 363 | # Deploy the Node.js package by running npm install. Since the |
|
191 | 364 | # dependencies have been provided already by ourselves, it should not |
|
192 | 365 | # attempt to install them again, which is good, because we want to make |
@@ -196,23 +369,37 b' let' | |||
|
196 | 369 | # |
|
197 | 370 | # The other responsibilities of NPM are kept -- version checks, build |
|
198 | 371 | # steps, postprocessing etc. |
|
199 | ||
|
372 | ||
|
200 | 373 | export HOME=$TMPDIR |
|
201 | 374 | cd "${packageName}" |
|
202 | 375 | runHook preRebuild |
|
203 | npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild | |
|
204 | ||
|
376 | ||
|
377 | ${stdenv.lib.optionalString bypassCache '' | |
|
378 | if [ ! -f package-lock.json ] | |
|
379 | then | |
|
380 | echo "No package-lock.json file found, reconstructing..." | |
|
381 | node ${reconstructPackageLock} | |
|
382 | fi | |
|
383 | ||
|
384 | node ${addIntegrityFieldsScript} | |
|
385 | ''} | |
|
386 | ||
|
387 | npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild | |
|
388 | ||
|
205 | 389 | if [ "$dontNpmInstall" != "1" ] |
|
206 | 390 | then |
|
207 | npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install | |
|
391 | # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. | |
|
392 | rm -f npm-shrinkwrap.json | |
|
393 | ||
|
394 | npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install | |
|
208 | 395 | fi |
|
209 | ||
|
396 | ||
|
210 | 397 | # Create symlink to the deployed executable folder, if applicable |
|
211 | 398 | if [ -d "$out/lib/node_modules/.bin" ] |
|
212 | 399 | then |
|
213 | 400 | ln -s $out/lib/node_modules/.bin $out/bin |
|
214 | 401 | fi |
|
215 | ||
|
402 | ||
|
216 | 403 | # Create symlinks to the deployed manual page folders, if applicable |
|
217 | 404 | if [ -d "$out/lib/node_modules/${packageName}/man" ] |
|
218 | 405 | then |
@@ -226,52 +413,111 b' let' | |||
|
226 | 413 | done |
|
227 | 414 | done |
|
228 | 415 | fi |
|
416 | ||
|
417 | # Run post install hook, if provided | |
|
418 | runHook postInstall | |
|
229 | 419 | ''; |
|
230 | }); | |
|
420 | } // extraArgs); | |
|
231 | 421 | |
|
232 | 422 | # Builds a development shell |
|
233 | buildNodeShell = { name, packageName, version, src, dependencies ? [], production ? true, npmFlags ? "", dontNpmInstall ? false, ... }@args: | |
|
423 | buildNodeShell = | |
|
424 | { name | |
|
425 | , packageName | |
|
426 | , version | |
|
427 | , src | |
|
428 | , dependencies ? [] | |
|
429 | , buildInputs ? [] | |
|
430 | , production ? true | |
|
431 | , npmFlags ? "" | |
|
432 | , dontNpmInstall ? false | |
|
433 | , bypassCache ? false | |
|
434 | , dontStrip ? true | |
|
435 | , unpackPhase ? "true" | |
|
436 | , buildPhase ? "true" | |
|
437 | , ... }@args: | |
|
438 | ||
|
234 | 439 | let |
|
235 | nodeDependencies = stdenv.mkDerivation { | |
|
440 | forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com"; | |
|
441 | ||
|
442 | extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ]; | |
|
443 | ||
|
444 | nodeDependencies = stdenv.mkDerivation ({ | |
|
236 | 445 | name = "node-dependencies-${name}-${version}"; |
|
237 | ||
|
238 | buildInputs = [ tarWrapper python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or []; | |
|
239 | ||
|
446 | ||
|
447 | buildInputs = [ tarWrapper python nodejs ] | |
|
448 | ++ stdenv.lib.optional (stdenv.isLinux) utillinux | |
|
449 | ++ stdenv.lib.optional (stdenv.isDarwin) libtool | |
|
450 | ++ buildInputs; | |
|
451 | ||
|
452 | inherit dontStrip; # Stripping may fail a build for some package deployments | |
|
453 | inherit dontNpmInstall unpackPhase buildPhase; | |
|
454 | ||
|
240 | 455 | includeScript = includeDependencies { inherit dependencies; }; |
|
241 | passAsFile = [ "includeScript" ]; | |
|
242 | ||
|
243 | buildCommand = '' | |
|
244 | mkdir -p $out/lib | |
|
245 | cd $out/lib | |
|
456 | pinpointDependenciesScript = pinpointDependenciesOfPackage args; | |
|
457 | ||
|
458 | passAsFile = [ "includeScript" "pinpointDependenciesScript" ]; | |
|
459 | ||
|
460 | installPhase = '' | |
|
461 | mkdir -p $out/${packageName} | |
|
462 | cd $out/${packageName} | |
|
463 | ||
|
246 | 464 | source $includeScriptPath |
|
247 | ||
|
465 | ||
|
248 | 466 | # Create fake package.json to make the npm commands work properly |
|
249 |
c |
|
|
250 | { | |
|
251 | "name": "${packageName}", | |
|
252 | "version": "${version}" | |
|
253 |
|
|
|
254 | EOF | |
|
255 | ||
|
467 | cp ${src}/package.json . | |
|
468 | chmod 644 package.json | |
|
469 | ${stdenv.lib.optionalString bypassCache '' | |
|
470 | if [ -f ${src}/package-lock.json ] | |
|
471 | then | |
|
472 | cp ${src}/package-lock.json . | |
|
473 | fi | |
|
474 | ''} | |
|
475 | ||
|
476 | # Pinpoint the versions of all dependencies to the ones that are actually being used | |
|
477 | echo "pinpointing versions of dependencies..." | |
|
478 | cd .. | |
|
479 | ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} | |
|
480 | ||
|
481 | source $pinpointDependenciesScriptPath | |
|
482 | cd ${packageName} | |
|
483 | ||
|
256 | 484 | # Patch the shebangs of the bundled modules to prevent them from |
|
257 | 485 | # calling executables outside the Nix store as much as possible |
|
258 | 486 | patchShebangs . |
|
259 | ||
|
260 |
export HOME=$ |
|
|
261 | npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild | |
|
262 | ||
|
263 | ${stdenv.lib.optionalString (!dontNpmInstall) '' | |
|
264 | npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install | |
|
487 | ||
|
488 | export HOME=$PWD | |
|
489 | ||
|
490 | ${stdenv.lib.optionalString bypassCache '' | |
|
491 | if [ ! -f package-lock.json ] | |
|
492 | then | |
|
493 | echo "No package-lock.json file found, reconstructing..." | |
|
494 | node ${reconstructPackageLock} | |
|
495 | fi | |
|
496 | ||
|
497 | node ${addIntegrityFieldsScript} | |
|
265 | 498 | ''} |
|
266 | 499 | |
|
500 | npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild | |
|
501 | ||
|
502 | ${stdenv.lib.optionalString (!dontNpmInstall) '' | |
|
503 | # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. | |
|
504 | rm -f npm-shrinkwrap.json | |
|
505 | ||
|
506 | npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install | |
|
507 | ''} | |
|
508 | ||
|
509 | cd .. | |
|
510 | ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} | |
|
511 | ||
|
512 | mv ${packageName} lib | |
|
267 | 513 | ln -s $out/lib/node_modules/.bin $out/bin |
|
268 | 514 | ''; |
|
269 | }; | |
|
515 | } // extraArgs); | |
|
270 | 516 | in |
|
271 |
|
|
|
517 | stdenv.mkDerivation { | |
|
272 | 518 | name = "node-shell-${name}-${version}"; |
|
273 | ||
|
274 |
buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ |
|
|
519 | ||
|
520 | buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ buildInputs; | |
|
275 | 521 | buildCommand = '' |
|
276 | 522 | mkdir -p $out/bin |
|
277 | 523 | cat > $out/bin/shell <<EOF |
@@ -281,7 +527,7 b' let' | |||
|
281 | 527 | EOF |
|
282 | 528 | chmod +x $out/bin/shell |
|
283 | 529 | ''; |
|
284 | ||
|
530 | ||
|
285 | 531 | # Provide the dependencies in a development shell through the NODE_PATH environment variable |
|
286 | 532 | inherit nodeDependencies; |
|
287 | 533 | shellHook = stdenv.lib.optionalString (dependencies != []) '' |
@@ -289,4 +535,8 b' let' | |||
|
289 | 535 | ''; |
|
290 | 536 | }; |
|
291 | 537 | in |
|
292 | { inherit buildNodeSourceDist buildNodePackage buildNodeShell; } | |
|
538 | { | |
|
539 | buildNodeSourceDist = stdenv.lib.makeOverridable buildNodeSourceDist; | |
|
540 | buildNodePackage = stdenv.lib.makeOverridable buildNodePackage; | |
|
541 | buildNodeShell = stdenv.lib.makeOverridable buildNodeShell; | |
|
542 | } |
|
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 pkgs/patch-beaker-lock-func-debug.diff to pkgs/patch_beaker/patch-beaker-lock-func-debug.diff |
@@ -4,10 +4,13 b'' | |||
|
4 | 4 | # python-packages.nix. The main objective is to add needed dependencies of C |
|
5 | 5 | # libraries and tweak the build instructions where needed. |
|
6 | 6 | |
|
7 | { pkgs, basePythonPackages }: | |
|
7 | { pkgs | |
|
8 | , basePythonPackages | |
|
9 | }: | |
|
8 | 10 | |
|
9 | 11 | let |
|
10 | 12 | sed = "sed -i"; |
|
13 | ||
|
11 | 14 | localLicenses = { |
|
12 | 15 | repoze = { |
|
13 | 16 | fullName = "Repoze License"; |
@@ -19,32 +22,41 b' in' | |||
|
19 | 22 | |
|
20 | 23 | self: super: { |
|
21 | 24 | |
|
22 | appenlight-client = super.appenlight-client.override (attrs: { | |
|
25 | "appenlight-client" = super."appenlight-client".override (attrs: { | |
|
23 | 26 | meta = { |
|
24 | 27 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
25 | 28 | }; |
|
26 | 29 | }); |
|
27 | 30 | |
|
28 |
|
|
|
31 | "beaker" = super."beaker".override (attrs: { | |
|
29 | 32 | patches = [ |
|
30 | ./patch-beaker-lock-func-debug.diff | |
|
33 | ./patch_beaker/patch-beaker-lock-func-debug.diff | |
|
34 | ./patch_beaker/patch-beaker-metadata-reuse.diff | |
|
31 | 35 | ]; |
|
32 | 36 | }); |
|
33 | 37 | |
|
34 |
|
|
|
38 | "gevent" = super."gevent".override (attrs: { | |
|
39 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ | |
|
40 | # NOTE: (marcink) odd requirements from gevent aren't set properly, | |
|
41 | # thus we need to inject psutil manually | |
|
42 | self."psutil" | |
|
43 | ]; | |
|
44 | }); | |
|
45 | ||
|
46 | "future" = super."future".override (attrs: { | |
|
35 | 47 | meta = { |
|
36 | 48 | license = [ pkgs.lib.licenses.mit ]; |
|
37 | 49 | }; |
|
38 | 50 | }); |
|
39 | 51 | |
|
40 | testpath = super.testpath.override (attrs: { | |
|
52 | "testpath" = super."testpath".override (attrs: { | |
|
41 | 53 | meta = { |
|
42 | 54 | license = [ pkgs.lib.licenses.mit ]; |
|
43 | 55 | }; |
|
44 | 56 | }); |
|
45 | 57 | |
|
46 | gnureadline = super.gnureadline.override (attrs: { | |
|
47 |
buildInputs = |
|
|
58 | "gnureadline" = super."gnureadline".override (attrs: { | |
|
59 | buildInputs = [ | |
|
48 | 60 | pkgs.ncurses |
|
49 | 61 | ]; |
|
50 | 62 | patchPhase = '' |
@@ -52,56 +64,50 b' self: super: {' | |||
|
52 | 64 | ''; |
|
53 | 65 | }); |
|
54 | 66 | |
|
55 | gunicorn = super.gunicorn.override (attrs: { | |
|
56 |
propagatedBuildInputs = |
|
|
67 | "gunicorn" = super."gunicorn".override (attrs: { | |
|
68 | propagatedBuildInputs = [ | |
|
57 | 69 | # johbo: futures is needed as long as we are on Python 2, otherwise |
|
58 | 70 | # gunicorn explodes if used with multiple threads per worker. |
|
59 | self.futures | |
|
71 | self."futures" | |
|
60 | 72 | ]; |
|
61 | 73 | }); |
|
62 | 74 | |
|
63 |
|
|
|
75 | "nbconvert" = super."nbconvert".override (attrs: { | |
|
64 | 76 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ |
|
65 | 77 | # marcink: plug in jupyter-client for notebook rendering |
|
66 | self.jupyter-client | |
|
78 | self."jupyter-client" | |
|
67 | 79 | ]; |
|
68 | 80 | }); |
|
69 | 81 | |
|
70 | ipython = super.ipython.override (attrs: { | |
|
82 | "ipython" = super."ipython".override (attrs: { | |
|
71 | 83 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ |
|
72 | self.gnureadline | |
|
84 | self."gnureadline" | |
|
73 | 85 | ]; |
|
74 | 86 | }); |
|
75 | 87 | |
|
76 | lxml = super.lxml.override (attrs: { | |
|
77 | # johbo: On 16.09 we need this to compile on darwin, otherwise compilation | |
|
78 | # fails on Darwin. | |
|
79 | hardeningDisable = if pkgs.stdenv.isDarwin then [ "format" ] else null; | |
|
80 | buildInputs = with self; [ | |
|
88 | "lxml" = super."lxml".override (attrs: { | |
|
89 | buildInputs = [ | |
|
81 | 90 | pkgs.libxml2 |
|
82 | 91 | pkgs.libxslt |
|
83 | 92 | ]; |
|
93 | propagatedBuildInputs = [ | |
|
94 | # Needed, so that "setup.py bdist_wheel" does work | |
|
95 | self."wheel" | |
|
96 | ]; | |
|
84 | 97 | }); |
|
85 | 98 | |
|
86 |
|
|
|
87 |
buildInputs = |
|
|
99 | "mysql-python" = super."mysql-python".override (attrs: { | |
|
100 | buildInputs = [ | |
|
88 | 101 | pkgs.openssl |
|
89 | 102 | ]; |
|
90 |
propagatedBuildInputs = |
|
|
103 | propagatedBuildInputs = [ | |
|
91 | 104 | pkgs.libmysql |
|
92 | 105 | pkgs.zlib |
|
93 | 106 | ]; |
|
94 | 107 | }); |
|
95 | 108 | |
|
96 |
|
|
|
97 | buildInputs = attrs.buildInputs ++ | |
|
98 | pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.IOKit; | |
|
99 | }); | |
|
100 | ||
|
101 | psycopg2 = super.psycopg2.override (attrs: { | |
|
102 | buildInputs = attrs.buildInputs ++ | |
|
103 | pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.openssl; | |
|
104 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ | |
|
109 | "psycopg2" = super."psycopg2".override (attrs: { | |
|
110 | propagatedBuildInputs = [ | |
|
105 | 111 | pkgs.postgresql |
|
106 | 112 | ]; |
|
107 | 113 | meta = { |
@@ -109,8 +115,8 b' self: super: {' | |||
|
109 | 115 | }; |
|
110 | 116 | }); |
|
111 | 117 | |
|
112 | pycurl = super.pycurl.override (attrs: { | |
|
113 |
propagatedBuildInputs = |
|
|
118 | "pycurl" = super."pycurl".override (attrs: { | |
|
119 | propagatedBuildInputs = [ | |
|
114 | 120 | pkgs.curl |
|
115 | 121 | pkgs.openssl |
|
116 | 122 | ]; |
@@ -119,30 +125,23 b' self: super: {' | |||
|
119 | 125 | export PYCURL_SSL_LIBRARY=openssl |
|
120 | 126 | ''; |
|
121 | 127 | meta = { |
|
122 | # TODO: It is LGPL and MIT | |
|
123 | 128 | license = pkgs.lib.licenses.mit; |
|
124 | 129 | }; |
|
125 | 130 | }); |
|
126 | 131 | |
|
127 | pyramid = super.pyramid.override (attrs: { | |
|
128 | postFixup = '' | |
|
129 | wrapPythonPrograms | |
|
130 | # TODO: johbo: "wrapPython" adds this magic line which | |
|
131 | # confuses pserve. | |
|
132 | ${sed} '/import sys; sys.argv/d' $out/bin/.pserve-wrapped | |
|
133 | ''; | |
|
132 | "pyramid" = super."pyramid".override (attrs: { | |
|
134 | 133 | meta = { |
|
135 | 134 | license = localLicenses.repoze; |
|
136 | 135 | }; |
|
137 | 136 | }); |
|
138 | 137 | |
|
139 | pyramid-debugtoolbar = super.pyramid-debugtoolbar.override (attrs: { | |
|
138 | "pyramid-debugtoolbar" = super."pyramid-debugtoolbar".override (attrs: { | |
|
140 | 139 | meta = { |
|
141 | 140 | license = [ pkgs.lib.licenses.bsdOriginal localLicenses.repoze ]; |
|
142 | 141 | }; |
|
143 | 142 | }); |
|
144 | 143 | |
|
145 | pysqlite = super.pysqlite.override (attrs: { | |
|
144 | "pysqlite" = super."pysqlite".override (attrs: { | |
|
146 | 145 | propagatedBuildInputs = [ |
|
147 | 146 | pkgs.sqlite |
|
148 | 147 | ]; |
@@ -151,41 +150,39 b' self: super: {' | |||
|
151 | 150 | }; |
|
152 | 151 | }); |
|
153 | 152 | |
|
154 | pytest-runner = super.pytest-runner.override (attrs: { | |
|
153 | "pytest-runner" = super."pytest-runner".override (attrs: { | |
|
155 | 154 | propagatedBuildInputs = [ |
|
156 | self.setuptools-scm | |
|
155 | self."setuptools-scm" | |
|
156 | ]; | |
|
157 | }); | |
|
158 | ||
|
159 | "python-ldap" = super."python-ldap".override (attrs: { | |
|
160 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ | |
|
161 | pkgs.openldap | |
|
162 | pkgs.cyrus_sasl | |
|
163 | pkgs.openssl | |
|
157 | 164 | ]; |
|
158 | 165 | }); |
|
159 | 166 | |
|
160 |
python- |
|
|
161 |
propagatedBuildInputs = |
|
|
162 |
pkgs. |
|
|
163 | pkgs.openldap | |
|
164 | pkgs.openssl | |
|
167 | "python-pam" = super."python-pam".override (attrs: { | |
|
168 | propagatedBuildInputs = [ | |
|
169 | pkgs.pam | |
|
165 | 170 | ]; |
|
166 | # TODO: johbo: Remove the "or" once we drop 16.03 support. | |
|
167 | NIX_CFLAGS_COMPILE = "-I${pkgs.cyrus_sasl.dev or pkgs.cyrus_sasl}/include/sasl"; | |
|
171 | # TODO: johbo: Check if this can be avoided, or transform into | |
|
172 | # a real patch | |
|
173 | patchPhase = '' | |
|
174 | substituteInPlace pam.py \ | |
|
175 | --replace 'find_library("pam")' '"${pkgs.pam}/lib/libpam.so.0"' | |
|
176 | ''; | |
|
177 | }); | |
|
178 | ||
|
179 | "pyzmq" = super."pyzmq".override (attrs: { | |
|
180 | buildInputs = [ | |
|
181 | pkgs.czmq | |
|
182 | ]; | |
|
168 | 183 | }); |
|
169 | 184 | |
|
170 |
|
|
|
171 | let | |
|
172 | includeLibPam = pkgs.stdenv.isLinux; | |
|
173 | in { | |
|
174 | # TODO: johbo: Move the option up into the default.nix, we should | |
|
175 | # include python-pam only on supported platforms. | |
|
176 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ | |
|
177 | pkgs.lib.optional includeLibPam [ | |
|
178 | pkgs.pam | |
|
179 | ]; | |
|
180 | # TODO: johbo: Check if this can be avoided, or transform into | |
|
181 | # a real patch | |
|
182 | patchPhase = pkgs.lib.optionals includeLibPam '' | |
|
183 | substituteInPlace pam.py \ | |
|
184 | --replace 'find_library("pam")' '"${pkgs.pam}/lib/libpam.so.0"' | |
|
185 | ''; | |
|
186 | }); | |
|
187 | ||
|
188 | URLObject = super.URLObject.override (attrs: { | |
|
185 | "urlobject" = super."urlobject".override (attrs: { | |
|
189 | 186 | meta = { |
|
190 | 187 | license = { |
|
191 | 188 | spdxId = "Unlicense"; |
@@ -195,56 +192,56 b' self: super: {' | |||
|
195 | 192 | }; |
|
196 | 193 | }); |
|
197 | 194 | |
|
198 | docutils = super.docutils.override (attrs: { | |
|
195 | "docutils" = super."docutils".override (attrs: { | |
|
199 | 196 | meta = { |
|
200 | 197 | license = pkgs.lib.licenses.bsd2; |
|
201 | 198 | }; |
|
202 | 199 | }); |
|
203 | 200 | |
|
204 | colander = super.colander.override (attrs: { | |
|
201 | "colander" = super."colander".override (attrs: { | |
|
205 | 202 | meta = { |
|
206 | 203 | license = localLicenses.repoze; |
|
207 | 204 | }; |
|
208 | 205 | }); |
|
209 | 206 | |
|
210 | pyramid-beaker = super.pyramid-beaker.override (attrs: { | |
|
207 | "pyramid-beaker" = super."pyramid-beaker".override (attrs: { | |
|
211 | 208 | meta = { |
|
212 | 209 | license = localLicenses.repoze; |
|
213 | 210 | }; |
|
214 | 211 | }); |
|
215 | 212 | |
|
216 | pyramid-mako = super.pyramid-mako.override (attrs: { | |
|
213 | "pyramid-mako" = super."pyramid-mako".override (attrs: { | |
|
217 | 214 | meta = { |
|
218 | 215 | license = localLicenses.repoze; |
|
219 | 216 | }; |
|
220 | 217 | }); |
|
221 | 218 | |
|
222 | repoze.lru = super.repoze.lru.override (attrs: { | |
|
219 | "repoze.lru" = super."repoze.lru".override (attrs: { | |
|
223 | 220 | meta = { |
|
224 | 221 | license = localLicenses.repoze; |
|
225 | 222 | }; |
|
226 | 223 | }); |
|
227 | 224 | |
|
228 | python-editor = super.python-editor.override (attrs: { | |
|
225 | "python-editor" = super."python-editor".override (attrs: { | |
|
229 | 226 | meta = { |
|
230 | 227 | license = pkgs.lib.licenses.asl20; |
|
231 | 228 | }; |
|
232 | 229 | }); |
|
233 | 230 | |
|
234 | translationstring = super.translationstring.override (attrs: { | |
|
231 | "translationstring" = super."translationstring".override (attrs: { | |
|
235 | 232 | meta = { |
|
236 | 233 | license = localLicenses.repoze; |
|
237 | 234 | }; |
|
238 | 235 | }); |
|
239 | 236 | |
|
240 | venusian = super.venusian.override (attrs: { | |
|
237 | "venusian" = super."venusian".override (attrs: { | |
|
241 | 238 | meta = { |
|
242 | 239 | license = localLicenses.repoze; |
|
243 | 240 | }; |
|
244 | 241 | }); |
|
245 | 242 | |
|
246 | # Avoid that setuptools is replaced, this leads to trouble | |
|
247 |
|
|
|
248 | setuptools = basePythonPackages.setuptools; | |
|
243 | # Avoid that base packages screw up the build process | |
|
244 | inherit (basePythonPackages) | |
|
245 | setuptools; | |
|
249 | 246 | |
|
250 | 247 | } |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
@@ -1,6 +1,7 b'' | |||
|
1 | 1 | [pytest] |
|
2 | 2 | testpaths = rhodecode |
|
3 | 3 | norecursedirs = rhodecode/public rhodecode/templates tests/scripts |
|
4 | cache_dir = /tmp/.pytest_cache | |
|
4 | 5 | |
|
5 | 6 | pyramid_config = rhodecode/tests/rhodecode.ini |
|
6 | 7 | vcsserver_protocol = http |
@@ -1,232 +1,21 b'' | |||
|
1 | # | |
|
2 | # About | |
|
3 | # ===== | |
|
4 | # | |
|
5 | # This file defines jobs for our CI system and the attribute "build" is used | |
|
6 | # as the input for packaging. | |
|
7 | # | |
|
8 | # | |
|
9 | # CI details | |
|
10 | # ========== | |
|
11 | # | |
|
12 | # This file defines an attribute set of derivations. Each of these attributes is | |
|
13 | # then used in our CI system as one job to run. This way we keep the | |
|
14 | # configuration for the CI jobs as well under version control. | |
|
15 | # | |
|
16 | # Run CI jobs locally | |
|
17 | # ------------------- | |
|
18 | # | |
|
19 | # Since it is all based on normal Nix derivations, the jobs can be tested | |
|
20 | # locally with a run of "nix-build" like the following example: | |
|
21 | # | |
|
22 | # nix-build release.nix -A test-api -I vcsserver=~/rhodecode-vcsserver | |
|
23 | # | |
|
24 | # Note: Replace "~/rhodecode-vcsserver" with a path where a clone of the | |
|
25 | # vcsserver resides. | |
|
1 | # This file defines how to "build" for packaging. | |
|
26 | 2 | |
|
27 | 3 | { pkgs ? import <nixpkgs> {} |
|
28 |
, doCheck ? |
|
|
4 | , doCheck ? false | |
|
29 | 5 | }: |
|
30 | 6 | |
|
31 | 7 | let |
|
32 | ||
|
33 | inherit (pkgs) | |
|
34 | stdenv | |
|
35 | system; | |
|
36 | ||
|
37 | testing = import <nixpkgs/nixos/lib/testing.nix> { | |
|
38 | inherit system; | |
|
39 | }; | |
|
40 | ||
|
41 | runInMachine = testing.runInMachine; | |
|
42 | ||
|
43 | sphinx = import ./docs/default.nix {}; | |
|
44 | ||
|
45 | mkDocs = kind: stdenv.mkDerivation { | |
|
46 | name = kind; | |
|
47 | srcs = [ | |
|
48 | (./. + (builtins.toPath "/${kind}")) | |
|
49 | (builtins.filterSource | |
|
50 | (path: type: baseNameOf path == "VERSION") | |
|
51 | ./rhodecode) | |
|
52 | ]; | |
|
53 | sourceRoot = kind; | |
|
54 | buildInputs = [ sphinx ]; | |
|
55 | configurePhase = null; | |
|
56 | buildPhase = '' | |
|
57 | make SPHINXBUILD=sphinx-build html | |
|
58 | ''; | |
|
59 | installPhase = '' | |
|
60 | mkdir -p $out | |
|
61 | mv _build/html $out/ | |
|
62 | ||
|
63 | mkdir -p $out/nix-support | |
|
64 | echo "doc manual $out/html index.html" >> \ | |
|
65 | "$out/nix-support/hydra-build-products" | |
|
66 | ''; | |
|
67 | }; | |
|
68 | ||
|
69 | enterprise = import ./default.nix { | |
|
8 | enterprise_ce = import ./default.nix { | |
|
70 | 9 | inherit |
|
10 | doCheck | |
|
71 | 11 | pkgs; |
|
72 | 12 | |
|
73 | # TODO: for quick local testing | |
|
74 | doCheck = false; | |
|
75 | }; | |
|
13 | # disable checkPhase for build | |
|
14 | checkPhase = '' | |
|
15 | ''; | |
|
76 | 16 | |
|
77 | test-cfg = stdenv.mkDerivation { | |
|
78 | name = "test-cfg"; | |
|
79 | unpackPhase = "true"; | |
|
80 | buildInputs = [ | |
|
81 | enterprise.src | |
|
82 | ]; | |
|
83 | installPhase = '' | |
|
84 | mkdir -p $out/etc | |
|
85 | cp ${enterprise.src}/test.ini $out/etc/enterprise.ini | |
|
86 | # TODO: johbo: Needed, so that the login works, this causes | |
|
87 | # probably some side effects | |
|
88 | substituteInPlace $out/etc/enterprise.ini --replace "is_test = True" "" | |
|
89 | ||
|
90 | # Gevent configuration | |
|
91 | cp $out/etc/enterprise.ini $out/etc/enterprise-gevent.ini; | |
|
92 | cat >> $out/etc/enterprise-gevent.ini <<EOF | |
|
93 | ||
|
94 | [server:main] | |
|
95 | use = egg:gunicorn#main | |
|
96 | worker_class = gevent | |
|
97 | EOF | |
|
98 | ||
|
99 | cp ${enterprise.src}/vcsserver/test.ini $out/etc/vcsserver.ini | |
|
100 | ''; | |
|
101 | }; | |
|
102 | ||
|
103 | ac-test-drv = import ./acceptance_tests { | |
|
104 | withExternals = false; | |
|
105 | 17 | }; |
|
106 | 18 | |
|
107 | # TODO: johbo: Currently abusing buildPythonPackage to make the | |
|
108 | # needed environment for the ac-test tools. | |
|
109 | mkAcTests = { | |
|
110 | # Path to an INI file which will be used to run Enterprise. | |
|
111 | # | |
|
112 | # Intended usage is to provide different configuration files to | |
|
113 | # run the tests against a different configuration. | |
|
114 | enterpriseCfg ? "${test-cfg}/etc/enterprise.ini" | |
|
115 | ||
|
116 | # Path to an INI file which will be used to run the VCSServer. | |
|
117 | , vcsserverCfg ? "${test-cfg}/etc/vcsserver.ini" | |
|
118 | }: pkgs.pythonPackages.buildPythonPackage { | |
|
119 | name = "enterprise-ac-tests"; | |
|
120 | src = ./acceptance_tests; | |
|
121 | ||
|
122 | buildInputs = with pkgs; [ | |
|
123 | curl | |
|
124 | enterprise | |
|
125 | ac-test-drv | |
|
126 | ]; | |
|
127 | ||
|
128 | buildPhase = '' | |
|
129 | cp ${enterpriseCfg} enterprise.ini | |
|
130 | ||
|
131 | echo "Creating a fake home directory" | |
|
132 | mkdir fake-home | |
|
133 | export HOME=$PWD/fake-home | |
|
134 | ||
|
135 | echo "Creating a repository directory" | |
|
136 | mkdir repos | |
|
137 | ||
|
138 | echo "Preparing the database" | |
|
139 | rc-setup-app \ | |
|
140 | --user=admin \ | |
|
141 | --email=admin@example.com \ | |
|
142 | --password=secret \ | |
|
143 | --api-key=9999999999999999999999999999999999999999 \ | |
|
144 | --force-yes \ | |
|
145 | --repos=$PWD/repos \ | |
|
146 | enterprise.ini > /dev/null | |
|
147 | ||
|
148 | echo "Starting rc-server" | |
|
149 | vcsserver --config ${vcsserverCfg} >vcsserver.log 2>&1 & | |
|
150 | rc-server enterprise.ini >rc-server.log 2>&1 & | |
|
151 | ||
|
152 | while ! curl -f -s http://localhost:5000 > /dev/null | |
|
153 | do | |
|
154 | echo "Waiting for server to be ready..." | |
|
155 | sleep 3 | |
|
156 | done | |
|
157 | echo "Webserver is ready." | |
|
158 | ||
|
159 | echo "Starting the test run" | |
|
160 | py.test -c example.ini -vs --maxfail=5 tests | |
|
161 | ||
|
162 | echo "Kill rc-server" | |
|
163 | kill %2 | |
|
164 | kill %1 | |
|
165 | ''; | |
|
166 | ||
|
167 | # TODO: johbo: Use the install phase again once the normal mkDerivation | |
|
168 | # can be used again. | |
|
169 | postInstall = '' | |
|
170 | mkdir -p $out | |
|
171 | cp enterprise.ini $out | |
|
172 | cp ${vcsserverCfg} $out/vcsserver.ini | |
|
173 | cp rc-server.log $out | |
|
174 | cp vcsserver.log $out | |
|
175 | ||
|
176 | mkdir -p $out/nix-support | |
|
177 | echo "report config $out enterprise.ini" >> $out/nix-support/hydra-build-products | |
|
178 | echo "report config $out vcsserver.ini" >> $out/nix-support/hydra-build-products | |
|
179 | echo "report rc-server $out rc-server.log" >> $out/nix-support/hydra-build-products | |
|
180 | echo "report vcsserver $out vcsserver.log" >> $out/nix-support/hydra-build-products | |
|
181 | ''; | |
|
182 | }; | |
|
183 | ||
|
184 | vcsserver = import <vcsserver> { | |
|
185 | inherit pkgs; | |
|
186 | ||
|
187 | # TODO: johbo: Think of a more elegant solution to this problem | |
|
188 | pythonExternalOverrides = self: super: (enterprise.myPythonPackagesUnfix self); | |
|
189 | }; | |
|
190 | ||
|
191 | runTests = optionString: (enterprise.override (attrs: { | |
|
192 | doCheck = true; | |
|
193 | name = "test-run"; | |
|
194 | buildInputs = attrs.buildInputs ++ [ | |
|
195 | vcsserver | |
|
196 | ]; | |
|
197 | checkPhase = '' | |
|
198 | py.test ${optionString} -vv -ra | |
|
199 | ''; | |
|
200 | buildPhase = attrs.shellHook; | |
|
201 | installPhase = '' | |
|
202 | echo "Intentionally not installing anything" | |
|
203 | ''; | |
|
204 | meta.description = "Enterprise test run ${optionString}"; | |
|
205 | })); | |
|
206 | ||
|
207 | jobs = { | |
|
208 | ||
|
209 | build = enterprise; | |
|
210 | ||
|
211 | # johbo: Currently this is simply running the tests against the sources. Nicer | |
|
212 | # would be to run xdist and against the installed application, so that we also | |
|
213 | # cover the impact of installing the application. | |
|
214 | test-api = runTests "rhodecode/api"; | |
|
215 | test-functional = runTests "rhodecode/tests/functional"; | |
|
216 | test-rest = runTests "rhodecode/tests --ignore=rhodecode/tests/functional"; | |
|
217 | test-full = runTests "rhodecode"; | |
|
218 | ||
|
219 | docs = mkDocs "docs"; | |
|
220 | ||
|
221 | aggregate = pkgs.releaseTools.aggregate { | |
|
222 | name = "aggregated-jobs"; | |
|
223 | constituents = [ | |
|
224 | jobs.build | |
|
225 | jobs.test-api | |
|
226 | jobs.test-rest | |
|
227 | jobs.docs | |
|
228 | ]; | |
|
229 | }; | |
|
230 | }; | |
|
231 | ||
|
232 | in jobs | |
|
19 | in { | |
|
20 | build = enterprise_ce; | |
|
21 | } |
@@ -1,129 +1,129 b'' | |||
|
1 | ## core | |
|
2 | setuptools==30.1.0 | |
|
3 | setuptools-scm==1.15.6 | |
|
1 | ## dependencies | |
|
4 | 2 | |
|
5 | amqp==2.2.2 | |
|
3 | setuptools-scm==2.1.0 | |
|
4 | amqp==2.3.1 | |
|
6 | 5 | # not released authomatic that has updated some oauth providers |
|
7 | 6 | https://code.rhodecode.com/upstream/authomatic/archive/90a9ce60cc405ae8a2bf5c3713acd5d78579a04e.tar.gz?md5=3c68720a1322b25254009518d1ff6801#egg=authomatic==0.1.0.post1 |
|
8 |
|
|
|
9 |
|
|
|
10 |
celery==4.1. |
|
|
11 |
|
|
|
7 | babel==1.3 | |
|
8 | beaker==1.9.1 | |
|
9 | celery==4.1.1 | |
|
10 | chameleon==2.24 | |
|
12 | 11 | channelstream==0.5.2 |
|
13 | 12 | click==6.6 |
|
14 | 13 | colander==1.4.0 |
|
15 | configobj==5.0.6 | |
|
16 | cssselect==1.0.1 | |
|
14 | # our custom configobj | |
|
15 | https://code.rhodecode.com/upstream/configobj/archive/a11ff0a0bd4fbda9e3a91267e720f88329efb4a6.tar.gz?md5=9916c524ea11a6c418217af6b28d4b3c#egg=configobj==5.0.6 | |
|
16 | cssselect==1.0.3 | |
|
17 | 17 | decorator==4.1.2 |
|
18 |
deform==2.0. |
|
|
18 | deform==2.0.5 | |
|
19 | 19 | docutils==0.14.0 |
|
20 |
dogpile.cache==0.6. |
|
|
20 | dogpile.cache==0.6.6 | |
|
21 | 21 | dogpile.core==0.4.1 |
|
22 | 22 | ecdsa==0.13 |
|
23 |
|
|
|
23 | formencode==1.2.4 | |
|
24 | 24 | future==0.14.3 |
|
25 | 25 | futures==3.0.2 |
|
26 | 26 | gnureadline==6.3.8 |
|
27 | 27 | infrae.cache==1.0.1 |
|
28 |
iso8601==0.1.1 |
|
|
28 | iso8601==0.1.11 | |
|
29 | 29 | itsdangerous==0.24 |
|
30 |
|
|
|
30 | jinja2==2.9.6 | |
|
31 | 31 | billiard==3.5.0.3 |
|
32 |
kombu==4. |
|
|
32 | kombu==4.2.0 | |
|
33 | 33 | lxml==3.7.3 |
|
34 |
|
|
|
35 |
|
|
|
36 |
|
|
|
37 |
msgpack-python==0. |
|
|
38 |
|
|
|
34 | mako==1.0.7 | |
|
35 | markdown==2.6.11 | |
|
36 | markupsafe==1.0.0 | |
|
37 | msgpack-python==0.5.6 | |
|
38 | mysql-python==1.2.5 | |
|
39 | pymysql==0.8.1 | |
|
40 | pyotp==2.2.6 | |
|
39 | 41 | objgraph==3.1.1 |
|
40 | 42 | packaging==15.2 |
|
41 |
|
|
|
42 |
|
|
|
43 |
|
|
|
43 | paste==2.0.3 | |
|
44 | pastedeploy==1.5.2 | |
|
45 | pastescript==2.0.2 | |
|
44 | 46 | pathlib2==2.3.0 |
|
45 | 47 | peppercorn==0.5 |
|
46 |
psutil==5.4. |
|
|
47 |
psycopg2==2.7. |
|
|
48 | psutil==5.4.6 | |
|
49 | psycopg2==2.7.4 | |
|
48 | 50 | py-bcrypt==0.4 |
|
49 | 51 | pycrypto==2.6.1 |
|
50 |
pycurl==7. |
|
|
52 | pycurl==7.43.0.2 | |
|
51 | 53 | pyflakes==0.8.1 |
|
52 | 54 | pygments-markdown-lexer==0.1.0.dev39 |
|
53 |
|
|
|
55 | pygments==2.2.0 | |
|
54 | 56 | pyparsing==1.5.7 |
|
55 | 57 | pyramid-beaker==0.8 |
|
56 |
pyramid-debugtoolbar==4. |
|
|
58 | pyramid-debugtoolbar==4.4.0 | |
|
57 | 59 | pyramid-jinja2==2.7 |
|
58 | 60 | pyramid-mako==1.0.2 |
|
59 |
pyramid==1.9. |
|
|
61 | pyramid==1.9.2 | |
|
60 | 62 | pysqlite==2.8.3 |
|
61 | 63 | python-dateutil |
|
62 |
python-ldap== |
|
|
63 |
python-memcached==1.5 |
|
|
64 |
python-pam==1.8. |
|
|
65 |
pytz==2018. |
|
|
64 | python-ldap==3.1.0 | |
|
65 | python-memcached==1.59 | |
|
66 | python-pam==1.8.4 | |
|
67 | pytz==2018.4 | |
|
66 | 68 | tzlocal==1.5.1 |
|
67 | 69 | pyzmq==14.6.0 |
|
68 | 70 | py-gfm==0.1.3 |
|
69 | 71 | redis==2.10.6 |
|
70 | 72 | repoze.lru==0.7 |
|
71 | 73 | requests==2.9.1 |
|
72 |
|
|
|
74 | routes==2.4.1 | |
|
73 | 75 | setproctitle==1.1.10 |
|
74 | 76 | simplejson==3.11.1 |
|
75 | 77 | six==1.11.0 |
|
76 |
|
|
|
78 | sqlalchemy==1.1.18 | |
|
77 | 79 | sshpubkeys==2.2.0 |
|
78 |
subprocess32==3. |
|
|
80 | subprocess32==3.5.1 | |
|
79 | 81 | supervisor==3.3.4 |
|
80 |
|
|
|
82 | tempita==0.5.2 | |
|
81 | 83 | translationstring==1.3 |
|
82 | 84 | trollius==1.0.4 |
|
83 |
urllib3==1.1 |
|
|
84 |
|
|
|
85 | urllib3==1.21 | |
|
86 | urlobject==2.4.3 | |
|
85 | 87 | venusian==1.1.0 |
|
86 |
|
|
|
87 |
|
|
|
88 |
|
|
|
89 |
|
|
|
90 |
|
|
|
88 | weberror==0.10.3 | |
|
89 | webhelpers2==2.0 | |
|
90 | webhelpers==1.3 | |
|
91 | webob==1.7.4 | |
|
92 | whoosh==2.7.4 | |
|
91 | 93 | wsgiref==0.1.2 |
|
92 | 94 | zope.cachedescriptors==4.3.1 |
|
93 | 95 | zope.deprecation==4.3.0 |
|
94 | 96 | zope.event==4.3.0 |
|
95 |
zope.interface==4. |
|
|
97 | zope.interface==4.5.0 | |
|
96 | 98 | |
|
97 | 99 | |
|
98 | 100 | # IPYTHON RENDERING |
|
99 | 101 | # entrypoints backport, pypi version doesn't support egg installs |
|
100 | 102 | https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313#egg=entrypoints==0.2.2.rhodecode-upstream1 |
|
101 | 103 | nbconvert==5.3.1 |
|
102 |
bleach==2.1. |
|
|
104 | bleach==2.1.4 | |
|
103 | 105 | nbformat==4.4.0 |
|
104 | 106 | jupyter_client==5.0.0 |
|
105 | 107 | |
|
106 | 108 | ## cli tools |
|
107 |
alembic==0.9. |
|
|
109 | alembic==0.9.9 | |
|
108 | 110 | invoke==0.13.0 |
|
109 | 111 | bumpversion==0.5.3 |
|
110 | transifex-client==0.12.5 | |
|
111 | 112 | |
|
112 | 113 | ## http servers |
|
113 |
gevent==1. |
|
|
114 | gevent==1.3.5 | |
|
114 | 115 | greenlet==0.4.13 |
|
115 |
gunicorn==19. |
|
|
116 | gunicorn==19.9.0 | |
|
116 | 117 | waitress==1.1.0 |
|
117 | uWSGI==2.0.15 | |
|
118 | 118 | |
|
119 | 119 | ## debug |
|
120 |
ipdb==0.1 |
|
|
120 | ipdb==0.11.0 | |
|
121 | 121 | ipython==5.1.0 |
|
122 |
|
|
|
122 | cprofilev==1.0.7 | |
|
123 | 123 | bottle==0.12.13 |
|
124 | 124 | |
|
125 | 125 | ## rhodecode-tools, special case |
|
126 |
https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.1 |
|
|
126 | https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.16.0.tar.gz?md5=87f81286b49156c2ac36f1a1acfa2164#egg=rhodecode-tools==0.16.0 | |
|
127 | 127 | |
|
128 | 128 | ## appenlight |
|
129 | 129 | appenlight-client==0.6.25 |
@@ -1,15 +1,14 b'' | |||
|
1 | 1 | # test related requirements |
|
2 |
pytest==3. |
|
|
3 |
py==1.5. |
|
|
2 | pytest==3.6.0 | |
|
3 | py==1.5.3 | |
|
4 | 4 | pytest-cov==2.5.1 |
|
5 |
pytest-sugar==0.9. |
|
|
6 |
pytest-runner== |
|
|
7 |
pytest- |
|
|
8 | pytest-profiling==1.2.11 | |
|
5 | pytest-sugar==0.9.1 | |
|
6 | pytest-runner==4.2.0 | |
|
7 | pytest-profiling==1.3.0 | |
|
9 | 8 | gprof2dot==2017.9.19 |
|
10 |
pytest-timeout==1.2. |
|
|
9 | pytest-timeout==1.2.1 | |
|
11 | 10 | |
|
12 | 11 | mock==1.0.1 |
|
13 |
|
|
|
12 | webtest==2.0.29 | |
|
14 | 13 | cov-core==1.15.0 |
|
15 | 14 | coverage==3.7.1 |
@@ -51,7 +51,7 b' PYRAMID_SETTINGS = {}' | |||
|
51 | 51 | EXTENSIONS = {} |
|
52 | 52 | |
|
53 | 53 | __version__ = ('.'.join((str(each) for each in VERSION[:3]))) |
|
54 |
__dbversion__ = |
|
|
54 | __dbversion__ = 90 # defines current db version for migrations | |
|
55 | 55 | __platform__ = platform.system() |
|
56 | 56 | __license__ = 'AGPLv3, and Commercial License' |
|
57 | 57 | __author__ = 'RhodeCode GmbH' |
@@ -208,6 +208,7 b' def request_view(request):' | |||
|
208 | 208 | |
|
209 | 209 | # register our auth-user |
|
210 | 210 | request.rpc_user = auth_u |
|
211 | request.environ['rc_auth_user_id'] = auth_u.user_id | |
|
211 | 212 | |
|
212 | 213 | # now check if token is valid for API |
|
213 | 214 | auth_token = request.rpc_api_key |
@@ -119,6 +119,7 b' class TestCreatePullRequestApi(object):' | |||
|
119 | 119 | 'mandatory': True}, |
|
120 | 120 | ] |
|
121 | 121 | data['reviewers'] = reviewers |
|
122 | ||
|
122 | 123 | id_, params = build_data( |
|
123 | 124 | self.apikey_regular, 'create_pull_request', **data) |
|
124 | 125 | response = api_call(self.app, params) |
@@ -251,8 +252,9 b' class TestCreatePullRequestApi(object):' | |||
|
251 | 252 | id_, params = build_data( |
|
252 | 253 | self.apikey_regular, 'create_pull_request', **data) |
|
253 | 254 | response = api_call(self.app, params) |
|
254 |
expected_message = 'The specified |
|
|
255 | branch_name) | |
|
255 | expected_message = 'The specified value:{type}:`{name}` ' \ | |
|
256 | 'does not exist, or is not allowed.'.format(type='branch', | |
|
257 | name=branch_name) | |
|
256 | 258 | assert_error(id_, expected_message, given=response.body) |
|
257 | 259 | |
|
258 | 260 | @pytest.mark.backends("git", "hg") |
@@ -316,6 +318,7 b' class TestCreatePullRequestApi(object):' | |||
|
316 | 318 | self.commit_ids = backend.create_master_repo(commits) |
|
317 | 319 | self.source = backend.create_repo(heads=[source_head]) |
|
318 | 320 | self.target = backend.create_repo(heads=[target_head]) |
|
321 | ||
|
319 | 322 | data = { |
|
320 | 323 | 'source_repo': self.source.repo_name, |
|
321 | 324 | 'target_repo': self.target.repo_name, |
@@ -76,6 +76,8 b' class TestUpdateUser(object):' | |||
|
76 | 76 | 'user': ret |
|
77 | 77 | } |
|
78 | 78 | expected = ret |
|
79 | expected['user']['last_activity'] = response.json['result']['user'][ | |
|
80 | 'last_activity'] | |
|
79 | 81 | assert_ok(id_, expected, given=response.body) |
|
80 | 82 | |
|
81 | 83 | def test_api_update_user_by_user_id(self): |
@@ -91,6 +93,8 b' class TestUpdateUser(object):' | |||
|
91 | 93 | 'user': ret |
|
92 | 94 | } |
|
93 | 95 | expected = ret |
|
96 | expected['user']['last_activity'] = response.json['result']['user'][ | |
|
97 | 'last_activity'] | |
|
94 | 98 | assert_ok(id_, expected, given=response.body) |
|
95 | 99 | |
|
96 | 100 | def test_api_update_user_default_user(self): |
@@ -87,7 +87,8 b' class TestResolveRefOrError(object):' | |||
|
87 | 87 | ref = 'ancestor:ref' |
|
88 | 88 | with pytest.raises(JSONRPCError) as excinfo: |
|
89 | 89 | utils.resolve_ref_or_error(ref, repo) |
|
90 | expected_message = 'The specified ancestor `ref` does not exist' | |
|
90 | expected_message = ( | |
|
91 | 'The specified value:ancestor:`ref` does not exist, or is not allowed.') | |
|
91 | 92 | assert excinfo.value.message == expected_message |
|
92 | 93 | |
|
93 | 94 | def test_branch_is_not_found(self): |
@@ -99,7 +100,7 b' class TestResolveRefOrError(object):' | |||
|
99 | 100 | with pytest.raises(JSONRPCError) as excinfo: |
|
100 | 101 | utils.resolve_ref_or_error(ref, repo) |
|
101 | 102 | expected_message = ( |
|
102 |
'The specified branch |
|
|
103 | 'The specified value:branch:`non-existing-one` does not exist, or is not allowed.') | |
|
103 | 104 | assert excinfo.value.message == expected_message |
|
104 | 105 | |
|
105 | 106 | def test_bookmark_is_not_found(self): |
@@ -111,7 +112,7 b' class TestResolveRefOrError(object):' | |||
|
111 | 112 | with pytest.raises(JSONRPCError) as excinfo: |
|
112 | 113 | utils.resolve_ref_or_error(ref, repo) |
|
113 | 114 | expected_message = ( |
|
114 |
'The specified bookmark |
|
|
115 | 'The specified value:bookmark:`non-existing-one` does not exist, or is not allowed.') | |
|
115 | 116 | assert excinfo.value.message == expected_message |
|
116 | 117 | |
|
117 | 118 | @pytest.mark.parametrize("ref", ['ref', '12345', 'a:b:c:d']) |
@@ -403,7 +403,7 b' def resolve_ref_or_error(ref, repo):' | |||
|
403 | 403 | ref_hash = ref_hash or _get_ref_hash(repo, ref_type, ref_name) |
|
404 | 404 | except (KeyError, ValueError): |
|
405 | 405 | raise JSONRPCError( |
|
406 |
'The specified {type} |
|
|
406 | 'The specified value:{type}:`{name}` does not exist, or is not allowed.'.format( | |
|
407 | 407 | type=ref_type, name=ref_name)) |
|
408 | 408 | |
|
409 | 409 | return ':'.join([ref_type, ref_name, ref_hash]) |
@@ -431,7 +431,6 b' def _get_commit_dict(' | |||
|
431 | 431 | } |
|
432 | 432 | |
|
433 | 433 | |
|
434 | # TODO: mikhail: Think about moving this function to some library | |
|
435 | 434 | def _get_ref_hash(repo, type_, name): |
|
436 | 435 | vcs_repo = repo.scm_instance() |
|
437 | 436 | if type_ == 'branch' and vcs_repo.alias in ('hg', 'git'): |
@@ -284,7 +284,7 b' def merge_pull_request(' | |||
|
284 | 284 | raise JSONRPCError('userid is not the same as your user') |
|
285 | 285 | |
|
286 | 286 | check = MergeCheck.validate( |
|
287 | pull_request, user=apiuser, translator=request.translate) | |
|
287 | pull_request, auth_user=apiuser, translator=request.translate) | |
|
288 | 288 | merge_possible = not check.failed |
|
289 | 289 | |
|
290 | 290 | if not merge_possible: |
@@ -302,7 +302,7 b' def merge_pull_request(' | |||
|
302 | 302 | request.environ, repo_name=target_repo.repo_name, |
|
303 | 303 | username=apiuser.username, action='push', |
|
304 | 304 | scm=target_repo.repo_type) |
|
305 | merge_response = PullRequestModel().merge( | |
|
305 | merge_response = PullRequestModel().merge_repo( | |
|
306 | 306 | pull_request, apiuser, extras=extras) |
|
307 | 307 | if merge_response.executed: |
|
308 | 308 | PullRequestModel().close_pull_request( |
@@ -548,7 +548,8 b' def comment_pull_request(' | |||
|
548 | 548 | closing_pr=False, |
|
549 | 549 | renderer=renderer, |
|
550 | 550 | comment_type=comment_type, |
|
551 | resolves_comment_id=resolves_comment_id | |
|
551 | resolves_comment_id=resolves_comment_id, | |
|
552 | auth_user=apiuser | |
|
552 | 553 | ) |
|
553 | 554 | |
|
554 | 555 | if allowed_to_change_status and status: |
@@ -573,7 +574,8 b' def comment_pull_request(' | |||
|
573 | 574 | @jsonrpc_method() |
|
574 | 575 | def create_pull_request( |
|
575 | 576 | request, apiuser, source_repo, target_repo, source_ref, target_ref, |
|
576 |
title=Optional(''), description=Optional(''), |
|
|
577 | title=Optional(''), description=Optional(''), description_renderer=Optional(''), | |
|
578 | reviewers=Optional(None)): | |
|
577 | 579 | """ |
|
578 | 580 | Creates a new pull request. |
|
579 | 581 | |
@@ -598,6 +600,10 b' def create_pull_request(' | |||
|
598 | 600 | :type title: str |
|
599 | 601 | :param description: Set the pull request description. |
|
600 | 602 | :type description: Optional(str) |
|
603 | :type description_renderer: Optional(str) | |
|
604 | :param description_renderer: Set pull request renderer for the description. | |
|
605 | It should be 'rst', 'markdown' or 'plain'. If not give default | |
|
606 | system renderer will be used | |
|
601 | 607 | :param reviewers: Set the new pull request reviewers list. |
|
602 | 608 | Reviewer defined by review rules will be added automatically to the |
|
603 | 609 | defined list. |
@@ -607,7 +613,7 b' def create_pull_request(' | |||
|
607 | 613 | [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}] |
|
608 | 614 | """ |
|
609 | 615 | |
|
610 |
source_db_repo = |
|
|
616 | source_db_repo = get_repo_or_error(source_repo) | |
|
611 | 617 | target_db_repo = get_repo_or_error(target_repo) |
|
612 | 618 | if not has_superadmin_permission(apiuser): |
|
613 | 619 | _perms = ('repository.admin', 'repository.write', 'repository.read',) |
@@ -678,7 +684,11 b' def create_pull_request(' | |||
|
678 | 684 | source_ref=title_source_ref, |
|
679 | 685 | target=target_repo |
|
680 | 686 | ) |
|
687 | # fetch renderer, if set fallback to plain in case of PR | |
|
688 | rc_config = SettingsModel().get_all_settings() | |
|
689 | default_system_renderer = rc_config.get('rhodecode_markup_renderer', 'plain') | |
|
681 | 690 | description = Optional.extract(description) |
|
691 | description_renderer = Optional.extract(description_renderer) or default_system_renderer | |
|
682 | 692 | |
|
683 | 693 | pull_request = PullRequestModel().create( |
|
684 | 694 | created_by=apiuser.user_id, |
@@ -690,7 +700,9 b' def create_pull_request(' | |||
|
690 | 700 | reviewers=reviewers, |
|
691 | 701 | title=title, |
|
692 | 702 | description=description, |
|
703 | description_renderer=description_renderer, | |
|
693 | 704 | reviewer_data=reviewer_rules, |
|
705 | auth_user=apiuser | |
|
694 | 706 | ) |
|
695 | 707 | |
|
696 | 708 | Session().commit() |
@@ -704,8 +716,8 b' def create_pull_request(' | |||
|
704 | 716 | @jsonrpc_method() |
|
705 | 717 | def update_pull_request( |
|
706 | 718 | request, apiuser, pullrequestid, repoid=Optional(None), |
|
707 |
title=Optional(''), description=Optional(''), |
|
|
708 | update_commits=Optional(None)): | |
|
719 | title=Optional(''), description=Optional(''), description_renderer=Optional(''), | |
|
720 | reviewers=Optional(None), update_commits=Optional(None)): | |
|
709 | 721 | """ |
|
710 | 722 | Updates a pull request. |
|
711 | 723 | |
@@ -719,6 +731,9 b' def update_pull_request(' | |||
|
719 | 731 | :type title: str |
|
720 | 732 | :param description: Update pull request description. |
|
721 | 733 | :type description: Optional(str) |
|
734 | :type description_renderer: Optional(str) | |
|
735 | :param description_renderer: Update pull request renderer for the description. | |
|
736 | It should be 'rst', 'markdown' or 'plain' | |
|
722 | 737 | :param reviewers: Update pull request reviewers list with new value. |
|
723 | 738 | :type reviewers: Optional(list) |
|
724 | 739 | Accepts username strings or objects of the format: |
@@ -801,10 +816,15 b' def update_pull_request(' | |||
|
801 | 816 | |
|
802 | 817 | title = Optional.extract(title) |
|
803 | 818 | description = Optional.extract(description) |
|
819 | description_renderer = Optional.extract(description_renderer) | |
|
820 | ||
|
804 | 821 | if title or description: |
|
805 | 822 | PullRequestModel().edit( |
|
806 |
pull_request, |
|
|
807 |
|
|
|
823 | pull_request, | |
|
824 | title or pull_request.title, | |
|
825 | description or pull_request.description, | |
|
826 | description_renderer or pull_request.description_renderer, | |
|
827 | apiuser) | |
|
808 | 828 | Session().commit() |
|
809 | 829 | |
|
810 | 830 | commit_changes = {"added": [], "common": [], "removed": []} |
@@ -1469,7 +1469,8 b' def comment_commit(' | |||
|
1469 | 1469 | status_change_type=status, |
|
1470 | 1470 | renderer=renderer, |
|
1471 | 1471 | comment_type=comment_type, |
|
1472 | resolves_comment_id=resolves_comment_id | |
|
1472 | resolves_comment_id=resolves_comment_id, | |
|
1473 | auth_user=apiuser | |
|
1473 | 1474 | ) |
|
1474 | 1475 | if status: |
|
1475 | 1476 | # also do a status change |
@@ -461,31 +461,38 b' class RepoRoutePredicate(object):' | |||
|
461 | 461 | phash = text |
|
462 | 462 | |
|
463 | 463 | def __call__(self, info, request): |
|
464 | ||
|
465 | 464 | if hasattr(request, 'vcs_call'): |
|
466 | 465 | # skip vcs calls |
|
467 | 466 | return |
|
468 | 467 | |
|
469 | 468 | repo_name = info['match']['repo_name'] |
|
470 | 469 | repo_model = repo.RepoModel() |
|
471 | by_name_match = repo_model.get_by_repo_name(repo_name, cache=True) | |
|
470 | ||
|
471 | by_name_match = repo_model.get_by_repo_name(repo_name, cache=False) | |
|
472 | 472 | |
|
473 | def redirect_if_creating(db_repo): | |
|
473 | def redirect_if_creating(route_info, db_repo): | |
|
474 | skip_views = ['edit_repo_advanced_delete'] | |
|
475 | route = route_info['route'] | |
|
476 | # we should skip delete view so we can actually "remove" repositories | |
|
477 | # if they get stuck in creating state. | |
|
478 | if route.name in skip_views: | |
|
479 | return | |
|
480 | ||
|
474 | 481 | if db_repo.repo_state in [repo.Repository.STATE_PENDING]: |
|
475 | raise HTTPFound( | |
|
476 |
|
|
|
477 | repo_name=db_repo.repo_name)) | |
|
482 | repo_creating_url = request.route_path( | |
|
483 | 'repo_creating', repo_name=db_repo.repo_name) | |
|
484 | raise HTTPFound(repo_creating_url) | |
|
478 | 485 | |
|
479 | 486 | if by_name_match: |
|
480 | 487 | # register this as request object we can re-use later |
|
481 | 488 | request.db_repo = by_name_match |
|
482 | redirect_if_creating(by_name_match) | |
|
489 | redirect_if_creating(info, by_name_match) | |
|
483 | 490 | return True |
|
484 | 491 | |
|
485 | 492 | by_id_match = repo_model.get_repo_by_id(repo_name) |
|
486 | 493 | if by_id_match: |
|
487 | 494 | request.db_repo = by_id_match |
|
488 | redirect_if_creating(by_id_match) | |
|
495 | redirect_if_creating(info, by_id_match) | |
|
489 | 496 | return True |
|
490 | 497 | |
|
491 | 498 | return False |
@@ -516,7 +523,7 b' class RepoTypeRoutePredicate(object):' | |||
|
516 | 523 | else: |
|
517 | 524 | log.warning('Current view is not supported for repo type:%s', |
|
518 | 525 | rhodecode_db_repo.repo_type) |
|
519 | # | |
|
526 | ||
|
520 | 527 | # h.flash(h.literal( |
|
521 | 528 | # _('Action not supported for %s.' % rhodecode_repo.alias)), |
|
522 | 529 | # category='warning') |
@@ -542,8 +549,7 b' class RepoGroupRoutePredicate(object):' | |||
|
542 | 549 | |
|
543 | 550 | repo_group_name = info['match']['repo_group_name'] |
|
544 | 551 | repo_group_model = repo_group.RepoGroupModel() |
|
545 | by_name_match = repo_group_model.get_by_group_name( | |
|
546 | repo_group_name, cache=True) | |
|
552 | by_name_match = repo_group_model.get_by_group_name(repo_group_name, cache=False) | |
|
547 | 553 | |
|
548 | 554 | if by_name_match: |
|
549 | 555 | # register this as request object we can re-use later |
@@ -569,8 +575,7 b' class UserGroupRoutePredicate(object):' | |||
|
569 | 575 | |
|
570 | 576 | user_group_id = info['match']['user_group_id'] |
|
571 | 577 | user_group_model = user_group.UserGroup() |
|
572 | by_id_match = user_group_model.get( | |
|
573 | user_group_id, cache=True) | |
|
578 | by_id_match = user_group_model.get(user_group_id, cache=False) | |
|
574 | 579 | |
|
575 | 580 | if by_id_match: |
|
576 | 581 | # register this as request object we can re-use later |
@@ -596,8 +601,7 b' class UserRoutePredicateBase(object):' | |||
|
596 | 601 | |
|
597 | 602 | user_id = info['match']['user_id'] |
|
598 | 603 | user_model = user.User() |
|
599 | by_id_match = user_model.get( | |
|
600 | user_id, cache=True) | |
|
604 | by_id_match = user_model.get(user_id, cache=False) | |
|
601 | 605 | |
|
602 | 606 | if by_id_match: |
|
603 | 607 | # register this as request object we can re-use later |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full 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/memory_lru_debug.py to rhodecode/lib/memory_lru_dict.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: file renamed from rhodecode/tests/controllers/test_utils.py to rhodecode/tests/other/test_views_utils.py |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full 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 | |
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