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

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

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