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 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
@@ -1,5 +1,5 b'' | |||||
1 | [bumpversion] |
|
1 | [bumpversion] | |
2 |
current_version = 4.1 |
|
2 | current_version = 4.13.0 | |
3 | message = release: Bump version {current_version} to {new_version} |
|
3 | message = release: Bump version {current_version} to {new_version} | |
4 |
|
4 | |||
5 | [bumpversion:file:rhodecode/VERSION] |
|
5 | [bumpversion:file:rhodecode/VERSION] |
@@ -5,25 +5,20 b' done = false' | |||||
5 | done = true |
|
5 | done = true | |
6 |
|
6 | |||
7 | [task:rc_tools_pinned] |
|
7 | [task:rc_tools_pinned] | |
8 | done = true |
|
|||
9 |
|
8 | |||
10 | [task:fixes_on_stable] |
|
9 | [task:fixes_on_stable] | |
11 | done = true |
|
|||
12 |
|
10 | |||
13 | [task:pip2nix_generated] |
|
11 | [task:pip2nix_generated] | |
14 | done = true |
|
|||
15 |
|
12 | |||
16 | [task:changelog_updated] |
|
13 | [task:changelog_updated] | |
17 | done = true |
|
|||
18 |
|
14 | |||
19 | [task:generate_api_docs] |
|
15 | [task:generate_api_docs] | |
20 | done = true |
|
16 | ||
|
17 | [task:updated_translation] | |||
21 |
|
18 | |||
22 | [release] |
|
19 | [release] | |
23 |
state = |
|
20 | state = in_progress | |
24 |
version = 4.1 |
|
21 | version = 4.13.0 | |
25 |
|
||||
26 | [task:updated_translation] |
|
|||
27 |
|
22 | |||
28 | [task:generate_js_routes] |
|
23 | [task:generate_js_routes] | |
29 |
|
24 |
@@ -26,6 +26,8 b' recursive-include rhodecode *.mako' | |||||
26 | # 502 page |
|
26 | # 502 page | |
27 | include rhodecode/public/502.html |
|
27 | include rhodecode/public/502.html | |
28 |
|
28 | |||
|
29 | # robots | |||
|
30 | include rhodecode/public/robots.txt | |||
29 |
|
31 | |||
30 | # images, css |
|
32 | # images, css | |
31 | include rhodecode/public/css/*.css |
|
33 | include rhodecode/public/css/*.css |
@@ -7,8 +7,9 b' About' | |||||
7 |
|
7 | |||
8 | ``RhodeCode`` is a fast and powerful management tool for Mercurial_ and GIT_ |
|
8 | ``RhodeCode`` is a fast and powerful management tool for Mercurial_ and GIT_ | |
9 | and Subversion_ with a built in push/pull server, full text search, |
|
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 | has a few unique features like: |
|
11 | has a few unique features like: | |
|
12 | ||||
12 |
|
|
13 | - plugable architecture | |
13 | - advanced permission system with IP restrictions |
|
14 | - advanced permission system with IP restrictions | |
14 | - rich set of authentication plugins including LDAP, |
|
15 | - rich set of authentication plugins including LDAP, | |
@@ -78,10 +79,9 b' Listed bellow are various support resour' | |||||
78 |
|
79 | |||
79 | - Official issue tracker `RhodeCode Issue tracker <https://issues.rhodecode.com>`_ |
|
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 | - Search our community portal `Community portal <https://community.rhodecode.com>`_ | |
84 | or use http://webchat.freenode.net/?channels=rhodecode for web access to irc. |
|
|||
85 |
|
85 | |||
86 | - You can also follow RhodeCode on twitter **@RhodeCode** where we often post |
|
86 | - You can also follow RhodeCode on twitter **@RhodeCode** where we often post | |
87 | news and other interesting stuff about RhodeCode. |
|
87 | news and other interesting stuff about RhodeCode. |
@@ -3,15 +3,15 b'' | |||||
3 | "description": "User interface for elements for rhodecode", |
|
3 | "description": "User interface for elements for rhodecode", | |
4 | "main": "index.html", |
|
4 | "main": "index.html", | |
5 | "dependencies": { |
|
5 | "dependencies": { | |
6 |
"webcomponentsjs": "^ |
|
6 | "webcomponentsjs": "^1.2.3", | |
7 |
"polymer": "Polymer/polymer#^ |
|
7 | "polymer": "Polymer/polymer#^2.6.0", | |
8 |
"paper-button": "PolymerElements/paper-button#^ |
|
8 | "paper-button": "PolymerElements/paper-button#^2.1.2", | |
9 |
"paper-spinner": "PolymerElements/paper-spinner#^ |
|
9 | "paper-spinner": "PolymerElements/paper-spinner#^2.1.0", | |
10 |
"paper-tooltip": "PolymerElements/paper-tooltip#^1.1 |
|
10 | "paper-tooltip": "PolymerElements/paper-tooltip#^2.1.1", | |
11 |
"paper-toast": "PolymerElements/paper-toast#^ |
|
11 | "paper-toast": "PolymerElements/paper-toast#^2.1.2", | |
12 |
"paper-toggle-button": "PolymerElements/paper-toggle-button#^ |
|
12 | "paper-toggle-button": "PolymerElements/paper-toggle-button#^2.1.1", | |
13 |
"iron-ajax": "PolymerElements/iron-ajax#^ |
|
13 | "iron-ajax": "PolymerElements/iron-ajax#^2.1.3", | |
14 |
"iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^ |
|
14 | "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^2.2.0", | |
15 |
"iron-a11y-keys": "PolymerElements/iron-a11y-keys#^ |
|
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 | ## RHODECODE COMMUNITY EDITION CONFIGURATION ## |
|
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 | [DEFAULT] |
|
7 | [DEFAULT] | |
@@ -46,10 +45,9 b' debug = true' | |||||
46 | host = 127.0.0.1 |
|
45 | host = 127.0.0.1 | |
47 | port = 5000 |
|
46 | port = 5000 | |
48 |
|
47 | |||
49 | ################################## |
|
48 | ########################################################### | |
50 |
## |
|
49 | ## WAITRESS WSGI SERVER - Recommended for Development #### | |
51 | ## Recommended for Development ## |
|
50 | ########################################################### | |
52 | ################################## |
|
|||
53 |
|
51 | |||
54 | use = egg:waitress#main |
|
52 | use = egg:waitress#main | |
55 | ## number of worker threads |
|
53 | ## number of worker threads | |
@@ -67,15 +65,15 b' asyncore_use_poll = true' | |||||
67 | ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini |
|
65 | ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini | |
68 |
|
66 | |||
69 | #use = egg:gunicorn#main |
|
67 | #use = egg:gunicorn#main | |
70 |
## Sets the number of process workers. |
|
68 | ## Sets the number of process workers. More workers means more concurent connections | |
71 | ## when this option is set to more than one worker, recommended |
|
69 | ## RhodeCode can handle at the same time. Each additional worker also it increases | |
72 | ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers |
|
70 | ## memory usage as each has it's own set of caches. | |
73 | ## The `instance_id = *` must be set in the [app:main] section below |
|
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 | #workers = 2 |
|
75 | #workers = 2 | |
75 | ## number of threads for each of the worker, must be set to 1 for gevent |
|
76 | ## process name visible in process list | |
76 | ## generally recommended to be at 1 |
|
|||
77 | #threads = 1 |
|
|||
78 | ## process name |
|
|||
79 | #proc_name = rhodecode |
|
77 | #proc_name = rhodecode | |
80 | ## type of worker class, one of sync, gevent |
|
78 | ## type of worker class, one of sync, gevent | |
81 | ## recommended for bigger setup is using of of other than sync one |
|
79 | ## recommended for bigger setup is using of of other than sync one | |
@@ -103,6 +101,11 b' use = egg:PasteDeploy#prefix' | |||||
103 | prefix = / |
|
101 | prefix = / | |
104 |
|
102 | |||
105 | [app:main] |
|
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 | use = egg:rhodecode-enterprise-ce |
|
109 | use = egg:rhodecode-enterprise-ce | |
107 |
|
110 | |||
108 | ## enable proxy prefix middleware, defined above |
|
111 | ## enable proxy prefix middleware, defined above | |
@@ -148,12 +151,12 b' gzip_responses = false' | |||||
148 | ## autogenerate javascript routes file on startup |
|
151 | ## autogenerate javascript routes file on startup | |
149 | generate_js_files = false |
|
152 | generate_js_files = false | |
150 |
|
153 | |||
151 | ## Optional Languages |
|
154 | ## System global default language. | |
152 | ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh |
|
155 | ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh | |
153 | lang = en |
|
156 | lang = en | |
154 |
|
157 | |||
155 |
## |
|
158 | ## Perform a full repository scan and import on each server start. | |
156 | ## set to false after first startup, to allow faster server restarts. |
|
159 | ## Settings this to true could lead to very long startup time. | |
157 | startup.import_repos = false |
|
160 | startup.import_repos = false | |
158 |
|
161 | |||
159 | ## Uncomment and set this path to use archive download cache. |
|
162 | ## Uncomment and set this path to use archive download cache. | |
@@ -167,23 +170,23 b' startup.import_repos = false' | |||||
167 | ## SSH calls. Set this for events to receive proper url for SSH calls. |
|
170 | ## SSH calls. Set this for events to receive proper url for SSH calls. | |
168 | app.base_url = http://rhodecode.local |
|
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 | app_instance_uuid = rc-production |
|
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 | ## commit, or pull request exceeds this limit this diff will be displayed |
|
177 | ## commit, or pull request exceeds this limit this diff will be displayed | |
175 | ## partially. E.g 512000 == 512Kb |
|
178 | ## partially. E.g 512000 == 512Kb | |
176 | cut_off_limit_diff = 512000 |
|
179 | cut_off_limit_diff = 512000 | |
177 |
|
180 | |||
178 |
## |
|
181 | ## Cut off limit for large files inside diffs (size in bytes). Each individual | |
179 | ## file inside diff which exceeds this limit will be displayed partially. |
|
182 | ## file inside diff which exceeds this limit will be displayed partially. | |
180 | ## E.g 128000 == 128Kb |
|
183 | ## E.g 128000 == 128Kb | |
181 | cut_off_limit_file = 128000 |
|
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 | vcs_full_cache = true |
|
187 | vcs_full_cache = true | |
185 |
|
188 | |||
186 |
## |
|
189 | ## Force https in RhodeCode, fixes https redirects, assumes it's always https. | |
187 | ## Normally this is controlled by proper http flags sent from http server |
|
190 | ## Normally this is controlled by proper http flags sent from http server | |
188 | force_https = false |
|
191 | force_https = false | |
189 |
|
192 | |||
@@ -230,7 +233,7 b' gist_alias_url =' | |||||
230 | # GistView:* |
|
233 | # GistView:* | |
231 | api_access_controllers_whitelist = |
|
234 | api_access_controllers_whitelist = | |
232 |
|
235 | |||
233 |
## |
|
236 | ## Default encoding used to convert from and to unicode | |
234 | ## can be also a comma separated list of encoding in case of mixed encodings |
|
237 | ## can be also a comma separated list of encoding in case of mixed encodings | |
235 | default_encoding = UTF-8 |
|
238 | default_encoding = UTF-8 | |
236 |
|
239 | |||
@@ -277,8 +280,8 b' allow_repo_location_change = true' | |||||
277 | ## allows to setup custom hooks in settings page |
|
280 | ## allows to setup custom hooks in settings page | |
278 | allow_custom_hooks_settings = true |
|
281 | allow_custom_hooks_settings = true | |
279 |
|
282 | |||
280 | ## generated license token, goto license page in RhodeCode settings to obtain |
|
283 | ## Generated license token required for EE edition license. | |
281 | ## new token |
|
284 | ## New generated token value can be found in Admin > settings > license page. | |
282 | license_token = |
|
285 | license_token = | |
283 |
|
286 | |||
284 | ## supervisor connection uri, for managing supervisor and logs. |
|
287 | ## supervisor connection uri, for managing supervisor and logs. | |
@@ -308,65 +311,66 b' celery.max_tasks_per_child = 100' | |||||
308 | ## tasks will never be sent to the queue, but executed locally instead. |
|
311 | ## tasks will never be sent to the queue, but executed locally instead. | |
309 | celery.task_always_eager = false |
|
312 | celery.task_always_eager = false | |
310 |
|
313 | |||
311 | #################################### |
|
314 | ##################################### | |
312 |
### |
|
315 | ### DOGPILE CACHE #### | |
313 | #################################### |
|
316 | ##################################### | |
314 |
# |
|
317 | ## Default cache dir for caches. Putting this into a ramdisk | |
315 |
## can boost performance, eg. |
|
318 | ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require | |
|
319 | ## large amount of space | |||
316 | cache_dir = %(here)s/data |
|
320 | cache_dir = %(here)s/data | |
317 |
|
321 | |||
318 | ## locking and default file storage for Beaker. Putting this into a ramdisk |
|
322 | ## `cache_perms` cache settings for permission tree, auth TTL. | |
319 | ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data |
|
323 | rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace | |
320 | beaker.cache.data_dir = %(here)s/data/cache/beaker_data |
|
324 | rc_cache.cache_perms.expiration_time = 300 | |
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 |
|
|||
324 |
|
325 | |||
325 | beaker.cache.super_short_term.type = memory |
|
326 | ## alternative `cache_perms` redis backend with distributed lock | |
326 | beaker.cache.super_short_term.expire = 10 |
|
327 | #rc_cache.cache_perms.backend = dogpile.cache.rc.redis | |
327 | beaker.cache.super_short_term.key_length = 256 |
|
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 |
|
337 | ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS | |
330 | beaker.cache.short_term.expire = 60 |
|
338 | rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace | |
331 | beaker.cache.short_term.key_length = 256 |
|
339 | rc_cache.cache_repo.expiration_time = 2592000 | |
332 |
|
||||
333 | beaker.cache.long_term.type = memory |
|
|||
334 | beaker.cache.long_term.expire = 36000 |
|
|||
335 | beaker.cache.long_term.key_length = 256 |
|
|||
336 |
|
340 | |||
337 | beaker.cache.sql_cache_short.type = memory |
|
341 | ## alternative `cache_repo` redis backend with distributed lock | |
338 | beaker.cache.sql_cache_short.expire = 10 |
|
342 | #rc_cache.cache_repo.backend = dogpile.cache.rc.redis | |
339 | beaker.cache.sql_cache_short.key_length = 256 |
|
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 |
|
352 | ## cache settings for SQL queries, this needs to use memory type backend | |
342 | ## using multi-node or multi-worker setup |
|
353 | rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru | |
343 | #beaker.cache.auth_plugins.type = ext:database |
|
354 | rc_cache.sql_cache_short.expiration_time = 30 | |
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 |
|
|||
350 |
|
355 | |||
351 | beaker.cache.repo_cache_long.type = memorylru_base |
|
356 | ## `cache_repo_longterm` cache for repo object instances, this needs to use memory | |
352 | beaker.cache.repo_cache_long.max_items = 4096 |
|
357 | ## type backend as the objects kept are not pickle serializable | |
353 | beaker.cache.repo_cache_long.expire = 2592000 |
|
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 | ### BEAKER SESSION #### |
|
367 | ### BEAKER SESSION #### | |
364 | #################################### |
|
368 | #################################### | |
365 |
|
369 | |||
366 | ## .session.type is type of storage options for the session, current allowed |
|
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 | beaker.session.type = file |
|
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 | ## db based session, fast, and allows easy management over logged in users |
|
375 | ## db based session, fast, and allows easy management over logged in users | |
372 | #beaker.session.type = ext:database |
|
376 | #beaker.session.type = ext:database | |
@@ -502,10 +506,7 b' appenlight.log_namespace_blacklist =' | |||||
502 | ################################################################################ |
|
506 | ################################################################################ | |
503 | #set debug = false |
|
507 | #set debug = false | |
504 |
|
508 | |||
505 |
|
509 | # enable debug style page | ||
506 | ############## |
|
|||
507 | ## STYLING ## |
|
|||
508 | ############## |
|
|||
509 | debug_style = true |
|
510 | debug_style = true | |
510 |
|
511 | |||
511 | ########################################### |
|
512 | ########################################### | |
@@ -514,6 +515,9 b' debug_style = true' | |||||
514 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
515 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 | |
515 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
516 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode | |
516 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode |
|
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 | sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
521 | sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 | |
518 |
|
522 | |||
519 | # see sqlalchemy docs for other advanced settings |
|
523 | # see sqlalchemy docs for other advanced settings | |
@@ -533,6 +537,9 b' sqlalchemy.db1.convert_unicode = true' | |||||
533 | ## which defaults to five. |
|
537 | ## which defaults to five. | |
534 | #sqlalchemy.db1.max_overflow = 10 |
|
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 | ### VCS CONFIG ### |
|
545 | ### VCS CONFIG ### | |
@@ -547,15 +554,18 b' vcs.server.protocol = http' | |||||
547 |
|
554 | |||
548 | ## Push/Pull operations protocol, available options are: |
|
555 | ## Push/Pull operations protocol, available options are: | |
549 | ## `http` - use http-rpc backend (default) |
|
556 | ## `http` - use http-rpc backend (default) | |
550 | ## |
|
|||
551 | vcs.scm_app_implementation = http |
|
557 | vcs.scm_app_implementation = http | |
552 |
|
558 | |||
553 | ## Push/Pull operations hooks protocol, available options are: |
|
559 | ## Push/Pull operations hooks protocol, available options are: | |
554 | ## `http` - use http-rpc backend (default) |
|
560 | ## `http` - use http-rpc backend (default) | |
555 | vcs.hooks.protocol = http |
|
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 | vcs.server.log_level = debug |
|
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 | vcs.start_server = false |
|
569 | vcs.start_server = false | |
560 |
|
570 | |||
561 | ## List of enabled VCS backends, available options are: |
|
571 | ## List of enabled VCS backends, available options are: | |
@@ -638,7 +648,7 b' custom.conf = 1' | |||||
638 | ### LOGGING CONFIGURATION #### |
|
648 | ### LOGGING CONFIGURATION #### | |
639 | ################################ |
|
649 | ################################ | |
640 | [loggers] |
|
650 | [loggers] | |
641 |
keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper |
|
651 | keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper | |
642 |
|
652 | |||
643 | [handlers] |
|
653 | [handlers] | |
644 | keys = console, console_sql |
|
654 | keys = console, console_sql | |
@@ -694,9 +704,12 b' level = DEBUG' | |||||
694 | formatter = color_formatter |
|
704 | formatter = color_formatter | |
695 |
|
705 | |||
696 | [handler_console_sql] |
|
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 | class = StreamHandler |
|
710 | class = StreamHandler | |
698 | args = (sys.stderr, ) |
|
711 | args = (sys.stderr, ) | |
699 |
level = |
|
712 | level = WARN | |
700 | formatter = color_formatter_sql |
|
713 | formatter = color_formatter_sql | |
701 |
|
714 | |||
702 | ################ |
|
715 | ################ | |
@@ -715,5 +728,5 b' datefmt = %Y-%m-%d %H:%M:%S' | |||||
715 |
|
728 | |||
716 | [formatter_color_formatter_sql] |
|
729 | [formatter_color_formatter_sql] | |
717 | class = rhodecode.lib.logging_formatter.ColorFormatterSql |
|
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 | datefmt = %Y-%m-%d %H:%M:%S |
|
732 | datefmt = %Y-%m-%d %H:%M:%S |
@@ -2,7 +2,6 b'' | |||||
2 |
|
2 | |||
3 | ################################################################################ |
|
3 | ################################################################################ | |
4 | ## RHODECODE COMMUNITY EDITION CONFIGURATION ## |
|
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 | [DEFAULT] |
|
7 | [DEFAULT] | |
@@ -46,10 +45,9 b' debug = true' | |||||
46 | host = 127.0.0.1 |
|
45 | host = 127.0.0.1 | |
47 | port = 5000 |
|
46 | port = 5000 | |
48 |
|
47 | |||
49 | ################################## |
|
48 | ########################################################### | |
50 |
## |
|
49 | ## WAITRESS WSGI SERVER - Recommended for Development #### | |
51 | ## Recommended for Development ## |
|
50 | ########################################################### | |
52 | ################################## |
|
|||
53 |
|
51 | |||
54 | #use = egg:waitress#main |
|
52 | #use = egg:waitress#main | |
55 | ## number of worker threads |
|
53 | ## number of worker threads | |
@@ -67,21 +65,21 b' port = 5000' | |||||
67 | ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini |
|
65 | ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini | |
68 |
|
66 | |||
69 | use = egg:gunicorn#main |
|
67 | use = egg:gunicorn#main | |
70 |
## Sets the number of process workers. |
|
68 | ## Sets the number of process workers. More workers means more concurent connections | |
71 | ## when this option is set to more than one worker, recommended |
|
69 | ## RhodeCode can handle at the same time. Each additional worker also it increases | |
72 | ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers |
|
70 | ## memory usage as each has it's own set of caches. | |
73 | ## The `instance_id = *` must be set in the [app:main] section below |
|
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 | workers = 2 |
|
75 | workers = 2 | |
75 | ## number of threads for each of the worker, must be set to 1 for gevent |
|
76 | ## process name visible in process list | |
76 | ## generally recommended to be at 1 |
|
|||
77 | #threads = 1 |
|
|||
78 | ## process name |
|
|||
79 | proc_name = rhodecode |
|
77 | proc_name = rhodecode | |
80 | ## type of worker class, one of sync, gevent |
|
78 | ## type of worker class, one of sync, gevent | |
81 | ## recommended for bigger setup is using of of other than sync one |
|
79 | ## recommended for bigger setup is using of of other than sync one | |
82 | worker_class = gevent |
|
80 | worker_class = gevent | |
83 | ## The maximum number of simultaneous clients. Valid only for Gevent |
|
81 | ## The maximum number of simultaneous clients. Valid only for Gevent | |
84 |
|
|
82 | worker_connections = 10 | |
85 | ## max number of requests that worker will handle before being gracefully |
|
83 | ## max number of requests that worker will handle before being gracefully | |
86 | ## restarted, could prevent memory leaks |
|
84 | ## restarted, could prevent memory leaks | |
87 | max_requests = 1000 |
|
85 | max_requests = 1000 | |
@@ -103,6 +101,11 b' use = egg:PasteDeploy#prefix' | |||||
103 | prefix = / |
|
101 | prefix = / | |
104 |
|
102 | |||
105 | [app:main] |
|
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 | use = egg:rhodecode-enterprise-ce |
|
109 | use = egg:rhodecode-enterprise-ce | |
107 |
|
110 | |||
108 | ## enable proxy prefix middleware, defined above |
|
111 | ## enable proxy prefix middleware, defined above | |
@@ -123,12 +126,12 b' gzip_responses = false' | |||||
123 | ## autogenerate javascript routes file on startup |
|
126 | ## autogenerate javascript routes file on startup | |
124 | generate_js_files = false |
|
127 | generate_js_files = false | |
125 |
|
128 | |||
126 | ## Optional Languages |
|
129 | ## System global default language. | |
127 | ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh |
|
130 | ## All available languages: en(default), be, de, es, fr, it, ja, pl, pt, ru, zh | |
128 | lang = en |
|
131 | lang = en | |
129 |
|
132 | |||
130 |
## |
|
133 | ## Perform a full repository scan and import on each server start. | |
131 | ## set to false after first startup, to allow faster server restarts. |
|
134 | ## Settings this to true could lead to very long startup time. | |
132 | startup.import_repos = false |
|
135 | startup.import_repos = false | |
133 |
|
136 | |||
134 | ## Uncomment and set this path to use archive download cache. |
|
137 | ## Uncomment and set this path to use archive download cache. | |
@@ -142,23 +145,23 b' startup.import_repos = false' | |||||
142 | ## SSH calls. Set this for events to receive proper url for SSH calls. |
|
145 | ## SSH calls. Set this for events to receive proper url for SSH calls. | |
143 | app.base_url = http://rhodecode.local |
|
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 | app_instance_uuid = rc-production |
|
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 | ## commit, or pull request exceeds this limit this diff will be displayed |
|
152 | ## commit, or pull request exceeds this limit this diff will be displayed | |
150 | ## partially. E.g 512000 == 512Kb |
|
153 | ## partially. E.g 512000 == 512Kb | |
151 | cut_off_limit_diff = 512000 |
|
154 | cut_off_limit_diff = 512000 | |
152 |
|
155 | |||
153 |
## |
|
156 | ## Cut off limit for large files inside diffs (size in bytes). Each individual | |
154 | ## file inside diff which exceeds this limit will be displayed partially. |
|
157 | ## file inside diff which exceeds this limit will be displayed partially. | |
155 | ## E.g 128000 == 128Kb |
|
158 | ## E.g 128000 == 128Kb | |
156 | cut_off_limit_file = 128000 |
|
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 | vcs_full_cache = true |
|
162 | vcs_full_cache = true | |
160 |
|
163 | |||
161 |
## |
|
164 | ## Force https in RhodeCode, fixes https redirects, assumes it's always https. | |
162 | ## Normally this is controlled by proper http flags sent from http server |
|
165 | ## Normally this is controlled by proper http flags sent from http server | |
163 | force_https = false |
|
166 | force_https = false | |
164 |
|
167 | |||
@@ -205,7 +208,7 b' gist_alias_url =' | |||||
205 | # GistView:* |
|
208 | # GistView:* | |
206 | api_access_controllers_whitelist = |
|
209 | api_access_controllers_whitelist = | |
207 |
|
210 | |||
208 |
## |
|
211 | ## Default encoding used to convert from and to unicode | |
209 | ## can be also a comma separated list of encoding in case of mixed encodings |
|
212 | ## can be also a comma separated list of encoding in case of mixed encodings | |
210 | default_encoding = UTF-8 |
|
213 | default_encoding = UTF-8 | |
211 |
|
214 | |||
@@ -252,8 +255,8 b' allow_repo_location_change = true' | |||||
252 | ## allows to setup custom hooks in settings page |
|
255 | ## allows to setup custom hooks in settings page | |
253 | allow_custom_hooks_settings = true |
|
256 | allow_custom_hooks_settings = true | |
254 |
|
257 | |||
255 | ## generated license token, goto license page in RhodeCode settings to obtain |
|
258 | ## Generated license token required for EE edition license. | |
256 | ## new token |
|
259 | ## New generated token value can be found in Admin > settings > license page. | |
257 | license_token = |
|
260 | license_token = | |
258 |
|
261 | |||
259 | ## supervisor connection uri, for managing supervisor and logs. |
|
262 | ## supervisor connection uri, for managing supervisor and logs. | |
@@ -283,65 +286,66 b' celery.max_tasks_per_child = 100' | |||||
283 | ## tasks will never be sent to the queue, but executed locally instead. |
|
286 | ## tasks will never be sent to the queue, but executed locally instead. | |
284 | celery.task_always_eager = false |
|
287 | celery.task_always_eager = false | |
285 |
|
288 | |||
286 | #################################### |
|
289 | ##################################### | |
287 |
### |
|
290 | ### DOGPILE CACHE #### | |
288 | #################################### |
|
291 | ##################################### | |
289 |
# |
|
292 | ## Default cache dir for caches. Putting this into a ramdisk | |
290 |
## can boost performance, eg. |
|
293 | ## can boost performance, eg. /tmpfs/data_ramdisk, however this directory might require | |
|
294 | ## large amount of space | |||
291 | cache_dir = %(here)s/data |
|
295 | cache_dir = %(here)s/data | |
292 |
|
296 | |||
293 | ## locking and default file storage for Beaker. Putting this into a ramdisk |
|
297 | ## `cache_perms` cache settings for permission tree, auth TTL. | |
294 | ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data |
|
298 | rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace | |
295 | beaker.cache.data_dir = %(here)s/data/cache/beaker_data |
|
299 | rc_cache.cache_perms.expiration_time = 300 | |
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 |
|
|||
299 |
|
300 | |||
300 | beaker.cache.super_short_term.type = memory |
|
301 | ## alternative `cache_perms` redis backend with distributed lock | |
301 | beaker.cache.super_short_term.expire = 10 |
|
302 | #rc_cache.cache_perms.backend = dogpile.cache.rc.redis | |
302 | beaker.cache.super_short_term.key_length = 256 |
|
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 |
|
312 | ## `cache_repo` cache settings for FileTree, Readme, RSS FEEDS | |
305 | beaker.cache.short_term.expire = 60 |
|
313 | rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace | |
306 | beaker.cache.short_term.key_length = 256 |
|
314 | rc_cache.cache_repo.expiration_time = 2592000 | |
307 |
|
||||
308 | beaker.cache.long_term.type = memory |
|
|||
309 | beaker.cache.long_term.expire = 36000 |
|
|||
310 | beaker.cache.long_term.key_length = 256 |
|
|||
311 |
|
315 | |||
312 | beaker.cache.sql_cache_short.type = memory |
|
316 | ## alternative `cache_repo` redis backend with distributed lock | |
313 | beaker.cache.sql_cache_short.expire = 10 |
|
317 | #rc_cache.cache_repo.backend = dogpile.cache.rc.redis | |
314 | beaker.cache.sql_cache_short.key_length = 256 |
|
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 |
|
327 | ## cache settings for SQL queries, this needs to use memory type backend | |
317 | ## using multi-node or multi-worker setup |
|
328 | rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru | |
318 | #beaker.cache.auth_plugins.type = ext:database |
|
329 | rc_cache.sql_cache_short.expiration_time = 30 | |
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 |
|
|||
325 |
|
330 | |||
326 | beaker.cache.repo_cache_long.type = memorylru_base |
|
331 | ## `cache_repo_longterm` cache for repo object instances, this needs to use memory | |
327 | beaker.cache.repo_cache_long.max_items = 4096 |
|
332 | ## type backend as the objects kept are not pickle serializable | |
328 | beaker.cache.repo_cache_long.expire = 2592000 |
|
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 | ### BEAKER SESSION #### |
|
342 | ### BEAKER SESSION #### | |
339 | #################################### |
|
343 | #################################### | |
340 |
|
344 | |||
341 | ## .session.type is type of storage options for the session, current allowed |
|
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 | beaker.session.type = file |
|
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 | ## db based session, fast, and allows easy management over logged in users |
|
350 | ## db based session, fast, and allows easy management over logged in users | |
347 | #beaker.session.type = ext:database |
|
351 | #beaker.session.type = ext:database | |
@@ -484,6 +488,9 b' set debug = false' | |||||
484 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 |
|
488 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30 | |
485 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
489 | #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode | |
486 | #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode |
|
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 | sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode |
|
494 | sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode | |
488 |
|
495 | |||
489 | # see sqlalchemy docs for other advanced settings |
|
496 | # see sqlalchemy docs for other advanced settings | |
@@ -503,6 +510,9 b' sqlalchemy.db1.convert_unicode = true' | |||||
503 | ## which defaults to five. |
|
510 | ## which defaults to five. | |
504 | #sqlalchemy.db1.max_overflow = 10 |
|
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 | ### VCS CONFIG ### |
|
518 | ### VCS CONFIG ### | |
@@ -517,15 +527,17 b' vcs.server.protocol = http' | |||||
517 |
|
527 | |||
518 | ## Push/Pull operations protocol, available options are: |
|
528 | ## Push/Pull operations protocol, available options are: | |
519 | ## `http` - use http-rpc backend (default) |
|
529 | ## `http` - use http-rpc backend (default) | |
520 | ## |
|
|||
521 | vcs.scm_app_implementation = http |
|
530 | vcs.scm_app_implementation = http | |
522 |
|
531 | |||
523 | ## Push/Pull operations hooks protocol, available options are: |
|
532 | ## Push/Pull operations hooks protocol, available options are: | |
524 | ## `http` - use http-rpc backend (default) |
|
533 | ## `http` - use http-rpc backend (default) | |
525 | vcs.hooks.protocol = http |
|
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 | vcs.server.log_level = info |
|
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 | vcs.start_server = false |
|
541 | vcs.start_server = false | |
530 |
|
542 | |||
531 | ## List of enabled VCS backends, available options are: |
|
543 | ## List of enabled VCS backends, available options are: | |
@@ -608,7 +620,7 b' custom.conf = 1' | |||||
608 | ### LOGGING CONFIGURATION #### |
|
620 | ### LOGGING CONFIGURATION #### | |
609 | ################################ |
|
621 | ################################ | |
610 | [loggers] |
|
622 | [loggers] | |
611 |
keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper |
|
623 | keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper | |
612 |
|
624 | |||
613 | [handlers] |
|
625 | [handlers] | |
614 | keys = console, console_sql |
|
626 | keys = console, console_sql | |
@@ -664,6 +676,9 b' level = INFO' | |||||
664 | formatter = generic |
|
676 | formatter = generic | |
665 |
|
677 | |||
666 | [handler_console_sql] |
|
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 | class = StreamHandler |
|
682 | class = StreamHandler | |
668 | args = (sys.stderr, ) |
|
683 | args = (sys.stderr, ) | |
669 | level = WARN |
|
684 | level = WARN | |
@@ -685,5 +700,5 b' datefmt = %Y-%m-%d %H:%M:%S' | |||||
685 |
|
700 | |||
686 | [formatter_color_formatter_sql] |
|
701 | [formatter_color_formatter_sql] | |
687 | class = rhodecode.lib.logging_formatter.ColorFormatterSql |
|
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 | datefmt = %Y-%m-%d %H:%M:%S |
|
704 | datefmt = %Y-%m-%d %H:%M:%S |
@@ -1,41 +1,40 b'' | |||||
1 | # Nix environment for the community edition |
|
1 | # Nix environment for the community edition | |
2 | # |
|
2 | # | |
3 |
# This shall be as lean as possible, just producing the |
|
3 | # This shall be as lean as possible, just producing the enterprise-ce | |
4 | # derivation. For advanced tweaks to pimp up the development environment we use |
|
4 | # derivation. For advanced tweaks to pimp up the development environment we use | |
5 | # "shell.nix" so that it does not have to clutter this file. |
|
5 | # "shell.nix" so that it does not have to clutter this file. | |
|
6 | # | |||
|
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 | args@ |
|
21 | args@ | |
8 | { pythonPackages ? "python27Packages" |
|
22 | { pythonPackages ? "python27Packages" | |
9 | , pythonExternalOverrides ? self: super: {} |
|
23 | , pythonExternalOverrides ? self: super: {} | |
10 |
, doCheck ? |
|
24 | , doCheck ? false | |
11 | , ... |
|
25 | , ... | |
12 | }: |
|
26 | }: | |
13 |
|
27 | |||
14 | let |
|
28 | let | |
15 |
|
||||
16 | # Use nixpkgs from args or import them. We use this indirect approach |
|
29 | # Use nixpkgs from args or import them. We use this indirect approach | |
17 | # through args to be able to use the name `pkgs` for our customized packages. |
|
30 | # through args to be able to use the name `pkgs` for our customized packages. | |
18 | # Otherwise we will end up with an infinite recursion. |
|
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 |
|
34 | # Works with the new python-packages, still can fallback to the old | |
22 | # nixos.16.09 branch (unstable at the moment of writing this note) and the |
|
35 | # variant. | |
23 | # current stable nixos-16.03. |
|
36 | basePythonPackagesUnfix = basePythonPackages.__unfix__ or ( | |
24 | backwardsCompatibleFetchgit = { ... }@args: |
|
37 | self: basePythonPackages.override (a: { inherit self; })); | |
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 | }); |
|
|||
39 |
|
38 | |||
40 | # Evaluates to the last segment of a file system path. |
|
39 | # Evaluates to the last segment of a file system path. | |
41 | basename = path: with pkgs.lib; last (splitString "/" path); |
|
40 | basename = path: with pkgs.lib; last (splitString "/" path); | |
@@ -46,7 +45,7 b' let' | |||||
46 | ext = last (splitString "." path); |
|
45 | ext = last (splitString "." path); | |
47 | in |
|
46 | in | |
48 | !builtins.elem (basename path) [ |
|
47 | !builtins.elem (basename path) [ | |
49 | ".git" ".hg" "__pycache__" ".eggs" |
|
48 | ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev" | |
50 | "bower_components" "node_modules" |
|
49 | "bower_components" "node_modules" | |
51 | "build" "data" "result" "tmp"] && |
|
50 | "build" "data" "result" "tmp"] && | |
52 | !builtins.elem ext ["egg-info" "pyc"] && |
|
51 | !builtins.elem ext ["egg-info" "pyc"] && | |
@@ -54,18 +53,20 b' let' | |||||
54 | # it would still be good to restore it since we want to ignore "result-*". |
|
53 | # it would still be good to restore it since we want to ignore "result-*". | |
55 | !hasPrefix "result" path; |
|
54 | !hasPrefix "result" path; | |
56 |
|
55 | |||
57 | basePythonPackages = with builtins; if isAttrs pythonPackages |
|
56 | sources = | |
58 | then pythonPackages |
|
57 | let | |
59 | else getAttr pythonPackages pkgs; |
|
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 = |
|
66 | version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION"; | |
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; |
|
|||
67 | rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.; |
|
67 | rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.; | |
68 |
|
68 | |||
|
69 | buildBowerComponents = pkgs.buildBowerComponents; | |||
69 | nodeEnv = import ./pkgs/node-default.nix { |
|
70 | nodeEnv = import ./pkgs/node-default.nix { | |
70 | inherit pkgs; |
|
71 | inherit pkgs; | |
71 | }; |
|
72 | }; | |
@@ -77,133 +78,145 b' let' | |||||
77 | src = rhodecode-enterprise-ce-src; |
|
78 | src = rhodecode-enterprise-ce-src; | |
78 | }; |
|
79 | }; | |
79 |
|
80 | |||
80 | pythonGeneratedPackages = self: basePythonPackages.override (a: { |
|
81 | rhodecode-testdata-src = sources.rhodecode-testdata or ( | |
81 | inherit self; |
|
82 | pkgs.fetchhg { | |
82 | }) |
|
83 | url = "https://code.rhodecode.com/upstream/rc_testdata"; | |
83 | // (scopedImport { |
|
84 | rev = "v0.10.0"; | |
84 | self = self; |
|
85 | sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0"; | |
85 | super = basePythonPackages; |
|
86 | }); | |
86 | inherit pkgs; |
|
|||
87 | inherit (pkgs) fetchurl fetchgit; |
|
|||
88 | } ./pkgs/python-packages.nix); |
|
|||
89 |
|
87 | |||
90 | pythonOverrides = import ./pkgs/python-packages-overrides.nix { |
|
88 | rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" { | |
91 |
|
|
89 | inherit | |
92 | basePythonPackages |
|
90 | doCheck | |
93 |
|
|
91 | pkgs | |
|
92 | pythonPackages; | |||
94 | }; |
|
93 | }; | |
95 |
|
94 | |||
96 | pythonLocalOverrides = self: super: { |
|
95 | pythonLocalOverrides = self: super: { | |
97 | rhodecode-enterprise-ce = |
|
96 | rhodecode-enterprise-ce = | |
98 | let |
|
97 | let | |
99 | linkNodeAndBowerPackages = '' |
|
98 | linkNodeAndBowerPackages = '' | |
100 | echo "Export RhodeCode CE path" |
|
|||
101 | export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src} |
|
99 | export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src} | |
102 | echo "Link node packages" |
|
100 | ||
|
101 | echo "[BEGIN]: Link node packages" | |||
103 | rm -fr node_modules |
|
102 | rm -fr node_modules | |
104 | mkdir node_modules |
|
103 | mkdir node_modules | |
105 | # johbo: Linking individual packages allows us to run "npm install" |
|
104 | # johbo: Linking individual packages allows us to run "npm install" | |
106 | # inside of a shell to try things out. Re-entering the shell will |
|
105 | # inside of a shell to try things out. Re-entering the shell will | |
107 | # restore a clean environment. |
|
106 | # restore a clean environment. | |
108 | ln -s ${nodeDependencies}/lib/node_modules/* node_modules/ |
|
107 | ln -s ${nodeDependencies}/lib/node_modules/* node_modules/ | |
|
108 | echo "[DONE]: Link node packages" | |||
109 |
|
109 | |||
110 |
echo " |
|
110 | echo "[BEGIN]: Link bower packages" | |
111 |
|
||||
112 | echo "Link bower packages" |
|
|||
113 | rm -fr bower_components |
|
111 | rm -fr bower_components | |
114 | mkdir bower_components |
|
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 | releaseName = "RhodeCodeEnterpriseCE-${version}"; | |
117 | echo "DONE: Link bower packages" |
|
|||
118 | ''; |
|
|||
119 | in super.rhodecode-enterprise-ce.override (attrs: { |
|
118 | in super.rhodecode-enterprise-ce.override (attrs: { | |
120 |
|
||||
121 | inherit |
|
119 | inherit | |
122 | doCheck |
|
120 | doCheck | |
123 | version; |
|
121 | version; | |
|
122 | ||||
124 | name = "rhodecode-enterprise-ce-${version}"; |
|
123 | name = "rhodecode-enterprise-ce-${version}"; | |
125 | releaseName = "RhodeCodeEnterpriseCE-${version}"; |
|
124 | releaseName = releaseName; | |
126 | src = rhodecode-enterprise-ce-src; |
|
125 | src = rhodecode-enterprise-ce-src; | |
127 | dontStrip = true; # prevent strip, we don't need it. |
|
126 | dontStrip = true; # prevent strip, we don't need it. | |
128 |
|
127 | |||
129 | buildInputs = |
|
128 | # expose following attributed outside | |
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? |
|
|||
147 | passthru = { |
|
129 | passthru = { | |
148 | inherit |
|
130 | inherit | |
|
131 | rhodecode-testdata | |||
149 | bowerComponents |
|
132 | bowerComponents | |
150 | linkNodeAndBowerPackages |
|
133 | linkNodeAndBowerPackages | |
151 | myPythonPackagesUnfix |
|
134 | myPythonPackagesUnfix | |
152 |
pythonLocalOverrides |
|
135 | pythonLocalOverrides | |
|
136 | pythonCommunityOverrides; | |||
|
137 | ||||
153 | pythonPackages = self; |
|
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 | LC_ALL = "en_US.UTF-8"; |
|
154 | LC_ALL = "en_US.UTF-8"; | |
157 | LOCALE_ARCHIVE = |
|
155 | LOCALE_ARCHIVE = | |
158 |
if pkgs.stdenv |
|
156 | if pkgs.stdenv.isLinux | |
159 | then "${pkgs.glibcLocales}/lib/locale/locale-archive" |
|
157 | then "${pkgs.glibcLocales}/lib/locale/locale-archive" | |
160 | else ""; |
|
158 | else ""; | |
161 |
|
159 | |||
|
160 | # Add bin directory to path so that tests can find 'rhodecode'. | |||
162 | preCheck = '' |
|
161 | preCheck = '' | |
163 | export PATH="$out/bin:$PATH" |
|
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 | postCheck = '' |
|
172 | postCheck = '' | |
167 | rm -rf $out/lib/${self.python.libPrefix}/site-packages/pytest_pylons |
|
173 | echo "Cleanup of rhodecode/tests" | |
168 | rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests |
|
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 | grunt |
|
181 | grunt | |
173 | rm -fr node_modules |
|
182 | rm -fr node_modules | |
174 | ''; |
|
183 | ''; | |
175 |
|
184 | |||
176 | postInstall = '' |
|
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 | mkdir -p $out/nix-support/rccontrol |
|
187 | mkdir -p $out/nix-support/rccontrol | |
179 | cp -v rhodecode/VERSION $out/nix-support/rccontrol/version |
|
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 | # python based programs need to be wrapped |
|
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 | ln -s ${self.pyramid}/bin/* $out/bin/ |
|
202 | ln -s ${self.pyramid}/bin/* $out/bin/ | |
184 | ln -s ${self.gunicorn}/bin/gunicorn $out/bin/ |
|
203 | ln -s ${self.gunicorn}/bin/gunicorn $out/bin/ | |
185 | ln -s ${self.supervisor}/bin/supervisor* $out/bin/ |
|
204 | ln -s ${self.supervisor}/bin/supervisor* $out/bin/ | |
186 |
ln -s ${self. |
|
205 | ln -s ${self.pastescript}/bin/paster $out/bin/ | |
187 | ln -s ${self.channelstream}/bin/channelstream $out/bin/ |
|
206 | ln -s ${self.channelstream}/bin/channelstream $out/bin/ | |
188 | ln -s ${self.celery}/bin/celery $out/bin/ |
|
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 | for file in $out/bin/*; |
|
210 | for file in $out/bin/*; | |
195 | do |
|
211 | do | |
196 | wrapProgram $file \ |
|
212 | wrapProgram $file \ | |
197 |
|
|
213 | --prefix PATH : $PATH \ | |
198 |
|
|
214 | --prefix PYTHONPATH : $PYTHONPATH \ | |
199 |
|
|
215 | --set PYTHONHASHSEED random | |
200 | done |
|
216 | done | |
201 |
|
217 | |||
202 | mkdir $out/etc |
|
218 | echo "[DONE]: enterprise-ce binary wrapping" | |
203 | cp configs/production.ini $out/etc |
|
|||
204 |
|
219 | |||
205 |
|
||||
206 | # TODO: johbo: Make part of ac-tests |
|
|||
207 | if [ ! -f rhodecode/public/js/scripts.js ]; then |
|
220 | if [ ! -f rhodecode/public/js/scripts.js ]; then | |
208 | echo "Missing scripts.js" |
|
221 | echo "Missing scripts.js" | |
209 | exit 1 |
|
222 | exit 1 | |
@@ -213,31 +226,33 b' let' | |||||
213 | exit 1 |
|
226 | exit 1 | |
214 | fi |
|
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 ( |
|
233 | basePythonPackages = with builtins; | |
229 | pkgs.fetchhg { |
|
234 | if isAttrs pythonPackages then | |
230 | url = "https://code.rhodecode.com/upstream/rc_testdata"; |
|
235 | pythonPackages | |
231 | rev = "v0.10.0"; |
|
236 | else | |
232 | sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0"; |
|
237 | getAttr pythonPackages pkgs; | |
233 | }); |
|
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 | # Apply all overrides and fix the final package set |
|
248 | # Apply all overrides and fix the final package set | |
236 | myPythonPackagesUnfix = with pkgs.lib; |
|
249 | myPythonPackagesUnfix = with pkgs.lib; | |
237 | (extends pythonExternalOverrides |
|
250 | (extends pythonExternalOverrides | |
238 | (extends pythonLocalOverrides |
|
251 | (extends pythonLocalOverrides | |
239 | (extends pythonOverrides |
|
252 | (extends pythonCommunityOverrides | |
240 |
|
|
253 | (extends pythonGeneratedPackages | |
|
254 | basePythonPackagesUnfix)))); | |||
|
255 | ||||
241 | myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix); |
|
256 | myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix); | |
242 |
|
257 | |||
243 | in myPythonPackages.rhodecode-enterprise-ce |
|
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 | # building the docs |
|
6 | # building the docs | |
2 | cd docs |
|
7 | cd docs | |
3 | nix-build default.nix -o result |
|
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 | (venv)$ rhodecode-index --instance-name=enterprise-1 |
|
88 | (venv)$ rhodecode-index --instance-name=enterprise-1 | |
89 |
|
89 | |||
90 | # Using default installation |
|
90 | # Using default installation | |
91 |
$ /home/user/.rccontrol/enterprise- |
|
91 | $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \ | |
92 |
--instance-name=enterprise- |
|
92 | --instance-name=enterprise-1 | |
93 |
|
93 | |||
94 | # Using a custom mapping file |
|
94 | # Using a custom mapping file | |
95 |
$ /home/user/.rccontrol/enterprise- |
|
95 | $ /home/user/.rccontrol/enterprise-1/profile/bin/rhodecode-index \ | |
96 |
--instance-name=enterprise- |
|
96 | --instance-name=enterprise-1 \ | |
97 |
--mapping=/home/user/.rccontrol/enterprise- |
|
97 | --mapping=/home/user/.rccontrol/enterprise-1/mapping.ini | |
98 |
|
98 | |||
99 | .. note:: |
|
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 | .. _set-index: |
|
107 | .. _set-index: | |
104 |
|
108 |
@@ -12,7 +12,7 b' if there are lots of session files.' | |||||
12 |
|
12 | |||
13 | Therefore, in a large scale deployment, to give better performance, |
|
13 | Therefore, in a large scale deployment, to give better performance, | |
14 | scalability, and maintainability we recommend switching from file-based |
|
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 | To switch to database-based user sessions uncomment the following section in |
|
17 | To switch to database-based user sessions uncomment the following section in | |
18 | your :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. |
|
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 | #beaker.session.data_dir = %(here)s/data/sessions/data |
|
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 | your :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. |
|
51 | your :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. | |
46 |
|
52 | |||
47 | .. code-block:: ini |
|
53 | .. code-block:: ini | |
48 |
|
54 | |||
49 |
## |
|
55 | ## redis sessions | |
50 |
beaker.session.type = ext: |
|
56 | beaker.session.type = ext:redis | |
51 |
beaker.session.url = localhost: |
|
57 | beaker.session.url = localhost:6379 | |
52 |
|
58 | |||
53 |
|
59 | |||
54 | and make sure you comment out the file based sessions. |
|
60 | and make sure you comment out the file based sessions. |
@@ -83,7 +83,7 b' comment_pull_request' | |||||
83 | create_pull_request |
|
83 | create_pull_request | |
84 | ------------------- |
|
84 | ------------------- | |
85 |
|
85 | |||
86 | .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, title, 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 | Creates a new pull request. |
|
88 | Creates a new pull request. | |
89 |
|
89 | |||
@@ -104,10 +104,14 b' create_pull_request' | |||||
104 | :type source_ref: str |
|
104 | :type source_ref: str | |
105 | :param target_ref: Set the target ref name. |
|
105 | :param target_ref: Set the target ref name. | |
106 | :type target_ref: str |
|
106 | :type target_ref: str | |
107 |
:param title: Set the pull request title |
|
107 | :param title: Optionally Set the pull request title, it's generated otherwise | |
108 | :type title: str |
|
108 | :type title: str | |
109 | :param description: Set the pull request description. |
|
109 | :param description: Set the pull request description. | |
110 | :type description: Optional(str) |
|
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 | :param reviewers: Set the new pull request reviewers list. |
|
115 | :param reviewers: Set the new pull request reviewers list. | |
112 | Reviewer defined by review rules will be added automatically to the |
|
116 | Reviewer defined by review rules will be added automatically to the | |
113 | defined list. |
|
117 | defined list. | |
@@ -368,7 +372,7 b' merge_pull_request' | |||||
368 | update_pull_request |
|
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 | Updates a pull request. |
|
377 | Updates a pull request. | |
374 |
|
378 | |||
@@ -382,6 +386,9 b' update_pull_request' | |||||
382 | :type title: str |
|
386 | :type title: str | |
383 | :param description: Update pull request description. |
|
387 | :param description: Update pull request description. | |
384 | :type description: Optional(str) |
|
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 | :param reviewers: Update pull request reviewers list with new value. |
|
392 | :param reviewers: Update pull request reviewers list with new value. | |
386 | :type reviewers: Optional(list) |
|
393 | :type reviewers: Optional(list) | |
387 | Accepts username strings or objects of the format: |
|
394 | Accepts username strings or objects of the format: |
@@ -32,6 +32,7 b' import common' | |||||
32 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom |
|
32 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom | |
33 | # ones. |
|
33 | # ones. | |
34 | extensions = [ |
|
34 | extensions = [ | |
|
35 | 'sphinx.ext.autodoc', | |||
35 | 'sphinx.ext.intersphinx', |
|
36 | 'sphinx.ext.intersphinx', | |
36 | 'sphinx.ext.todo', |
|
37 | 'sphinx.ext.todo', | |
37 | 'sphinx.ext.imgmath' |
|
38 | 'sphinx.ext.imgmath' | |
@@ -42,13 +43,6 b' intersphinx_mapping = {' | |||||
42 | 'control': ('https://docs.rhodecode.com/RhodeCode-Control/', None), |
|
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 | # Add any paths that contain templates here, relative to this directory. |
|
46 | # Add any paths that contain templates here, relative to this directory. | |
53 | templates_path = ['_templates'] |
|
47 | templates_path = ['_templates'] | |
54 |
|
48 | |||
@@ -65,11 +59,12 b" master_doc = 'index'" | |||||
65 | # |version| and |release|, also used in various other places throughout the |
|
59 | # |version| and |release|, also used in various other places throughout the | |
66 | # built documents. |
|
60 | # built documents. | |
67 |
|
61 | |||
68 | # TODO: johbo: Move into common package for documentation utilities |
|
62 | ||
69 | def _get_version(): |
|
63 | def _get_version(): | |
70 | with open('../rhodecode/VERSION') as f: |
|
64 | with open('../rhodecode/VERSION') as f: | |
71 | return f.read().strip() |
|
65 | return f.read().strip() | |
72 |
|
66 | |||
|
67 | ||||
73 | # The full version, including alpha/beta/rc tags. |
|
68 | # The full version, including alpha/beta/rc tags. | |
74 | release = _get_version() |
|
69 | release = _get_version() | |
75 | # The short X.Y version. |
|
70 | # The short X.Y version. |
@@ -47,7 +47,7 b' Switch nix to the latest STABLE channel' | |||||
47 |
|
47 | |||
48 | run:: |
|
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 | Followed by:: |
|
52 | Followed by:: | |
53 |
|
53 |
@@ -5,249 +5,215 b' let' | |||||
5 |
|
5 | |||
6 | pkgs = import <nixpkgs> { inherit system; }; |
|
6 | pkgs = import <nixpkgs> { inherit system; }; | |
7 |
|
7 | |||
8 |
inherit (pkgs) fetchurl |
|
8 | inherit (pkgs) fetchurl; | |
9 |
|
9 | |||
10 | buildPythonPackage = pkgs.python27Packages.buildPythonPackage; |
|
10 | buildPythonPackage = pkgs.python27Packages.buildPythonPackage; | |
11 | python = pkgs.python27Packages.python; |
|
11 | python = pkgs.python27Packages.python; | |
12 |
|
12 | |||
13 | Jinja2 = buildPythonPackage rec { |
|
13 | ||
14 | name = "Jinja2-2.9.6"; |
|
14 | alabaster = buildPythonPackage { | |
15 | buildInputs = []; |
|
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 | doCheck = false; |
|
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 | src = fetchurl { |
|
36 | src = fetchurl { | |
19 | url = "https://pypi.python.org/packages/90/61/f820ff0076a2599dd39406dcb858ecb239438c02ce706c8e91131ab9c7f1/Jinja2-2.9.6.tar.gz"; |
|
37 | url = "https://files.pythonhosted.org/packages/e1/0f/f8d5e939184547b3bdc6128551b831a62832713aa98c2ccdf8c47ecc7f17/certifi-2018.8.24.tar.gz"; | |
20 | md5 = "6411537324b4dba0956aaa8109f3c77b"; |
|
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 |
|
57 | idna = buildPythonPackage { | ||
24 | MarkupSafe = buildPythonPackage rec { |
|
58 | name = "idna-2.7"; | |
25 | name = "MarkupSafe-1.0"; |
|
59 | doCheck = false; | |
26 | buildInputs = []; |
|
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 | doCheck = false; |
|
67 | doCheck = false; | |
28 | propagatedBuildInputs = []; |
|
|||
29 | src = fetchurl { |
|
68 | src = fetchurl { | |
30 | url = "https://pypi.python.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz"; |
|
69 | url = "https://files.pythonhosted.org/packages/41/f5/3cf63735d54aa9974e544aa25858d8f9670ac5b4da51020bbfc6aaade741/imagesize-1.1.0.tar.gz"; | |
31 | md5 = "2fcedc9284d50e577b5192e8e3578355"; |
|
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 |
|
84 | markupsafe = buildPythonPackage { | ||
35 | Pygments = buildPythonPackage { |
|
85 | name = "markupsafe-1.0"; | |
36 | name = "Pygments-2.2.0"; |
|
86 | doCheck = false; | |
37 | buildInputs = []; |
|
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 | doCheck = false; |
|
94 | doCheck = false; | |
39 |
propagatedBuildInputs = [ |
|
95 | propagatedBuildInputs = [ | |
|
96 | pyparsing | |||
|
97 | six | |||
|
98 | ]; | |||
40 | src = fetchurl { |
|
99 | src = fetchurl { | |
41 | url = "https://pypi.python.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz"; |
|
100 | url = "https://files.pythonhosted.org/packages/77/32/439f47be99809c12ef2da8b60a2c47987786d2c6c9205549dd6ef95df8bd/packaging-17.1.tar.gz"; | |
42 | md5 = "13037baca42f16917cbd5ad2fab50844"; |
|
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 |
|
112 | pyparsing = buildPythonPackage { | ||
46 | Sphinx = buildPythonPackage (rec { |
|
113 | name = "pyparsing-2.2.0"; | |
47 | name = "Sphinx-1.6.5"; |
|
114 | doCheck = false; | |
48 | src = fetchurl { |
|
115 | src = fetchurl { | |
49 | url = "https://pypi.python.org/packages/8b/7e/b188d9a3b9c938e736e02a74c1363c2888e095d770df2c72b4c312f9fdcb/Sphinx-1.6.5.tar.gz"; |
|
116 | url = "https://files.pythonhosted.org/packages/3c/ec/a94f8cf7274ea60b5413df054f82a8980523efd712ec55a59e7c3357cf7c/pyparsing-2.2.0.tar.gz"; | |
50 | md5 = "cd73118c21ec610432e63e6421ec54f1"; |
|
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 | propagatedBuildInputs = [ |
|
131 | propagatedBuildInputs = [ | |
53 | six |
|
132 | chardet | |
54 |
|
|
133 | idna | |
55 | Pygments |
|
134 | urllib3 | |
56 |
|
|
135 | certifi | |
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 |
|
||||
70 | ]; |
|
136 | ]; | |
71 | }); |
|
137 | src = fetchurl { | |
72 |
|
138 | url = "https://files.pythonhosted.org/packages/54/1f/782a5734931ddf2e1494e4cd615a51ff98e1879cbe9eecbdfeaf09aa75e9/requests-2.19.1.tar.gz"; | ||
73 | alabaster = buildPythonPackage rec { |
|
139 | sha256 = "0snf8xxdzsgh1x2zv3vilvbrv9jbpmnfagzzb1rjmmvflckdh8pc"; | |
74 | name = "alabaster-0.7.10"; |
|
140 | }; | |
75 | buildInputs = []; |
|
141 | }; | |
|
142 | six = buildPythonPackage { | |||
|
143 | name = "six-1.11.0"; | |||
76 | doCheck = false; |
|
144 | doCheck = false; | |
77 | propagatedBuildInputs = []; |
|
|||
78 | src = fetchurl { |
|
145 | src = fetchurl { | |
79 | url = "https://pypi.python.org/packages/d0/a5/e3a9ad3ee86aceeff71908ae562580643b955ea1b1d4f08ed6f7e8396bd7/alabaster-0.7.10.tar.gz"; |
|
146 | url = "https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz"; | |
80 | md5 = "7934dccf38801faa105f6e7b4784f493"; |
|
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 |
|
158 | sphinx = buildPythonPackage { | ||
84 | babel = buildPythonPackage { |
|
159 | name = "sphinx-1.7.8"; | |
85 | name = "babel-2.5.1"; |
|
|||
86 | buildInputs = []; |
|
|||
87 | doCheck = false; |
|
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 | src = fetchurl { |
|
176 | src = fetchurl { | |
90 | url = "https://pypi.python.org/packages/5a/22/63f1dbb8514bb7e0d0c8a85cc9b14506599a075e231985f98afd70430e1f/Babel-2.5.1.tar.gz"; |
|
177 | url = "https://files.pythonhosted.org/packages/ac/54/4ef326d0c654da1ed91341a7a1f43efc18a8c770ddd2b8e45df97cb79d82/Sphinx-1.7.8.tar.gz"; | |
91 | md5 = "60228b3ce93a203357158b909afe8ae1"; |
|
178 | sha256 = "1ryz0w4c31930f1br2sjwrxwx9cmsy7cqdb0d81g98n9bj250w50"; | |
92 | }; |
|
179 | }; | |
93 | }; |
|
180 | }; | |
94 |
|
181 | sphinx-rtd-theme = buildPythonPackage { | ||
95 | certifi = buildPythonPackage { |
|
182 | name = "sphinx-rtd-theme-0.4.1"; | |
96 | name = "certifi-2017.11.5"; |
|
|||
97 | buildInputs = []; |
|
|||
98 | doCheck = false; |
|
183 | doCheck = false; | |
99 |
propagatedBuildInputs = [ |
|
184 | propagatedBuildInputs = [ | |
|
185 | sphinx | |||
|
186 | ]; | |||
100 | src = fetchurl { |
|
187 | src = fetchurl { | |
101 | url = "https://pypi.python.org/packages/23/3f/8be01c50ed24a4bd6b8da799839066ce0288f66f5e11f0367323467f0cbc/certifi-2017.11.5.tar.gz"; |
|
188 | url = "https://files.pythonhosted.org/packages/f2/b0/a1933d792b806118ddbca6699f2e2c844d9b1b16e84a89d7effd5cd2a800/sphinx_rtd_theme-0.4.1.tar.gz"; | |
102 | md5 = "c15ac46ed1fe4b607ff3405928f9a992"; |
|
189 | sha256 = "1xkyqam8dzbjaymdyvkiif85m4y3jf8crdiwlgcfp8gqcj57aj9v"; | |
103 | }; |
|
190 | }; | |
104 | }; |
|
191 | }; | |
105 |
|
192 | sphinxcontrib-websupport = buildPythonPackage { | ||
106 | chardet = buildPythonPackage { |
|
193 | name = "sphinxcontrib-websupport-1.1.0"; | |
107 | name = "chardet-3.0.4"; |
|
|||
108 | buildInputs = []; |
|
|||
109 | doCheck = false; |
|
194 | doCheck = false; | |
110 | propagatedBuildInputs = []; |
|
|||
111 | src = fetchurl { |
|
195 | src = fetchurl { | |
112 | url = "https://pypi.python.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz"; |
|
196 | url = "https://files.pythonhosted.org/packages/07/7a/e74b06dce85555ffee33e1d6b7381314169ebf7e31b62c18fcb2815626b7/sphinxcontrib-websupport-1.1.0.tar.gz"; | |
113 | md5 = "7dd1ba7f9c77e32351b0a0cfacf4055c"; |
|
197 | sha256 = "1ff3ix76xi1y6m99qxhaq5161ix9swwzydilvdya07mgbcvpzr4x"; | |
114 | }; |
|
198 | }; | |
115 | }; |
|
199 | }; | |
116 |
|
200 | typing = buildPythonPackage { | ||
117 | docutils = buildPythonPackage { |
|
201 | name = "typing-3.6.6"; | |
118 | name = "docutils-0.14"; |
|
|||
119 | buildInputs = []; |
|
|||
120 | doCheck = false; |
|
202 | doCheck = false; | |
121 | propagatedBuildInputs = []; |
|
|||
122 | src = fetchurl { |
|
203 | src = fetchurl { | |
123 | url = "https://pypi.python.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz"; |
|
204 | url = "https://files.pythonhosted.org/packages/bf/9b/2bf84e841575b633d8d91ad923e198a415e3901f228715524689495b4317/typing-3.6.6.tar.gz"; | |
124 | md5 = "c53768d63db3873b7d452833553469de"; |
|
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 | # Avoid that setuptools is replaced, this leads to trouble |
|
217 | # Avoid that setuptools is replaced, this leads to trouble | |
252 | # with buildPythonPackage. |
|
218 | # with buildPythonPackage. | |
253 | setuptools = pkgs.python27Packages.setuptools; |
|
219 | setuptools = pkgs.python27Packages.setuptools; | |
@@ -255,7 +221,7 b' let' | |||||
255 | in python.buildEnv.override { |
|
221 | in python.buildEnv.override { | |
256 | inherit python; |
|
222 | inherit python; | |
257 | extraLibs = [ |
|
223 | extraLibs = [ | |
258 |
|
|
224 | sphinx | |
259 |
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 | |repo| into a local machine using a recent |git| client, then push it to a new |
|
37 | |repo| into a local machine using a recent |git| client, then push it to a new | |
38 | |repo| inside |RCE|. |
|
38 | |repo| inside |RCE|. | |
39 |
|
39 | |||
|
40 | ||||
40 | VCS Server Memory Consumption |
|
41 | VCS Server Memory Consumption | |
41 | ----------------------------- |
|
42 | ----------------------------- | |
42 |
|
43 | |||
@@ -48,24 +49,34 b' shipped with the optimal configuration a' | |||||
48 | To fix this issue, upgrade to |RCE| 3.3.2 or greater, and if you discover |
|
49 | To fix this issue, upgrade to |RCE| 3.3.2 or greater, and if you discover | |
49 | memory consumption issues check the VCS Server settings. |
|
50 | memory consumption issues check the VCS Server settings. | |
50 |
|
51 | |||
51 | Fedora 23 |
|
52 | Fedora 23 / Ubuntu 18.04 | |
52 | --------- |
|
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 |
|
59 | To work around this problem, you need set path to ``$LOCAL_ARCHIVE`` to the | |
55 | known issue under investigation due to the Nix packaging of the product, see the |
|
60 | locale package in older pre glibc 2.27 format, or set `LC_ALL=C` in your enviroment. | |
56 | `Github issue here`_. |RCC| runs fine on Fedora 21. |
|
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 |
|
64 | 1. Download the pre 2.27 locale-archive package | |
59 | workaround locale package. |
|
|||
60 |
|
65 | |||
61 | 1. Download this package: |
|
66 | .. code-block:: bash | |
62 | http://lipa.ms.mff.cuni.cz/~cunav5am/nix/locale-archive |
|
67 | ||
|
68 | wget https://dls.rhodecode.com/assets/locale-archive | |||
|
69 | ||||
63 |
|
|
70 | ||
64 | 2. Point ``$LOCAL_ARCHIVE`` to the locale package. |
|
71 | 2. Point ``$LOCAL_ARCHIVE`` to the locale package. | |
65 |
|
72 | |||
66 | .. code-block:: bash |
|
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 | If you happen to be running |RCC| from systemd, use the following |
|
81 | If you happen to be running |RCC| from systemd, use the following | |
71 | example to pass the correct locale information on boot. |
|
82 | example to pass the correct locale information on boot. | |
@@ -85,4 +96,3 b' example to pass the correct locale infor' | |||||
85 | [Install] |
|
96 | [Install] | |
86 | WantedBy=multi-user.target |
|
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 | .. toctree:: |
|
9 | .. toctree:: | |
10 | :maxdepth: 1 |
|
10 | :maxdepth: 1 | |
11 |
|
11 | |||
|
12 | release-notes-4.13.0.rst | |||
12 | release-notes-4.12.4.rst |
|
13 | release-notes-4.12.4.rst | |
13 | release-notes-4.12.3.rst |
|
14 | release-notes-4.12.3.rst | |
14 | release-notes-4.12.2.rst |
|
15 | release-notes-4.12.2.rst |
@@ -1,8 +1,8 b'' | |||||
1 |
|
|
1 | sphinx==1.7.8 | |
2 | six==1.11.0 |
|
2 | six==1.11.0 | |
3 |
sphinx_rtd_theme==0. |
|
3 | sphinx_rtd_theme==0.4.1 | |
4 | docutils==0.14.0 |
|
4 | docutils==0.14.0 | |
5 |
|
|
5 | pygments==2.2.0 | |
6 |
|
|
6 | markupsafe==1.0.0 | |
7 |
|
|
7 | jinja2==2.9.6 | |
8 | pytz No newline at end of file |
|
8 | pytz==2018.4 |
@@ -1,6 +1,13 b'' | |||||
1 | { |
|
1 | { | |
2 | "name": "rhodecode-enterprise", |
|
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 | "devDependencies": { |
|
11 | "devDependencies": { | |
5 | "grunt": "^0.4.5", |
|
12 | "grunt": "^0.4.5", | |
6 | "grunt-contrib-copy": "^1.0.0", |
|
13 | "grunt-contrib-copy": "^1.0.0", | |
@@ -8,16 +15,17 b'' | |||||
8 | "grunt-contrib-jshint": "^0.12.0", |
|
15 | "grunt-contrib-jshint": "^0.12.0", | |
9 | "grunt-contrib-less": "^1.1.0", |
|
16 | "grunt-contrib-less": "^1.1.0", | |
10 | "grunt-contrib-watch": "^0.6.1", |
|
17 | "grunt-contrib-watch": "^0.6.1", | |
11 |
"crisper": "^2. |
|
18 | "crisper": "^2.1.1", | |
12 |
"vulcanize": "^1.1 |
|
19 | "vulcanize": "^1.16.0", | |
13 | "grunt-crisper": "^1.0.1", |
|
20 | "grunt-crisper": "^1.0.1", | |
14 | "grunt-vulcanize": "^1.0.0", |
|
21 | "grunt-vulcanize": "^1.0.0", | |
15 | "node2nix": "^1.0.0", |
|
22 | "node2nix": "^1.0.0", | |
16 | "jshint": "^2.9.1-rc3", |
|
23 | "jshint": "^2.9.1-rc3", | |
17 |
"bower": "^1. |
|
24 | "bower": "^1.8.4", | |
18 | "jquery": "1.11.3", |
|
25 | "jquery": "1.11.3", | |
19 | "favico.js": "^0.3.10", |
|
26 | "favico.js": "^0.3.10", | |
20 |
"clipboard": "^ |
|
27 | "clipboard": "^2.0.1", | |
|
28 | "qrious": "^4.0.2", | |||
21 | "moment": "^2.18.1", |
|
29 | "moment": "^2.18.1", | |
22 | "mousetrap": "^1.6.1", |
|
30 | "mousetrap": "^1.6.1", | |
23 | "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1" |
|
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 | { fetchbower, buildEnv }: |
|
2 | { fetchbower, buildEnv }: | |
2 | buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [ |
|
3 | buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [ | |
3 | (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "178h9j8jq9wi5845f5pxhhhqw6x022nzmpzm4di8fgsdl1f6nr5d") |
|
4 | (fetchbower "webcomponentsjs" "1.2.3" "^1.2.3" "0db2fjk779rhl9d4ifpk1j9a83vngx6j3hk7si1752dqxj857267") | |
4 |
(fetchbower "polymer" "Polymer/polymer# |
|
5 | (fetchbower "polymer" "Polymer/polymer#2.6.0" "Polymer/polymer#^2.6.0" "1jw5syjn0naa7dlxzxvsgwb20zbkbpx0pcg0wzjq4wr49c20nw0k") | |
5 |
(fetchbower "paper-button" "PolymerElements/paper-button#1. |
|
6 | (fetchbower "paper-button" "PolymerElements/paper-button#2.1.2" "PolymerElements/paper-button#^2.1.2" "1lwmjwhvimh02gss39yjp5h7yg9mxl1ig59yrk085v86y5f5ilz1") | |
6 |
(fetchbower "paper-spinner" "PolymerElements/paper-spinner#1 |
|
7 | (fetchbower "paper-spinner" "PolymerElements/paper-spinner#2.1.0" "PolymerElements/paper-spinner#^2.1.0" "07jamgxzvy4r9pgf5ikj1fm8nkrw6sywgcxvmm7ax58hjvmd4i45") | |
7 |
(fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1 |
|
8 | (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#2.1.1" "PolymerElements/paper-tooltip#^2.1.1" "0ja9vz4xps7dxfx6kmrwq0gifbjsyc3pk9l3hd5233ss72ghlvgb") | |
8 |
(fetchbower "paper-toast" "PolymerElements/paper-toast#1. |
|
9 | (fetchbower "paper-toast" "PolymerElements/paper-toast#2.1.2" "PolymerElements/paper-toast#^2.1.2" "0mkj9ayjx2l9hvrz4kw3yjbgrs9w873k05ywv94nh92mzpjkxn04") | |
9 |
(fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#1. |
|
10 | (fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#2.1.1" "PolymerElements/paper-toggle-button#^2.1.1" "1rl5ar3ny6r3v9hr8s68v8b3zh5yl52pikhi4b9iv9grv29g5999") | |
10 |
(fetchbower "iron-ajax" "PolymerElements/iron-ajax#1. |
|
11 | (fetchbower "iron-ajax" "PolymerElements/iron-ajax#2.1.3" "PolymerElements/iron-ajax#^2.1.3" "187zb6lkv18yapl292qhn611mbl4i2bqs2dimlwmdjaln285nc1l") | |
11 |
(fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea# |
|
12 | (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#2.2.0" "PolymerElements/iron-autogrow-textarea#^2.2.0" "1cx7g49m20z08x25z24g2pvv6m6dwfbkga3nsw0rpi3jk7xhznqw") | |
12 |
(fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1. |
|
13 | (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#2.1.2" "PolymerElements/iron-a11y-keys#^2.1.2" "0zdn3bzfrk88iwahmmzvcjn3m90zga1l8dx42b365n8if0n0zapj") | |
13 | (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl") |
|
14 | (fetchbower "shadycss" "webcomponents/shadycss#1.3.5" "webcomponents/shadycss#^v1.1.0" "1xp07d6jlmc3ywg4cdp2nijwi0vrbzw468242xz0s6zx5z2n2wzf") | |
14 | (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8") |
|
15 | (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#2.0.3" "PolymerElements/iron-flex-layout#1 - 2" "1ir9ili3rkcgbfj6is5s70vyb7m6avz0av0lpjjlhhsplrrl90bk") | |
15 | (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh") |
|
16 | (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#2.1.1" "PolymerElements/paper-behaviors#1 - 2" "0wzyznmy1q64jsm6lck0xma92lg2hz9h9m05r68iy20iyrvbjld7") | |
16 |
(fetchbower "paper-styles" "PolymerElements/paper-styles# |
|
17 | (fetchbower "paper-styles" "PolymerElements/paper-styles#2.1.0" "PolymerElements/paper-styles#1 - 2" "0xzsd7pvjsk7lgcmvx4q0dvps40q3mymkx26zgs8ns91s1ssfqbx") | |
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#2.1.0" "PolymerElements/iron-a11y-announcer#1 - 2" "1hvmw76im8y3pxmg1yfnlkzap429q9i4v1z42y7m8lz0996jmxrz") | |
18 | (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d") |
|
19 | (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#2.3.4" "PolymerElements/iron-overlay-behavior#1 - 2" "0hk2fxhfz7kg27349qz1c87vq6nfdcnjr9az3q95ak3rigsb71wg") | |
19 |
(fetchbower "iron- |
|
20 | (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#2.2.1" "PolymerElements/iron-fit-behavior#1 - 2" "0v89am4r2fncr7m9k0f2xqh5bvgn2dqjjc7p515ix4grk89whbs3") | |
20 | (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf") |
|
21 | (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#2.1.1" "PolymerElements/iron-checked-element-behavior#1 - 2" "00gpvnb7anspadw59av7lca6p03qlx59dgnhw3lqf5v223dsh0l3") | |
21 |
(fetchbower "iron- |
|
22 | (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#2.1.1" "PolymerElements/iron-behaviors#1 - 2" "0c71l1il76jg8gvyh8bwlqraif53gfnz5700vpg35qyr1biwbr1w") | |
22 | (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb") |
|
23 | (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#2.1.0" "PolymerElements/iron-validatable-behavior#1 - 2" "1j65zv7hcxdcyyanzhp2wap3bnx7cz8ghd44m12fad2206jj6ysi") | |
23 |
(fetchbower "iron-behavior |
|
24 | (fetchbower "iron-a11y-keys-behavior" "PolymerElements/iron-a11y-keys-behavior#2.1.1" "PolymerElements/iron-a11y-keys-behavior#1 - 2" "0jsw7wvh4wzcjqdbvxyha99h1ph61lykyyyvdb6hm8m8w40bhs9b") | |
24 | (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv") |
|
25 | (fetchbower "paper-ripple" "PolymerElements/paper-ripple#2.1.1" "PolymerElements/paper-ripple#1 - 2" "0sam6w83nxf9mss79j6hjfsx0288pf4hwr1bw5xclzgpddcjmrm5") | |
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 "font-roboto" "PolymerElements/font-roboto#1.1.0" "PolymerElements/font-roboto#^1.0.1" "0z4msvaa5pnr84j2r957g313fmdbdbrknhdw1axy5g48845yv04s") | |
26 |
(fetchbower "iron-a |
|
27 | (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#2.1.1" "PolymerElements/iron-resizable-behavior#1 - 2" "0169rg6kby0ypfiwbkin46ywaszwj7r91yn081yqd96l1115aqnk") | |
27 | (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns") |
|
28 | (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#2.1.3" "PolymerElements/iron-form-element-behavior#1 - 2" "1c83kkfqvb5pdlvrhad3l7b11i244a8lykc8kzfnb9ya0xrln0cn") | |
28 | (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj") |
|
29 | (fetchbower "iron-meta" "PolymerElements/iron-meta#2.1.1" "PolymerElements/iron-meta#1 - 2" "12w1pcl3w97xpxihqddbf2d9dx8xz5i1jd9bz1xrmfsh25isni40") | |
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") |
|
|||
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 | {pkgs ? import <nixpkgs> { |
|
3 | {pkgs ? import <nixpkgs> { | |
4 | inherit system; |
|
4 | inherit system; | |
5 | }, system ? builtins.currentSystem}: |
|
5 | }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-6_x"}: | |
6 |
|
6 | |||
7 | let |
|
7 | let | |
8 | nodeEnv = import ./node-env.nix { |
|
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 | in |
|
13 | in | |
12 | import ./node-packages.nix { |
|
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 | # This file originates from node2nix |
|
1 | # This file originates from node2nix | |
2 |
|
2 | |||
3 |
{stdenv, |
|
3 | {stdenv, nodejs, python2, utillinux, libtool, runCommand, writeTextFile}: | |
4 |
|
4 | |||
5 | let |
|
5 | let | |
|
6 | python = if nodejs ? python then nodejs.python else python2; | |||
|
7 | ||||
6 | # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise |
|
8 | # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise | |
7 | tarWrapper = runCommand "tarWrapper" {} '' |
|
9 | tarWrapper = runCommand "tarWrapper" {} '' | |
8 | mkdir -p $out/bin |
|
10 | mkdir -p $out/bin | |
9 |
|
11 | |||
10 | cat > $out/bin/tar <<EOF |
|
12 | cat > $out/bin/tar <<EOF | |
11 | #! ${stdenv.shell} -e |
|
13 | #! ${stdenv.shell} -e | |
12 | $(type -p tar) "\$@" --warning=no-unknown-keyword |
|
14 | $(type -p tar) "\$@" --warning=no-unknown-keyword | |
13 | EOF |
|
15 | EOF | |
14 |
|
16 | |||
15 | chmod +x $out/bin/tar |
|
17 | chmod +x $out/bin/tar | |
16 | ''; |
|
18 | ''; | |
17 |
|
19 | |||
18 | # Function that generates a TGZ file from a NPM project |
|
20 | # Function that generates a TGZ file from a NPM project | |
19 | buildNodeSourceDist = |
|
21 | buildNodeSourceDist = | |
20 | { name, version, src, ... }: |
|
22 | { name, version, src, ... }: | |
21 |
|
23 | |||
22 | stdenv.mkDerivation { |
|
24 | stdenv.mkDerivation { | |
23 | name = "node-tarball-${name}-${version}"; |
|
25 | name = "node-tarball-${name}-${version}"; | |
24 | inherit src; |
|
26 | inherit src; | |
25 | buildInputs = [ nodejs ]; |
|
27 | buildInputs = [ nodejs ]; | |
26 | buildPhase = '' |
|
28 | buildPhase = '' | |
27 | export HOME=$TMPDIR |
|
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 | installPhase = '' |
|
32 | installPhase = '' | |
31 | mkdir -p $out/tarballs |
|
33 | mkdir -p $out/tarballs | |
@@ -42,151 +44,322 b' let' | |||||
42 | # Bundle the dependencies of the package |
|
44 | # Bundle the dependencies of the package | |
43 | mkdir -p node_modules |
|
45 | mkdir -p node_modules | |
44 | cd node_modules |
|
46 | cd node_modules | |
45 |
|
47 | |||
46 | # Only include dependencies if they don't exist. They may also be bundled in the package. |
|
48 | # Only include dependencies if they don't exist. They may also be bundled in the package. | |
47 | if [ ! -e "${dependency.name}" ] |
|
49 | if [ ! -e "${dependency.name}" ] | |
48 | then |
|
50 | then | |
49 | ${composePackage dependency} |
|
51 | ${composePackage dependency} | |
50 | fi |
|
52 | fi | |
51 |
|
53 | |||
52 | cd .. |
|
54 | cd .. | |
53 | '' |
|
55 | '' | |
54 | ) dependencies); |
|
56 | ) dependencies); | |
55 |
|
57 | |||
56 | # Recursively composes the dependencies of a package |
|
58 | # Recursively composes the dependencies of a package | |
57 | composePackage = { name, packageName, src, dependencies ? [], ... }@args: |
|
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 | DIR=$(pwd) |
|
61 | DIR=$(pwd) | |
114 | cd $TMPDIR |
|
62 | cd $TMPDIR | |
115 |
|
63 | |||
116 | unpackFile ${src} |
|
64 | unpackFile ${src} | |
117 |
|
65 | |||
118 | # Make the base dir in which the target dependency resides first |
|
66 | # Make the base dir in which the target dependency resides first | |
119 | mkdir -p "$(dirname "$DIR/${packageName}")" |
|
67 | mkdir -p "$(dirname "$DIR/${packageName}")" | |
120 |
|
68 | |||
121 | if [ -f "${src}" ] |
|
69 | if [ -f "${src}" ] | |
122 | then |
|
70 | then | |
123 | # Figure out what directory has been unpacked |
|
71 | # Figure out what directory has been unpacked | |
124 |
packageDir=$(find . - |
|
72 | packageDir="$(find . -maxdepth 1 -type d | tail -1)" | |
125 |
|
73 | |||
126 | # Restore write permissions to make building work |
|
74 | # Restore write permissions to make building work | |
|
75 | find "$packageDir" -type d -print0 | xargs -0 chmod u+x | |||
127 | chmod -R u+w "$packageDir" |
|
76 | chmod -R u+w "$packageDir" | |
128 |
|
77 | |||
129 | # Move the extracted tarball into the output folder |
|
78 | # Move the extracted tarball into the output folder | |
130 | mv "$packageDir" "$DIR/${packageName}" |
|
79 | mv "$packageDir" "$DIR/${packageName}" | |
131 | elif [ -d "${src}" ] |
|
80 | elif [ -d "${src}" ] | |
132 | then |
|
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 | # Restore write permissions to make building work |
|
89 | # Restore write permissions to make building work | |
134 |
|
|
90 | chmod -R u+w "$strippedName" | |
135 |
|
91 | |||
136 |
|
|
92 | # Move the extracted directory into the output folder | |
137 |
|
|
93 | mv "$strippedName" "$DIR/${packageName}" | |
138 | fi |
|
94 | fi | |
139 |
|
95 | |||
140 | # Unset the stripped name to not confuse the next unpack step |
|
96 | # Unset the stripped name to not confuse the next unpack step | |
141 | unset strippedName |
|
97 | unset strippedName | |
142 |
|
98 | |||
143 | # Some version specifiers (latest, unstable, URLs, file paths) force NPM to make remote connections or consult paths outside the Nix store. |
|
99 | # Include the dependencies of the package | |
144 | # The following JavaScript replaces these by * to prevent that |
|
|||
145 | cd "$DIR/${packageName}" |
|
100 | cd "$DIR/${packageName}" | |
146 | node ${fixImpureDependencies} |
|
|||
147 |
|
||||
148 | # Include the dependencies of the package |
|
|||
149 | ${includeDependencies { inherit dependencies; }} |
|
101 | ${includeDependencies { inherit dependencies; }} | |
150 | cd .. |
|
102 | cd .. | |
151 | ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} |
|
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 | # Extract the Node.js source code which is used to compile packages with |
|
190 | # Extract the Node.js source code which is used to compile packages with | |
155 | # native bindings |
|
191 | # native bindings | |
156 | nodeSources = runCommand "node-sources" {} '' |
|
192 | nodeSources = runCommand "node-sources" {} '' | |
157 | tar --no-same-owner --no-same-permissions -xf ${nodejs.src} |
|
193 | tar --no-same-owner --no-same-permissions -xf ${nodejs.src} | |
158 | mv node-* $out |
|
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 | # Builds and composes an NPM package including all its dependencies |
|
311 | # Builds and composes an NPM package including all its dependencies | |
162 | buildNodePackage = { name, packageName, version, dependencies ? [], production ? true, npmFlags ? "", dontNpmInstall ? false, preRebuild ? "", ... }@args: |
|
312 | buildNodePackage = | |
163 |
|
313 | { name | ||
164 | stdenv.lib.makeOverridable stdenv.mkDerivation (builtins.removeAttrs args [ "dependencies" ] // { |
|
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 | name = "node-${name}-${version}"; |
|
333 | name = "node-${name}-${version}"; | |
166 | buildInputs = [ tarWrapper python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or []; |
|
334 | buildInputs = [ tarWrapper python nodejs ] | |
167 | dontStrip = args.dontStrip or true; # Striping may fail a build for some package deployments |
|
335 | ++ stdenv.lib.optional (stdenv.isLinux) utillinux | |
168 |
|
336 | ++ stdenv.lib.optional (stdenv.isDarwin) libtool | ||
169 | inherit dontNpmInstall preRebuild; |
|
337 | ++ buildInputs; | |
170 |
|
338 | |||
171 | unpackPhase = args.unpackPhase or "true"; |
|
339 | inherit dontStrip; # Stripping may fail a build for some package deployments | |
172 |
|
340 | inherit dontNpmInstall preRebuild unpackPhase buildPhase; | ||
173 | buildPhase = args.buildPhase or "true"; |
|
341 | ||
174 |
|
||||
175 | compositionScript = composePackage args; |
|
342 | compositionScript = composePackage args; | |
176 | passAsFile = [ "compositionScript" ]; |
|
343 | pinpointDependenciesScript = pinpointDependenciesOfPackage args; | |
177 |
|
344 | |||
178 | installPhase = args.installPhase or '' |
|
345 | passAsFile = [ "compositionScript" "pinpointDependenciesScript" ]; | |
|
346 | ||||
|
347 | installPhase = '' | |||
179 | # Create and enter a root node_modules/ folder |
|
348 | # Create and enter a root node_modules/ folder | |
180 | mkdir -p $out/lib/node_modules |
|
349 | mkdir -p $out/lib/node_modules | |
181 | cd $out/lib/node_modules |
|
350 | cd $out/lib/node_modules | |
182 |
|
351 | |||
183 | # Compose the package and all its dependencies |
|
352 | # Compose the package and all its dependencies | |
184 | source $compositionScriptPath |
|
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 | # Patch the shebangs of the bundled modules to prevent them from |
|
359 | # Patch the shebangs of the bundled modules to prevent them from | |
187 | # calling executables outside the Nix store as much as possible |
|
360 | # calling executables outside the Nix store as much as possible | |
188 | patchShebangs . |
|
361 | patchShebangs . | |
189 |
|
362 | |||
190 | # Deploy the Node.js package by running npm install. Since the |
|
363 | # Deploy the Node.js package by running npm install. Since the | |
191 | # dependencies have been provided already by ourselves, it should not |
|
364 | # dependencies have been provided already by ourselves, it should not | |
192 | # attempt to install them again, which is good, because we want to make |
|
365 | # attempt to install them again, which is good, because we want to make | |
@@ -196,23 +369,37 b' let' | |||||
196 | # |
|
369 | # | |
197 | # The other responsibilities of NPM are kept -- version checks, build |
|
370 | # The other responsibilities of NPM are kept -- version checks, build | |
198 | # steps, postprocessing etc. |
|
371 | # steps, postprocessing etc. | |
199 |
|
372 | |||
200 | export HOME=$TMPDIR |
|
373 | export HOME=$TMPDIR | |
201 | cd "${packageName}" |
|
374 | cd "${packageName}" | |
202 | runHook preRebuild |
|
375 | runHook preRebuild | |
203 | npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild |
|
376 | ||
204 |
|
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 | if [ "$dontNpmInstall" != "1" ] |
|
389 | if [ "$dontNpmInstall" != "1" ] | |
206 | then |
|
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 | fi |
|
395 | fi | |
209 |
|
396 | |||
210 | # Create symlink to the deployed executable folder, if applicable |
|
397 | # Create symlink to the deployed executable folder, if applicable | |
211 | if [ -d "$out/lib/node_modules/.bin" ] |
|
398 | if [ -d "$out/lib/node_modules/.bin" ] | |
212 | then |
|
399 | then | |
213 | ln -s $out/lib/node_modules/.bin $out/bin |
|
400 | ln -s $out/lib/node_modules/.bin $out/bin | |
214 | fi |
|
401 | fi | |
215 |
|
402 | |||
216 | # Create symlinks to the deployed manual page folders, if applicable |
|
403 | # Create symlinks to the deployed manual page folders, if applicable | |
217 | if [ -d "$out/lib/node_modules/${packageName}/man" ] |
|
404 | if [ -d "$out/lib/node_modules/${packageName}/man" ] | |
218 | then |
|
405 | then | |
@@ -226,52 +413,111 b' let' | |||||
226 | done |
|
413 | done | |
227 | done |
|
414 | done | |
228 | fi |
|
415 | fi | |
|
416 | ||||
|
417 | # Run post install hook, if provided | |||
|
418 | runHook postInstall | |||
229 | ''; |
|
419 | ''; | |
230 | }); |
|
420 | } // extraArgs); | |
231 |
|
421 | |||
232 | # Builds a development shell |
|
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 | let |
|
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 | name = "node-dependencies-${name}-${version}"; |
|
445 | name = "node-dependencies-${name}-${version}"; | |
237 |
|
446 | |||
238 | buildInputs = [ tarWrapper python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or []; |
|
447 | buildInputs = [ tarWrapper python nodejs ] | |
239 |
|
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 | includeScript = includeDependencies { inherit dependencies; }; |
|
455 | includeScript = includeDependencies { inherit dependencies; }; | |
241 | passAsFile = [ "includeScript" ]; |
|
456 | pinpointDependenciesScript = pinpointDependenciesOfPackage args; | |
242 |
|
457 | |||
243 | buildCommand = '' |
|
458 | passAsFile = [ "includeScript" "pinpointDependenciesScript" ]; | |
244 | mkdir -p $out/lib |
|
459 | ||
245 | cd $out/lib |
|
460 | installPhase = '' | |
|
461 | mkdir -p $out/${packageName} | |||
|
462 | cd $out/${packageName} | |||
|
463 | ||||
246 | source $includeScriptPath |
|
464 | source $includeScriptPath | |
247 |
|
465 | |||
248 | # Create fake package.json to make the npm commands work properly |
|
466 | # Create fake package.json to make the npm commands work properly | |
249 |
c |
|
467 | cp ${src}/package.json . | |
250 | { |
|
468 | chmod 644 package.json | |
251 | "name": "${packageName}", |
|
469 | ${stdenv.lib.optionalString bypassCache '' | |
252 | "version": "${version}" |
|
470 | if [ -f ${src}/package-lock.json ] | |
253 |
|
|
471 | then | |
254 | EOF |
|
472 | cp ${src}/package-lock.json . | |
255 |
|
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 | # Patch the shebangs of the bundled modules to prevent them from |
|
484 | # Patch the shebangs of the bundled modules to prevent them from | |
257 | # calling executables outside the Nix store as much as possible |
|
485 | # calling executables outside the Nix store as much as possible | |
258 | patchShebangs . |
|
486 | patchShebangs . | |
259 |
|
487 | |||
260 |
export HOME=$ |
|
488 | export HOME=$PWD | |
261 | npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild |
|
489 | ||
262 |
|
490 | ${stdenv.lib.optionalString bypassCache '' | ||
263 | ${stdenv.lib.optionalString (!dontNpmInstall) '' |
|
491 | if [ ! -f package-lock.json ] | |
264 | npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install |
|
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 | ln -s $out/lib/node_modules/.bin $out/bin |
|
513 | ln -s $out/lib/node_modules/.bin $out/bin | |
268 | ''; |
|
514 | ''; | |
269 | }; |
|
515 | } // extraArgs); | |
270 | in |
|
516 | in | |
271 |
|
|
517 | stdenv.mkDerivation { | |
272 | name = "node-shell-${name}-${version}"; |
|
518 | name = "node-shell-${name}-${version}"; | |
273 |
|
519 | |||
274 |
buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ |
|
520 | buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ buildInputs; | |
275 | buildCommand = '' |
|
521 | buildCommand = '' | |
276 | mkdir -p $out/bin |
|
522 | mkdir -p $out/bin | |
277 | cat > $out/bin/shell <<EOF |
|
523 | cat > $out/bin/shell <<EOF | |
@@ -281,7 +527,7 b' let' | |||||
281 | EOF |
|
527 | EOF | |
282 | chmod +x $out/bin/shell |
|
528 | chmod +x $out/bin/shell | |
283 | ''; |
|
529 | ''; | |
284 |
|
530 | |||
285 | # Provide the dependencies in a development shell through the NODE_PATH environment variable |
|
531 | # Provide the dependencies in a development shell through the NODE_PATH environment variable | |
286 | inherit nodeDependencies; |
|
532 | inherit nodeDependencies; | |
287 | shellHook = stdenv.lib.optionalString (dependencies != []) '' |
|
533 | shellHook = stdenv.lib.optionalString (dependencies != []) '' | |
@@ -289,4 +535,8 b' let' | |||||
289 | ''; |
|
535 | ''; | |
290 | }; |
|
536 | }; | |
291 | in |
|
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 |
|
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 |
|
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 | # python-packages.nix. The main objective is to add needed dependencies of C |
|
4 | # python-packages.nix. The main objective is to add needed dependencies of C | |
5 | # libraries and tweak the build instructions where needed. |
|
5 | # libraries and tweak the build instructions where needed. | |
6 |
|
6 | |||
7 | { pkgs, basePythonPackages }: |
|
7 | { pkgs | |
|
8 | , basePythonPackages | |||
|
9 | }: | |||
8 |
|
10 | |||
9 | let |
|
11 | let | |
10 | sed = "sed -i"; |
|
12 | sed = "sed -i"; | |
|
13 | ||||
11 | localLicenses = { |
|
14 | localLicenses = { | |
12 | repoze = { |
|
15 | repoze = { | |
13 | fullName = "Repoze License"; |
|
16 | fullName = "Repoze License"; | |
@@ -19,32 +22,41 b' in' | |||||
19 |
|
22 | |||
20 | self: super: { |
|
23 | self: super: { | |
21 |
|
24 | |||
22 | appenlight-client = super.appenlight-client.override (attrs: { |
|
25 | "appenlight-client" = super."appenlight-client".override (attrs: { | |
23 | meta = { |
|
26 | meta = { | |
24 | license = [ pkgs.lib.licenses.bsdOriginal ]; |
|
27 | license = [ pkgs.lib.licenses.bsdOriginal ]; | |
25 | }; |
|
28 | }; | |
26 | }); |
|
29 | }); | |
27 |
|
30 | |||
28 |
|
|
31 | "beaker" = super."beaker".override (attrs: { | |
29 | patches = [ |
|
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 | meta = { |
|
47 | meta = { | |
36 | license = [ pkgs.lib.licenses.mit ]; |
|
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 | meta = { |
|
53 | meta = { | |
42 | license = [ pkgs.lib.licenses.mit ]; |
|
54 | license = [ pkgs.lib.licenses.mit ]; | |
43 | }; |
|
55 | }; | |
44 | }); |
|
56 | }); | |
45 |
|
57 | |||
46 | gnureadline = super.gnureadline.override (attrs: { |
|
58 | "gnureadline" = super."gnureadline".override (attrs: { | |
47 |
buildInputs = |
|
59 | buildInputs = [ | |
48 | pkgs.ncurses |
|
60 | pkgs.ncurses | |
49 | ]; |
|
61 | ]; | |
50 | patchPhase = '' |
|
62 | patchPhase = '' | |
@@ -52,56 +64,50 b' self: super: {' | |||||
52 | ''; |
|
64 | ''; | |
53 | }); |
|
65 | }); | |
54 |
|
66 | |||
55 | gunicorn = super.gunicorn.override (attrs: { |
|
67 | "gunicorn" = super."gunicorn".override (attrs: { | |
56 |
propagatedBuildInputs = |
|
68 | propagatedBuildInputs = [ | |
57 | # johbo: futures is needed as long as we are on Python 2, otherwise |
|
69 | # johbo: futures is needed as long as we are on Python 2, otherwise | |
58 | # gunicorn explodes if used with multiple threads per worker. |
|
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 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ |
|
76 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ | |
65 | # marcink: plug in jupyter-client for notebook rendering |
|
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 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ |
|
83 | propagatedBuildInputs = attrs.propagatedBuildInputs ++ [ | |
72 | self.gnureadline |
|
84 | self."gnureadline" | |
73 | ]; |
|
85 | ]; | |
74 | }); |
|
86 | }); | |
75 |
|
87 | |||
76 | lxml = super.lxml.override (attrs: { |
|
88 | "lxml" = super."lxml".override (attrs: { | |
77 | # johbo: On 16.09 we need this to compile on darwin, otherwise compilation |
|
89 | buildInputs = [ | |
78 | # fails on Darwin. |
|
|||
79 | hardeningDisable = if pkgs.stdenv.isDarwin then [ "format" ] else null; |
|
|||
80 | buildInputs = with self; [ |
|
|||
81 | pkgs.libxml2 |
|
90 | pkgs.libxml2 | |
82 | pkgs.libxslt |
|
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 |
|
|
99 | "mysql-python" = super."mysql-python".override (attrs: { | |
87 |
buildInputs = |
|
100 | buildInputs = [ | |
88 | pkgs.openssl |
|
101 | pkgs.openssl | |
89 | ]; |
|
102 | ]; | |
90 |
propagatedBuildInputs = |
|
103 | propagatedBuildInputs = [ | |
91 | pkgs.libmysql |
|
104 | pkgs.libmysql | |
92 | pkgs.zlib |
|
105 | pkgs.zlib | |
93 | ]; |
|
106 | ]; | |
94 | }); |
|
107 | }); | |
95 |
|
108 | |||
96 |
|
|
109 | "psycopg2" = super."psycopg2".override (attrs: { | |
97 | buildInputs = attrs.buildInputs ++ |
|
110 | propagatedBuildInputs = [ | |
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 ++ [ |
|
|||
105 | pkgs.postgresql |
|
111 | pkgs.postgresql | |
106 | ]; |
|
112 | ]; | |
107 | meta = { |
|
113 | meta = { | |
@@ -109,8 +115,8 b' self: super: {' | |||||
109 | }; |
|
115 | }; | |
110 | }); |
|
116 | }); | |
111 |
|
117 | |||
112 | pycurl = super.pycurl.override (attrs: { |
|
118 | "pycurl" = super."pycurl".override (attrs: { | |
113 |
propagatedBuildInputs = |
|
119 | propagatedBuildInputs = [ | |
114 | pkgs.curl |
|
120 | pkgs.curl | |
115 | pkgs.openssl |
|
121 | pkgs.openssl | |
116 | ]; |
|
122 | ]; | |
@@ -119,30 +125,23 b' self: super: {' | |||||
119 | export PYCURL_SSL_LIBRARY=openssl |
|
125 | export PYCURL_SSL_LIBRARY=openssl | |
120 | ''; |
|
126 | ''; | |
121 | meta = { |
|
127 | meta = { | |
122 | # TODO: It is LGPL and MIT |
|
|||
123 | license = pkgs.lib.licenses.mit; |
|
128 | license = pkgs.lib.licenses.mit; | |
124 | }; |
|
129 | }; | |
125 | }); |
|
130 | }); | |
126 |
|
131 | |||
127 | pyramid = super.pyramid.override (attrs: { |
|
132 | "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 | ''; |
|
|||
134 | meta = { |
|
133 | meta = { | |
135 | license = localLicenses.repoze; |
|
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 | meta = { |
|
139 | meta = { | |
141 | license = [ pkgs.lib.licenses.bsdOriginal localLicenses.repoze ]; |
|
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 | propagatedBuildInputs = [ |
|
145 | propagatedBuildInputs = [ | |
147 | pkgs.sqlite |
|
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 | propagatedBuildInputs = [ |
|
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- |
|
167 | "python-pam" = super."python-pam".override (attrs: { | |
161 |
propagatedBuildInputs = |
|
168 | propagatedBuildInputs = [ | |
162 |
pkgs. |
|
169 | pkgs.pam | |
163 | pkgs.openldap |
|
|||
164 | pkgs.openssl |
|
|||
165 | ]; |
|
170 | ]; | |
166 | # TODO: johbo: Remove the "or" once we drop 16.03 support. |
|
171 | # TODO: johbo: Check if this can be avoided, or transform into | |
167 | NIX_CFLAGS_COMPILE = "-I${pkgs.cyrus_sasl.dev or pkgs.cyrus_sasl}/include/sasl"; |
|
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 |
|
|
185 | "urlobject" = super."urlobject".override (attrs: { | |
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: { |
|
|||
189 | meta = { |
|
186 | meta = { | |
190 | license = { |
|
187 | license = { | |
191 | spdxId = "Unlicense"; |
|
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 | meta = { |
|
196 | meta = { | |
200 | license = pkgs.lib.licenses.bsd2; |
|
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 | meta = { |
|
202 | meta = { | |
206 | license = localLicenses.repoze; |
|
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 | meta = { |
|
208 | meta = { | |
212 | license = localLicenses.repoze; |
|
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 | meta = { |
|
214 | meta = { | |
218 | license = localLicenses.repoze; |
|
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 | meta = { |
|
220 | meta = { | |
224 | license = localLicenses.repoze; |
|
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 | meta = { |
|
226 | meta = { | |
230 | license = pkgs.lib.licenses.asl20; |
|
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 | meta = { |
|
232 | meta = { | |
236 | license = localLicenses.repoze; |
|
233 | license = localLicenses.repoze; | |
237 | }; |
|
234 | }; | |
238 | }); |
|
235 | }); | |
239 |
|
236 | |||
240 | venusian = super.venusian.override (attrs: { |
|
237 | "venusian" = super."venusian".override (attrs: { | |
241 | meta = { |
|
238 | meta = { | |
242 | license = localLicenses.repoze; |
|
239 | license = localLicenses.repoze; | |
243 | }; |
|
240 | }; | |
244 | }); |
|
241 | }); | |
245 |
|
242 | |||
246 | # Avoid that setuptools is replaced, this leads to trouble |
|
243 | # Avoid that base packages screw up the build process | |
247 |
|
|
244 | inherit (basePythonPackages) | |
248 | setuptools = basePythonPackages.setuptools; |
|
245 | setuptools; | |
249 |
|
246 | |||
250 | } |
|
247 | } |
1 | NO CONTENT: modified file |
|
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 | [pytest] |
|
1 | [pytest] | |
2 | testpaths = rhodecode |
|
2 | testpaths = rhodecode | |
3 | norecursedirs = rhodecode/public rhodecode/templates tests/scripts |
|
3 | norecursedirs = rhodecode/public rhodecode/templates tests/scripts | |
|
4 | cache_dir = /tmp/.pytest_cache | |||
4 |
|
5 | |||
5 | pyramid_config = rhodecode/tests/rhodecode.ini |
|
6 | pyramid_config = rhodecode/tests/rhodecode.ini | |
6 | vcsserver_protocol = http |
|
7 | vcsserver_protocol = http |
@@ -1,232 +1,21 b'' | |||||
1 | # |
|
1 | # This file defines how to "build" for packaging. | |
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. |
|
|||
26 |
|
2 | |||
27 | { pkgs ? import <nixpkgs> {} |
|
3 | { pkgs ? import <nixpkgs> {} | |
28 |
, doCheck ? |
|
4 | , doCheck ? false | |
29 | }: |
|
5 | }: | |
30 |
|
6 | |||
31 | let |
|
7 | let | |
32 |
|
8 | enterprise_ce = import ./default.nix { | ||
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 { |
|
|||
70 | inherit |
|
9 | inherit | |
|
10 | doCheck | |||
71 | pkgs; |
|
11 | pkgs; | |
72 |
|
12 | |||
73 | # TODO: for quick local testing |
|
13 | # disable checkPhase for build | |
74 | doCheck = false; |
|
14 | checkPhase = '' | |
75 | }; |
|
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 |
|
19 | in { | |
108 | # needed environment for the ac-test tools. |
|
20 | build = enterprise_ce; | |
109 | mkAcTests = { |
|
21 | } | |
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 |
|
@@ -1,129 +1,129 b'' | |||||
1 | ## core |
|
1 | ## dependencies | |
2 | setuptools==30.1.0 |
|
|||
3 | setuptools-scm==1.15.6 |
|
|||
4 |
|
2 | |||
5 | amqp==2.2.2 |
|
3 | setuptools-scm==2.1.0 | |
|
4 | amqp==2.3.1 | |||
6 | # not released authomatic that has updated some oauth providers |
|
5 | # not released authomatic that has updated some oauth providers | |
7 | https://code.rhodecode.com/upstream/authomatic/archive/90a9ce60cc405ae8a2bf5c3713acd5d78579a04e.tar.gz?md5=3c68720a1322b25254009518d1ff6801#egg=authomatic==0.1.0.post1 |
|
6 | https://code.rhodecode.com/upstream/authomatic/archive/90a9ce60cc405ae8a2bf5c3713acd5d78579a04e.tar.gz?md5=3c68720a1322b25254009518d1ff6801#egg=authomatic==0.1.0.post1 | |
8 |
|
|
7 | babel==1.3 | |
9 |
|
|
8 | beaker==1.9.1 | |
10 |
celery==4.1. |
|
9 | celery==4.1.1 | |
11 |
|
|
10 | chameleon==2.24 | |
12 | channelstream==0.5.2 |
|
11 | channelstream==0.5.2 | |
13 | click==6.6 |
|
12 | click==6.6 | |
14 | colander==1.4.0 |
|
13 | colander==1.4.0 | |
15 | configobj==5.0.6 |
|
14 | # our custom configobj | |
16 | cssselect==1.0.1 |
|
15 | https://code.rhodecode.com/upstream/configobj/archive/a11ff0a0bd4fbda9e3a91267e720f88329efb4a6.tar.gz?md5=9916c524ea11a6c418217af6b28d4b3c#egg=configobj==5.0.6 | |
|
16 | cssselect==1.0.3 | |||
17 | decorator==4.1.2 |
|
17 | decorator==4.1.2 | |
18 |
deform==2.0. |
|
18 | deform==2.0.5 | |
19 | docutils==0.14.0 |
|
19 | docutils==0.14.0 | |
20 |
dogpile.cache==0.6. |
|
20 | dogpile.cache==0.6.6 | |
21 | dogpile.core==0.4.1 |
|
21 | dogpile.core==0.4.1 | |
22 | ecdsa==0.13 |
|
22 | ecdsa==0.13 | |
23 |
|
|
23 | formencode==1.2.4 | |
24 | future==0.14.3 |
|
24 | future==0.14.3 | |
25 | futures==3.0.2 |
|
25 | futures==3.0.2 | |
26 | gnureadline==6.3.8 |
|
26 | gnureadline==6.3.8 | |
27 | infrae.cache==1.0.1 |
|
27 | infrae.cache==1.0.1 | |
28 |
iso8601==0.1.1 |
|
28 | iso8601==0.1.11 | |
29 | itsdangerous==0.24 |
|
29 | itsdangerous==0.24 | |
30 |
|
|
30 | jinja2==2.9.6 | |
31 | billiard==3.5.0.3 |
|
31 | billiard==3.5.0.3 | |
32 |
kombu==4. |
|
32 | kombu==4.2.0 | |
33 | lxml==3.7.3 |
|
33 | lxml==3.7.3 | |
34 |
|
|
34 | mako==1.0.7 | |
35 |
|
|
35 | markdown==2.6.11 | |
36 |
|
|
36 | markupsafe==1.0.0 | |
37 |
msgpack-python==0. |
|
37 | msgpack-python==0.5.6 | |
38 |
|
|
38 | mysql-python==1.2.5 | |
|
39 | pymysql==0.8.1 | |||
|
40 | pyotp==2.2.6 | |||
39 | objgraph==3.1.1 |
|
41 | objgraph==3.1.1 | |
40 | packaging==15.2 |
|
42 | packaging==15.2 | |
41 |
|
|
43 | paste==2.0.3 | |
42 |
|
|
44 | pastedeploy==1.5.2 | |
43 |
|
|
45 | pastescript==2.0.2 | |
44 | pathlib2==2.3.0 |
|
46 | pathlib2==2.3.0 | |
45 | peppercorn==0.5 |
|
47 | peppercorn==0.5 | |
46 |
psutil==5.4. |
|
48 | psutil==5.4.6 | |
47 |
psycopg2==2.7. |
|
49 | psycopg2==2.7.4 | |
48 | py-bcrypt==0.4 |
|
50 | py-bcrypt==0.4 | |
49 | pycrypto==2.6.1 |
|
51 | pycrypto==2.6.1 | |
50 |
pycurl==7. |
|
52 | pycurl==7.43.0.2 | |
51 | pyflakes==0.8.1 |
|
53 | pyflakes==0.8.1 | |
52 | pygments-markdown-lexer==0.1.0.dev39 |
|
54 | pygments-markdown-lexer==0.1.0.dev39 | |
53 |
|
|
55 | pygments==2.2.0 | |
54 | pyparsing==1.5.7 |
|
56 | pyparsing==1.5.7 | |
55 | pyramid-beaker==0.8 |
|
57 | pyramid-beaker==0.8 | |
56 |
pyramid-debugtoolbar==4. |
|
58 | pyramid-debugtoolbar==4.4.0 | |
57 | pyramid-jinja2==2.7 |
|
59 | pyramid-jinja2==2.7 | |
58 | pyramid-mako==1.0.2 |
|
60 | pyramid-mako==1.0.2 | |
59 |
pyramid==1.9. |
|
61 | pyramid==1.9.2 | |
60 | pysqlite==2.8.3 |
|
62 | pysqlite==2.8.3 | |
61 | python-dateutil |
|
63 | python-dateutil | |
62 |
python-ldap== |
|
64 | python-ldap==3.1.0 | |
63 |
python-memcached==1.5 |
|
65 | python-memcached==1.59 | |
64 |
python-pam==1.8. |
|
66 | python-pam==1.8.4 | |
65 |
pytz==2018. |
|
67 | pytz==2018.4 | |
66 | tzlocal==1.5.1 |
|
68 | tzlocal==1.5.1 | |
67 | pyzmq==14.6.0 |
|
69 | pyzmq==14.6.0 | |
68 | py-gfm==0.1.3 |
|
70 | py-gfm==0.1.3 | |
69 | redis==2.10.6 |
|
71 | redis==2.10.6 | |
70 | repoze.lru==0.7 |
|
72 | repoze.lru==0.7 | |
71 | requests==2.9.1 |
|
73 | requests==2.9.1 | |
72 |
|
|
74 | routes==2.4.1 | |
73 | setproctitle==1.1.10 |
|
75 | setproctitle==1.1.10 | |
74 | simplejson==3.11.1 |
|
76 | simplejson==3.11.1 | |
75 | six==1.11.0 |
|
77 | six==1.11.0 | |
76 |
|
|
78 | sqlalchemy==1.1.18 | |
77 | sshpubkeys==2.2.0 |
|
79 | sshpubkeys==2.2.0 | |
78 |
subprocess32==3. |
|
80 | subprocess32==3.5.1 | |
79 | supervisor==3.3.4 |
|
81 | supervisor==3.3.4 | |
80 |
|
|
82 | tempita==0.5.2 | |
81 | translationstring==1.3 |
|
83 | translationstring==1.3 | |
82 | trollius==1.0.4 |
|
84 | trollius==1.0.4 | |
83 |
urllib3==1.1 |
|
85 | urllib3==1.21 | |
84 |
|
|
86 | urlobject==2.4.3 | |
85 | venusian==1.1.0 |
|
87 | venusian==1.1.0 | |
86 |
|
|
88 | weberror==0.10.3 | |
87 |
|
|
89 | webhelpers2==2.0 | |
88 |
|
|
90 | webhelpers==1.3 | |
89 |
|
|
91 | webob==1.7.4 | |
90 |
|
|
92 | whoosh==2.7.4 | |
91 | wsgiref==0.1.2 |
|
93 | wsgiref==0.1.2 | |
92 | zope.cachedescriptors==4.3.1 |
|
94 | zope.cachedescriptors==4.3.1 | |
93 | zope.deprecation==4.3.0 |
|
95 | zope.deprecation==4.3.0 | |
94 | zope.event==4.3.0 |
|
96 | zope.event==4.3.0 | |
95 |
zope.interface==4. |
|
97 | zope.interface==4.5.0 | |
96 |
|
98 | |||
97 |
|
99 | |||
98 | # IPYTHON RENDERING |
|
100 | # IPYTHON RENDERING | |
99 | # entrypoints backport, pypi version doesn't support egg installs |
|
101 | # entrypoints backport, pypi version doesn't support egg installs | |
100 | https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313#egg=entrypoints==0.2.2.rhodecode-upstream1 |
|
102 | https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313#egg=entrypoints==0.2.2.rhodecode-upstream1 | |
101 | nbconvert==5.3.1 |
|
103 | nbconvert==5.3.1 | |
102 |
bleach==2.1. |
|
104 | bleach==2.1.4 | |
103 | nbformat==4.4.0 |
|
105 | nbformat==4.4.0 | |
104 | jupyter_client==5.0.0 |
|
106 | jupyter_client==5.0.0 | |
105 |
|
107 | |||
106 | ## cli tools |
|
108 | ## cli tools | |
107 |
alembic==0.9. |
|
109 | alembic==0.9.9 | |
108 | invoke==0.13.0 |
|
110 | invoke==0.13.0 | |
109 | bumpversion==0.5.3 |
|
111 | bumpversion==0.5.3 | |
110 | transifex-client==0.12.5 |
|
|||
111 |
|
112 | |||
112 | ## http servers |
|
113 | ## http servers | |
113 |
gevent==1. |
|
114 | gevent==1.3.5 | |
114 | greenlet==0.4.13 |
|
115 | greenlet==0.4.13 | |
115 |
gunicorn==19. |
|
116 | gunicorn==19.9.0 | |
116 | waitress==1.1.0 |
|
117 | waitress==1.1.0 | |
117 | uWSGI==2.0.15 |
|
|||
118 |
|
118 | |||
119 | ## debug |
|
119 | ## debug | |
120 |
ipdb==0.1 |
|
120 | ipdb==0.11.0 | |
121 | ipython==5.1.0 |
|
121 | ipython==5.1.0 | |
122 |
|
|
122 | cprofilev==1.0.7 | |
123 | bottle==0.12.13 |
|
123 | bottle==0.12.13 | |
124 |
|
124 | |||
125 | ## rhodecode-tools, special case |
|
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 | ## appenlight |
|
128 | ## appenlight | |
129 | appenlight-client==0.6.25 |
|
129 | appenlight-client==0.6.25 |
@@ -1,15 +1,14 b'' | |||||
1 | # test related requirements |
|
1 | # test related requirements | |
2 |
pytest==3. |
|
2 | pytest==3.6.0 | |
3 |
py==1.5. |
|
3 | py==1.5.3 | |
4 | pytest-cov==2.5.1 |
|
4 | pytest-cov==2.5.1 | |
5 |
pytest-sugar==0.9. |
|
5 | pytest-sugar==0.9.1 | |
6 |
pytest-runner== |
|
6 | pytest-runner==4.2.0 | |
7 |
pytest- |
|
7 | pytest-profiling==1.3.0 | |
8 | pytest-profiling==1.2.11 |
|
|||
9 | gprof2dot==2017.9.19 |
|
8 | gprof2dot==2017.9.19 | |
10 |
pytest-timeout==1.2. |
|
9 | pytest-timeout==1.2.1 | |
11 |
|
10 | |||
12 | mock==1.0.1 |
|
11 | mock==1.0.1 | |
13 |
|
|
12 | webtest==2.0.29 | |
14 | cov-core==1.15.0 |
|
13 | cov-core==1.15.0 | |
15 | coverage==3.7.1 |
|
14 | coverage==3.7.1 |
@@ -51,7 +51,7 b' PYRAMID_SETTINGS = {}' | |||||
51 | EXTENSIONS = {} |
|
51 | EXTENSIONS = {} | |
52 |
|
52 | |||
53 | __version__ = ('.'.join((str(each) for each in VERSION[:3]))) |
|
53 | __version__ = ('.'.join((str(each) for each in VERSION[:3]))) | |
54 |
__dbversion__ = |
|
54 | __dbversion__ = 90 # defines current db version for migrations | |
55 | __platform__ = platform.system() |
|
55 | __platform__ = platform.system() | |
56 | __license__ = 'AGPLv3, and Commercial License' |
|
56 | __license__ = 'AGPLv3, and Commercial License' | |
57 | __author__ = 'RhodeCode GmbH' |
|
57 | __author__ = 'RhodeCode GmbH' |
@@ -208,6 +208,7 b' def request_view(request):' | |||||
208 |
|
208 | |||
209 | # register our auth-user |
|
209 | # register our auth-user | |
210 | request.rpc_user = auth_u |
|
210 | request.rpc_user = auth_u | |
|
211 | request.environ['rc_auth_user_id'] = auth_u.user_id | |||
211 |
|
212 | |||
212 | # now check if token is valid for API |
|
213 | # now check if token is valid for API | |
213 | auth_token = request.rpc_api_key |
|
214 | auth_token = request.rpc_api_key |
@@ -119,6 +119,7 b' class TestCreatePullRequestApi(object):' | |||||
119 | 'mandatory': True}, |
|
119 | 'mandatory': True}, | |
120 | ] |
|
120 | ] | |
121 | data['reviewers'] = reviewers |
|
121 | data['reviewers'] = reviewers | |
|
122 | ||||
122 | id_, params = build_data( |
|
123 | id_, params = build_data( | |
123 | self.apikey_regular, 'create_pull_request', **data) |
|
124 | self.apikey_regular, 'create_pull_request', **data) | |
124 | response = api_call(self.app, params) |
|
125 | response = api_call(self.app, params) | |
@@ -251,8 +252,9 b' class TestCreatePullRequestApi(object):' | |||||
251 | id_, params = build_data( |
|
252 | id_, params = build_data( | |
252 | self.apikey_regular, 'create_pull_request', **data) |
|
253 | self.apikey_regular, 'create_pull_request', **data) | |
253 | response = api_call(self.app, params) |
|
254 | response = api_call(self.app, params) | |
254 |
expected_message = 'The specified |
|
255 | expected_message = 'The specified value:{type}:`{name}` ' \ | |
255 | branch_name) |
|
256 | 'does not exist, or is not allowed.'.format(type='branch', | |
|
257 | name=branch_name) | |||
256 | assert_error(id_, expected_message, given=response.body) |
|
258 | assert_error(id_, expected_message, given=response.body) | |
257 |
|
259 | |||
258 | @pytest.mark.backends("git", "hg") |
|
260 | @pytest.mark.backends("git", "hg") | |
@@ -316,6 +318,7 b' class TestCreatePullRequestApi(object):' | |||||
316 | self.commit_ids = backend.create_master_repo(commits) |
|
318 | self.commit_ids = backend.create_master_repo(commits) | |
317 | self.source = backend.create_repo(heads=[source_head]) |
|
319 | self.source = backend.create_repo(heads=[source_head]) | |
318 | self.target = backend.create_repo(heads=[target_head]) |
|
320 | self.target = backend.create_repo(heads=[target_head]) | |
|
321 | ||||
319 | data = { |
|
322 | data = { | |
320 | 'source_repo': self.source.repo_name, |
|
323 | 'source_repo': self.source.repo_name, | |
321 | 'target_repo': self.target.repo_name, |
|
324 | 'target_repo': self.target.repo_name, |
@@ -76,6 +76,8 b' class TestUpdateUser(object):' | |||||
76 | 'user': ret |
|
76 | 'user': ret | |
77 | } |
|
77 | } | |
78 | expected = ret |
|
78 | expected = ret | |
|
79 | expected['user']['last_activity'] = response.json['result']['user'][ | |||
|
80 | 'last_activity'] | |||
79 | assert_ok(id_, expected, given=response.body) |
|
81 | assert_ok(id_, expected, given=response.body) | |
80 |
|
82 | |||
81 | def test_api_update_user_by_user_id(self): |
|
83 | def test_api_update_user_by_user_id(self): | |
@@ -91,6 +93,8 b' class TestUpdateUser(object):' | |||||
91 | 'user': ret |
|
93 | 'user': ret | |
92 | } |
|
94 | } | |
93 | expected = ret |
|
95 | expected = ret | |
|
96 | expected['user']['last_activity'] = response.json['result']['user'][ | |||
|
97 | 'last_activity'] | |||
94 | assert_ok(id_, expected, given=response.body) |
|
98 | assert_ok(id_, expected, given=response.body) | |
95 |
|
99 | |||
96 | def test_api_update_user_default_user(self): |
|
100 | def test_api_update_user_default_user(self): |
@@ -87,7 +87,8 b' class TestResolveRefOrError(object):' | |||||
87 | ref = 'ancestor:ref' |
|
87 | ref = 'ancestor:ref' | |
88 | with pytest.raises(JSONRPCError) as excinfo: |
|
88 | with pytest.raises(JSONRPCError) as excinfo: | |
89 | utils.resolve_ref_or_error(ref, repo) |
|
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 | assert excinfo.value.message == expected_message |
|
92 | assert excinfo.value.message == expected_message | |
92 |
|
93 | |||
93 | def test_branch_is_not_found(self): |
|
94 | def test_branch_is_not_found(self): | |
@@ -99,7 +100,7 b' class TestResolveRefOrError(object):' | |||||
99 | with pytest.raises(JSONRPCError) as excinfo: |
|
100 | with pytest.raises(JSONRPCError) as excinfo: | |
100 | utils.resolve_ref_or_error(ref, repo) |
|
101 | utils.resolve_ref_or_error(ref, repo) | |
101 | expected_message = ( |
|
102 | expected_message = ( | |
102 |
'The specified branch |
|
103 | 'The specified value:branch:`non-existing-one` does not exist, or is not allowed.') | |
103 | assert excinfo.value.message == expected_message |
|
104 | assert excinfo.value.message == expected_message | |
104 |
|
105 | |||
105 | def test_bookmark_is_not_found(self): |
|
106 | def test_bookmark_is_not_found(self): | |
@@ -111,7 +112,7 b' class TestResolveRefOrError(object):' | |||||
111 | with pytest.raises(JSONRPCError) as excinfo: |
|
112 | with pytest.raises(JSONRPCError) as excinfo: | |
112 | utils.resolve_ref_or_error(ref, repo) |
|
113 | utils.resolve_ref_or_error(ref, repo) | |
113 | expected_message = ( |
|
114 | expected_message = ( | |
114 |
'The specified bookmark |
|
115 | 'The specified value:bookmark:`non-existing-one` does not exist, or is not allowed.') | |
115 | assert excinfo.value.message == expected_message |
|
116 | assert excinfo.value.message == expected_message | |
116 |
|
117 | |||
117 | @pytest.mark.parametrize("ref", ['ref', '12345', 'a:b:c:d']) |
|
118 | @pytest.mark.parametrize("ref", ['ref', '12345', 'a:b:c:d']) |
@@ -403,7 +403,7 b' def resolve_ref_or_error(ref, repo):' | |||||
403 | ref_hash = ref_hash or _get_ref_hash(repo, ref_type, ref_name) |
|
403 | ref_hash = ref_hash or _get_ref_hash(repo, ref_type, ref_name) | |
404 | except (KeyError, ValueError): |
|
404 | except (KeyError, ValueError): | |
405 | raise JSONRPCError( |
|
405 | raise JSONRPCError( | |
406 |
'The specified {type} |
|
406 | 'The specified value:{type}:`{name}` does not exist, or is not allowed.'.format( | |
407 | type=ref_type, name=ref_name)) |
|
407 | type=ref_type, name=ref_name)) | |
408 |
|
408 | |||
409 | return ':'.join([ref_type, ref_name, ref_hash]) |
|
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 | def _get_ref_hash(repo, type_, name): |
|
434 | def _get_ref_hash(repo, type_, name): | |
436 | vcs_repo = repo.scm_instance() |
|
435 | vcs_repo = repo.scm_instance() | |
437 | if type_ == 'branch' and vcs_repo.alias in ('hg', 'git'): |
|
436 | if type_ == 'branch' and vcs_repo.alias in ('hg', 'git'): |
@@ -284,7 +284,7 b' def merge_pull_request(' | |||||
284 | raise JSONRPCError('userid is not the same as your user') |
|
284 | raise JSONRPCError('userid is not the same as your user') | |
285 |
|
285 | |||
286 | check = MergeCheck.validate( |
|
286 | check = MergeCheck.validate( | |
287 | pull_request, user=apiuser, translator=request.translate) |
|
287 | pull_request, auth_user=apiuser, translator=request.translate) | |
288 | merge_possible = not check.failed |
|
288 | merge_possible = not check.failed | |
289 |
|
289 | |||
290 | if not merge_possible: |
|
290 | if not merge_possible: | |
@@ -302,7 +302,7 b' def merge_pull_request(' | |||||
302 | request.environ, repo_name=target_repo.repo_name, |
|
302 | request.environ, repo_name=target_repo.repo_name, | |
303 | username=apiuser.username, action='push', |
|
303 | username=apiuser.username, action='push', | |
304 | scm=target_repo.repo_type) |
|
304 | scm=target_repo.repo_type) | |
305 | merge_response = PullRequestModel().merge( |
|
305 | merge_response = PullRequestModel().merge_repo( | |
306 | pull_request, apiuser, extras=extras) |
|
306 | pull_request, apiuser, extras=extras) | |
307 | if merge_response.executed: |
|
307 | if merge_response.executed: | |
308 | PullRequestModel().close_pull_request( |
|
308 | PullRequestModel().close_pull_request( | |
@@ -548,7 +548,8 b' def comment_pull_request(' | |||||
548 | closing_pr=False, |
|
548 | closing_pr=False, | |
549 | renderer=renderer, |
|
549 | renderer=renderer, | |
550 | comment_type=comment_type, |
|
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 | if allowed_to_change_status and status: |
|
555 | if allowed_to_change_status and status: | |
@@ -573,7 +574,8 b' def comment_pull_request(' | |||||
573 | @jsonrpc_method() |
|
574 | @jsonrpc_method() | |
574 | def create_pull_request( |
|
575 | def create_pull_request( | |
575 | request, apiuser, source_repo, target_repo, source_ref, target_ref, |
|
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 | Creates a new pull request. |
|
580 | Creates a new pull request. | |
579 |
|
581 | |||
@@ -598,6 +600,10 b' def create_pull_request(' | |||||
598 | :type title: str |
|
600 | :type title: str | |
599 | :param description: Set the pull request description. |
|
601 | :param description: Set the pull request description. | |
600 | :type description: Optional(str) |
|
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 | :param reviewers: Set the new pull request reviewers list. |
|
607 | :param reviewers: Set the new pull request reviewers list. | |
602 | Reviewer defined by review rules will be added automatically to the |
|
608 | Reviewer defined by review rules will be added automatically to the | |
603 | defined list. |
|
609 | defined list. | |
@@ -607,7 +613,7 b' def create_pull_request(' | |||||
607 | [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}] |
|
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 | target_db_repo = get_repo_or_error(target_repo) |
|
617 | target_db_repo = get_repo_or_error(target_repo) | |
612 | if not has_superadmin_permission(apiuser): |
|
618 | if not has_superadmin_permission(apiuser): | |
613 | _perms = ('repository.admin', 'repository.write', 'repository.read',) |
|
619 | _perms = ('repository.admin', 'repository.write', 'repository.read',) | |
@@ -678,7 +684,11 b' def create_pull_request(' | |||||
678 | source_ref=title_source_ref, |
|
684 | source_ref=title_source_ref, | |
679 | target=target_repo |
|
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 | description = Optional.extract(description) |
|
690 | description = Optional.extract(description) | |
|
691 | description_renderer = Optional.extract(description_renderer) or default_system_renderer | |||
682 |
|
692 | |||
683 | pull_request = PullRequestModel().create( |
|
693 | pull_request = PullRequestModel().create( | |
684 | created_by=apiuser.user_id, |
|
694 | created_by=apiuser.user_id, | |
@@ -690,7 +700,9 b' def create_pull_request(' | |||||
690 | reviewers=reviewers, |
|
700 | reviewers=reviewers, | |
691 | title=title, |
|
701 | title=title, | |
692 | description=description, |
|
702 | description=description, | |
|
703 | description_renderer=description_renderer, | |||
693 | reviewer_data=reviewer_rules, |
|
704 | reviewer_data=reviewer_rules, | |
|
705 | auth_user=apiuser | |||
694 | ) |
|
706 | ) | |
695 |
|
707 | |||
696 | Session().commit() |
|
708 | Session().commit() | |
@@ -704,8 +716,8 b' def create_pull_request(' | |||||
704 | @jsonrpc_method() |
|
716 | @jsonrpc_method() | |
705 | def update_pull_request( |
|
717 | def update_pull_request( | |
706 | request, apiuser, pullrequestid, repoid=Optional(None), |
|
718 | request, apiuser, pullrequestid, repoid=Optional(None), | |
707 |
title=Optional(''), description=Optional(''), |
|
719 | title=Optional(''), description=Optional(''), description_renderer=Optional(''), | |
708 | update_commits=Optional(None)): |
|
720 | reviewers=Optional(None), update_commits=Optional(None)): | |
709 | """ |
|
721 | """ | |
710 | Updates a pull request. |
|
722 | Updates a pull request. | |
711 |
|
723 | |||
@@ -719,6 +731,9 b' def update_pull_request(' | |||||
719 | :type title: str |
|
731 | :type title: str | |
720 | :param description: Update pull request description. |
|
732 | :param description: Update pull request description. | |
721 | :type description: Optional(str) |
|
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 | :param reviewers: Update pull request reviewers list with new value. |
|
737 | :param reviewers: Update pull request reviewers list with new value. | |
723 | :type reviewers: Optional(list) |
|
738 | :type reviewers: Optional(list) | |
724 | Accepts username strings or objects of the format: |
|
739 | Accepts username strings or objects of the format: | |
@@ -801,10 +816,15 b' def update_pull_request(' | |||||
801 |
|
816 | |||
802 | title = Optional.extract(title) |
|
817 | title = Optional.extract(title) | |
803 | description = Optional.extract(description) |
|
818 | description = Optional.extract(description) | |
|
819 | description_renderer = Optional.extract(description_renderer) | |||
|
820 | ||||
804 | if title or description: |
|
821 | if title or description: | |
805 | PullRequestModel().edit( |
|
822 | PullRequestModel().edit( | |
806 |
pull_request, |
|
823 | pull_request, | |
807 |
|
|
824 | title or pull_request.title, | |
|
825 | description or pull_request.description, | |||
|
826 | description_renderer or pull_request.description_renderer, | |||
|
827 | apiuser) | |||
808 | Session().commit() |
|
828 | Session().commit() | |
809 |
|
829 | |||
810 | commit_changes = {"added": [], "common": [], "removed": []} |
|
830 | commit_changes = {"added": [], "common": [], "removed": []} |
@@ -1469,7 +1469,8 b' def comment_commit(' | |||||
1469 | status_change_type=status, |
|
1469 | status_change_type=status, | |
1470 | renderer=renderer, |
|
1470 | renderer=renderer, | |
1471 | comment_type=comment_type, |
|
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 | if status: |
|
1475 | if status: | |
1475 | # also do a status change |
|
1476 | # also do a status change |
@@ -461,31 +461,38 b' class RepoRoutePredicate(object):' | |||||
461 | phash = text |
|
461 | phash = text | |
462 |
|
462 | |||
463 | def __call__(self, info, request): |
|
463 | def __call__(self, info, request): | |
464 |
|
||||
465 | if hasattr(request, 'vcs_call'): |
|
464 | if hasattr(request, 'vcs_call'): | |
466 | # skip vcs calls |
|
465 | # skip vcs calls | |
467 | return |
|
466 | return | |
468 |
|
467 | |||
469 | repo_name = info['match']['repo_name'] |
|
468 | repo_name = info['match']['repo_name'] | |
470 | repo_model = repo.RepoModel() |
|
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 | if db_repo.repo_state in [repo.Repository.STATE_PENDING]: |
|
481 | if db_repo.repo_state in [repo.Repository.STATE_PENDING]: | |
475 | raise HTTPFound( |
|
482 | repo_creating_url = request.route_path( | |
476 |
|
|
483 | 'repo_creating', repo_name=db_repo.repo_name) | |
477 | repo_name=db_repo.repo_name)) |
|
484 | raise HTTPFound(repo_creating_url) | |
478 |
|
485 | |||
479 | if by_name_match: |
|
486 | if by_name_match: | |
480 | # register this as request object we can re-use later |
|
487 | # register this as request object we can re-use later | |
481 | request.db_repo = by_name_match |
|
488 | request.db_repo = by_name_match | |
482 | redirect_if_creating(by_name_match) |
|
489 | redirect_if_creating(info, by_name_match) | |
483 | return True |
|
490 | return True | |
484 |
|
491 | |||
485 | by_id_match = repo_model.get_repo_by_id(repo_name) |
|
492 | by_id_match = repo_model.get_repo_by_id(repo_name) | |
486 | if by_id_match: |
|
493 | if by_id_match: | |
487 | request.db_repo = by_id_match |
|
494 | request.db_repo = by_id_match | |
488 | redirect_if_creating(by_id_match) |
|
495 | redirect_if_creating(info, by_id_match) | |
489 | return True |
|
496 | return True | |
490 |
|
497 | |||
491 | return False |
|
498 | return False | |
@@ -516,7 +523,7 b' class RepoTypeRoutePredicate(object):' | |||||
516 | else: |
|
523 | else: | |
517 | log.warning('Current view is not supported for repo type:%s', |
|
524 | log.warning('Current view is not supported for repo type:%s', | |
518 | rhodecode_db_repo.repo_type) |
|
525 | rhodecode_db_repo.repo_type) | |
519 | # |
|
526 | ||
520 | # h.flash(h.literal( |
|
527 | # h.flash(h.literal( | |
521 | # _('Action not supported for %s.' % rhodecode_repo.alias)), |
|
528 | # _('Action not supported for %s.' % rhodecode_repo.alias)), | |
522 | # category='warning') |
|
529 | # category='warning') | |
@@ -542,8 +549,7 b' class RepoGroupRoutePredicate(object):' | |||||
542 |
|
549 | |||
543 | repo_group_name = info['match']['repo_group_name'] |
|
550 | repo_group_name = info['match']['repo_group_name'] | |
544 | repo_group_model = repo_group.RepoGroupModel() |
|
551 | repo_group_model = repo_group.RepoGroupModel() | |
545 | by_name_match = repo_group_model.get_by_group_name( |
|
552 | by_name_match = repo_group_model.get_by_group_name(repo_group_name, cache=False) | |
546 | repo_group_name, cache=True) |
|
|||
547 |
|
553 | |||
548 | if by_name_match: |
|
554 | if by_name_match: | |
549 | # register this as request object we can re-use later |
|
555 | # register this as request object we can re-use later | |
@@ -569,8 +575,7 b' class UserGroupRoutePredicate(object):' | |||||
569 |
|
575 | |||
570 | user_group_id = info['match']['user_group_id'] |
|
576 | user_group_id = info['match']['user_group_id'] | |
571 | user_group_model = user_group.UserGroup() |
|
577 | user_group_model = user_group.UserGroup() | |
572 | by_id_match = user_group_model.get( |
|
578 | by_id_match = user_group_model.get(user_group_id, cache=False) | |
573 | user_group_id, cache=True) |
|
|||
574 |
|
579 | |||
575 | if by_id_match: |
|
580 | if by_id_match: | |
576 | # register this as request object we can re-use later |
|
581 | # register this as request object we can re-use later | |
@@ -596,8 +601,7 b' class UserRoutePredicateBase(object):' | |||||
596 |
|
601 | |||
597 | user_id = info['match']['user_id'] |
|
602 | user_id = info['match']['user_id'] | |
598 | user_model = user.User() |
|
603 | user_model = user.User() | |
599 | by_id_match = user_model.get( |
|
604 | by_id_match = user_model.get(user_id, cache=False) | |
600 | user_id, cache=True) |
|
|||
601 |
|
605 | |||
602 | if by_id_match: |
|
606 | if by_id_match: | |
603 | # register this as request object we can re-use later |
|
607 | # register this as request object we can re-use later |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file renamed from rhodecode/lib/memory_lru_debug.py to rhodecode/lib/memory_lru_dict.py |
|
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 |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file renamed from rhodecode/tests/controllers/test_utils.py to rhodecode/tests/other/test_views_utils.py |
|
NO CONTENT: file renamed from rhodecode/tests/controllers/test_utils.py to rhodecode/tests/other/test_views_utils.py |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
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