##// END OF EJS Templates
Mercurial: addeed mercurial 4.9 support
marcink -
r656:7cf7cf22 default
parent child Browse files
Show More
@@ -1,948 +1,948 b''
1 1 # Generated by pip2nix 0.8.0.dev1
2 2 # See https://github.com/johbo/pip2nix
3 3
4 4 { pkgs, fetchurl, fetchgit, fetchhg }:
5 5
6 6 self: super: {
7 7 "atomicwrites" = super.buildPythonPackage {
8 8 name = "atomicwrites-1.2.1";
9 9 doCheck = false;
10 10 src = fetchurl {
11 11 url = "https://files.pythonhosted.org/packages/ac/ed/a311712ef6b4355035489f665e63e1a73f9eb371929e3c98e5efd451069e/atomicwrites-1.2.1.tar.gz";
12 12 sha256 = "1vmkbw9j0qammwxbxycrs39gvdg4lc2d4lk98kwf8ag2manyi6pc";
13 13 };
14 14 meta = {
15 15 license = [ pkgs.lib.licenses.mit ];
16 16 };
17 17 };
18 18 "attrs" = super.buildPythonPackage {
19 19 name = "attrs-18.2.0";
20 20 doCheck = false;
21 21 src = fetchurl {
22 22 url = "https://files.pythonhosted.org/packages/0f/9e/26b1d194aab960063b266170e53c39f73ea0d0d3f5ce23313e0ec8ee9bdf/attrs-18.2.0.tar.gz";
23 23 sha256 = "0s9ydh058wmmf5v391pym877x4ahxg45dw6a0w4c7s5wgpigdjqh";
24 24 };
25 25 meta = {
26 26 license = [ pkgs.lib.licenses.mit ];
27 27 };
28 28 };
29 29 "backports.shutil-get-terminal-size" = super.buildPythonPackage {
30 30 name = "backports.shutil-get-terminal-size-1.0.0";
31 31 doCheck = false;
32 32 src = fetchurl {
33 33 url = "https://files.pythonhosted.org/packages/ec/9c/368086faa9c016efce5da3e0e13ba392c9db79e3ab740b763fe28620b18b/backports.shutil_get_terminal_size-1.0.0.tar.gz";
34 34 sha256 = "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki";
35 35 };
36 36 meta = {
37 37 license = [ pkgs.lib.licenses.mit ];
38 38 };
39 39 };
40 40 "beautifulsoup4" = super.buildPythonPackage {
41 41 name = "beautifulsoup4-4.6.3";
42 42 doCheck = false;
43 43 src = fetchurl {
44 44 url = "https://files.pythonhosted.org/packages/88/df/86bffad6309f74f3ff85ea69344a078fc30003270c8df6894fca7a3c72ff/beautifulsoup4-4.6.3.tar.gz";
45 45 sha256 = "041dhalzjciw6qyzzq7a2k4h1yvyk76xigp35hv5ibnn448ydy4h";
46 46 };
47 47 meta = {
48 48 license = [ pkgs.lib.licenses.mit ];
49 49 };
50 50 };
51 51 "configobj" = super.buildPythonPackage {
52 52 name = "configobj-5.0.6";
53 53 doCheck = false;
54 54 propagatedBuildInputs = [
55 55 self."six"
56 56 ];
57 57 src = fetchurl {
58 58 url = "https://code.rhodecode.com/upstream/configobj/archive/a11ff0a0bd4fbda9e3a91267e720f88329efb4a6.tar.gz?md5=9916c524ea11a6c418217af6b28d4b3c";
59 59 sha256 = "1hhcxirwvg58grlfr177b3awhbq8hlx1l3lh69ifl1ki7lfd1s1x";
60 60 };
61 61 meta = {
62 62 license = [ pkgs.lib.licenses.bsdOriginal ];
63 63 };
64 64 };
65 65 "cov-core" = super.buildPythonPackage {
66 66 name = "cov-core-1.15.0";
67 67 doCheck = false;
68 68 propagatedBuildInputs = [
69 69 self."coverage"
70 70 ];
71 71 src = fetchurl {
72 72 url = "https://files.pythonhosted.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
73 73 sha256 = "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a";
74 74 };
75 75 meta = {
76 76 license = [ pkgs.lib.licenses.mit ];
77 77 };
78 78 };
79 79 "coverage" = super.buildPythonPackage {
80 80 name = "coverage-4.5.1";
81 81 doCheck = false;
82 82 src = fetchurl {
83 83 url = "https://files.pythonhosted.org/packages/35/fe/e7df7289d717426093c68d156e0fd9117c8f4872b6588e8a8928a0f68424/coverage-4.5.1.tar.gz";
84 84 sha256 = "1wbrzpxka3xd4nmmkc6q0ir343d91kymwsm8pbmwa0d2a7q4ir2n";
85 85 };
86 86 meta = {
87 87 license = [ pkgs.lib.licenses.asl20 ];
88 88 };
89 89 };
90 90 "decorator" = super.buildPythonPackage {
91 91 name = "decorator-4.1.2";
92 92 doCheck = false;
93 93 src = fetchurl {
94 94 url = "https://files.pythonhosted.org/packages/bb/e0/f6e41e9091e130bf16d4437dabbac3993908e4d6485ecbc985ef1352db94/decorator-4.1.2.tar.gz";
95 95 sha256 = "1d8npb11kxyi36mrvjdpcjij76l5zfyrz2f820brf0l0rcw4vdkw";
96 96 };
97 97 meta = {
98 98 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "new BSD License"; } ];
99 99 };
100 100 };
101 101 "dogpile.cache" = super.buildPythonPackage {
102 102 name = "dogpile.cache-0.7.1";
103 103 doCheck = false;
104 104 propagatedBuildInputs = [
105 105 self."decorator"
106 106 ];
107 107 src = fetchurl {
108 108 url = "https://files.pythonhosted.org/packages/84/3e/dbf1cfc5228f1d3dca80ef714db2c5aaec5cd9efaf54d7e3daef6bc48b19/dogpile.cache-0.7.1.tar.gz";
109 109 sha256 = "0caazmrzhnfqb5yrp8myhw61ny637jj69wcngrpbvi31jlcpy6v9";
110 110 };
111 111 meta = {
112 112 license = [ pkgs.lib.licenses.bsdOriginal ];
113 113 };
114 114 };
115 115 "dogpile.core" = super.buildPythonPackage {
116 116 name = "dogpile.core-0.4.1";
117 117 doCheck = false;
118 118 src = fetchurl {
119 119 url = "https://files.pythonhosted.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
120 120 sha256 = "0xpdvg4kr1isfkrh1rfsh7za4q5a5s6l2kf9wpvndbwf3aqjyrdy";
121 121 };
122 122 meta = {
123 123 license = [ pkgs.lib.licenses.bsdOriginal ];
124 124 };
125 125 };
126 126 "dulwich" = super.buildPythonPackage {
127 127 name = "dulwich-0.13.0";
128 128 doCheck = false;
129 129 src = fetchurl {
130 130 url = "https://files.pythonhosted.org/packages/84/95/732d280eee829dacc954e8109f97b47abcadcca472c2ab013e1635eb4792/dulwich-0.13.0.tar.gz";
131 131 sha256 = "0f1jwvrh549c4rgavkn3wizrch904s73s4fmrxykxy9cw8s57lwf";
132 132 };
133 133 meta = {
134 134 license = [ pkgs.lib.licenses.gpl2Plus ];
135 135 };
136 136 };
137 137 "enum34" = super.buildPythonPackage {
138 138 name = "enum34-1.1.6";
139 139 doCheck = false;
140 140 src = fetchurl {
141 141 url = "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz";
142 142 sha256 = "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a";
143 143 };
144 144 meta = {
145 145 license = [ pkgs.lib.licenses.bsdOriginal ];
146 146 };
147 147 };
148 148 "funcsigs" = super.buildPythonPackage {
149 149 name = "funcsigs-1.0.2";
150 150 doCheck = false;
151 151 src = fetchurl {
152 152 url = "https://files.pythonhosted.org/packages/94/4a/db842e7a0545de1cdb0439bb80e6e42dfe82aaeaadd4072f2263a4fbed23/funcsigs-1.0.2.tar.gz";
153 153 sha256 = "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7";
154 154 };
155 155 meta = {
156 156 license = [ { fullName = "ASL"; } pkgs.lib.licenses.asl20 ];
157 157 };
158 158 };
159 159 "gevent" = super.buildPythonPackage {
160 160 name = "gevent-1.4.0";
161 161 doCheck = false;
162 162 propagatedBuildInputs = [
163 163 self."greenlet"
164 164 ];
165 165 src = fetchurl {
166 166 url = "https://files.pythonhosted.org/packages/ed/27/6c49b70808f569b66ec7fac2e78f076e9b204db9cf5768740cff3d5a07ae/gevent-1.4.0.tar.gz";
167 167 sha256 = "1lchr4akw2jkm5v4kz7bdm4wv3knkfhbfn9vkkz4s5yrkcxzmdqy";
168 168 };
169 169 meta = {
170 170 license = [ pkgs.lib.licenses.mit ];
171 171 };
172 172 };
173 173 "gprof2dot" = super.buildPythonPackage {
174 174 name = "gprof2dot-2017.9.19";
175 175 doCheck = false;
176 176 src = fetchurl {
177 177 url = "https://files.pythonhosted.org/packages/9d/36/f977122502979f3dfb50704979c9ed70e6b620787942b089bf1af15f5aba/gprof2dot-2017.9.19.tar.gz";
178 178 sha256 = "17ih23ld2nzgc3xwgbay911l6lh96jp1zshmskm17n1gg2i7mg6f";
179 179 };
180 180 meta = {
181 181 license = [ { fullName = "GNU Lesser General Public License v3 or later (LGPLv3+)"; } { fullName = "LGPL"; } ];
182 182 };
183 183 };
184 184 "greenlet" = super.buildPythonPackage {
185 185 name = "greenlet-0.4.15";
186 186 doCheck = false;
187 187 src = fetchurl {
188 188 url = "https://files.pythonhosted.org/packages/f8/e8/b30ae23b45f69aa3f024b46064c0ac8e5fcb4f22ace0dca8d6f9c8bbe5e7/greenlet-0.4.15.tar.gz";
189 189 sha256 = "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll";
190 190 };
191 191 meta = {
192 192 license = [ pkgs.lib.licenses.mit ];
193 193 };
194 194 };
195 195 "gunicorn" = super.buildPythonPackage {
196 196 name = "gunicorn-19.9.0";
197 197 doCheck = false;
198 198 src = fetchurl {
199 199 url = "https://files.pythonhosted.org/packages/47/52/68ba8e5e8ba251e54006a49441f7ccabca83b6bef5aedacb4890596c7911/gunicorn-19.9.0.tar.gz";
200 200 sha256 = "1wzlf4xmn6qjirh5w81l6i6kqjnab1n1qqkh7zsj1yb6gh4n49ps";
201 201 };
202 202 meta = {
203 203 license = [ pkgs.lib.licenses.mit ];
204 204 };
205 205 };
206 206 "hg-evolve" = super.buildPythonPackage {
207 207 name = "hg-evolve-8.0.1";
208 208 doCheck = false;
209 209 src = fetchurl {
210 210 url = "https://files.pythonhosted.org/packages/06/1a/c5c12d8f117426f05285a820ee5a23121882f5381104e86276b72598934f/hg-evolve-8.0.1.tar.gz";
211 211 sha256 = "1brafifb42k71gl7qssb5m3ijnm7y30lfvm90z8xxcr2fgz19p29";
212 212 };
213 213 meta = {
214 214 license = [ { fullName = "GPLv2+"; } ];
215 215 };
216 216 };
217 217 "hgsubversion" = super.buildPythonPackage {
218 218 name = "hgsubversion-1.9.3";
219 219 doCheck = false;
220 220 propagatedBuildInputs = [
221 221 self."mercurial"
222 222 self."subvertpy"
223 223 ];
224 224 src = fetchurl {
225 225 url = "https://files.pythonhosted.org/packages/a3/53/6d205e641f3e09abcf1ddaed66e5e4b20da22d0145566d440a02c9e35f0d/hgsubversion-1.9.3.tar.gz";
226 226 sha256 = "0nymcjlch8c4zjbncrs30p2nrbylsf25g3h6mr0zzzxr141h3sig";
227 227 };
228 228 meta = {
229 229 license = [ pkgs.lib.licenses.gpl1 ];
230 230 };
231 231 };
232 232 "hupper" = super.buildPythonPackage {
233 233 name = "hupper-1.5";
234 234 doCheck = false;
235 235 src = fetchurl {
236 236 url = "https://files.pythonhosted.org/packages/89/f1/aace4ea69c1d79e243e48a81dcf1608c87e8c5a190e6ef80fae245d494ac/hupper-1.5.tar.gz";
237 237 sha256 = "02n6y2rvpacm2w3x089whj64j1x0qlkimkzw35r1g0mymmxicfk9";
238 238 };
239 239 meta = {
240 240 license = [ pkgs.lib.licenses.mit ];
241 241 };
242 242 };
243 243 "ipdb" = super.buildPythonPackage {
244 244 name = "ipdb-0.11";
245 245 doCheck = false;
246 246 propagatedBuildInputs = [
247 247 self."setuptools"
248 248 self."ipython"
249 249 ];
250 250 src = fetchurl {
251 251 url = "https://files.pythonhosted.org/packages/80/fe/4564de08f174f3846364b3add8426d14cebee228f741c27e702b2877e85b/ipdb-0.11.tar.gz";
252 252 sha256 = "02m0l8wrhhd3z7dg3czn5ys1g5pxib516hpshdzp7rxzsxgcd0bh";
253 253 };
254 254 meta = {
255 255 license = [ pkgs.lib.licenses.bsdOriginal ];
256 256 };
257 257 };
258 258 "ipython" = super.buildPythonPackage {
259 259 name = "ipython-5.1.0";
260 260 doCheck = false;
261 261 propagatedBuildInputs = [
262 262 self."setuptools"
263 263 self."decorator"
264 264 self."pickleshare"
265 265 self."simplegeneric"
266 266 self."traitlets"
267 267 self."prompt-toolkit"
268 268 self."pygments"
269 269 self."pexpect"
270 270 self."backports.shutil-get-terminal-size"
271 271 self."pathlib2"
272 272 self."pexpect"
273 273 ];
274 274 src = fetchurl {
275 275 url = "https://files.pythonhosted.org/packages/89/63/a9292f7cd9d0090a0f995e1167f3f17d5889dcbc9a175261719c513b9848/ipython-5.1.0.tar.gz";
276 276 sha256 = "0qdrf6aj9kvjczd5chj1my8y2iq09am9l8bb2a1334a52d76kx3y";
277 277 };
278 278 meta = {
279 279 license = [ pkgs.lib.licenses.bsdOriginal ];
280 280 };
281 281 };
282 282 "ipython-genutils" = super.buildPythonPackage {
283 283 name = "ipython-genutils-0.2.0";
284 284 doCheck = false;
285 285 src = fetchurl {
286 286 url = "https://files.pythonhosted.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz";
287 287 sha256 = "1a4bc9y8hnvq6cp08qs4mckgm6i6ajpndp4g496rvvzcfmp12bpb";
288 288 };
289 289 meta = {
290 290 license = [ pkgs.lib.licenses.bsdOriginal ];
291 291 };
292 292 };
293 293 "mako" = super.buildPythonPackage {
294 294 name = "mako-1.0.7";
295 295 doCheck = false;
296 296 propagatedBuildInputs = [
297 297 self."markupsafe"
298 298 ];
299 299 src = fetchurl {
300 300 url = "https://files.pythonhosted.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz";
301 301 sha256 = "1bi5gnr8r8dva06qpyx4kgjc6spm2k1y908183nbbaylggjzs0jf";
302 302 };
303 303 meta = {
304 304 license = [ pkgs.lib.licenses.mit ];
305 305 };
306 306 };
307 307 "markupsafe" = super.buildPythonPackage {
308 308 name = "markupsafe-1.1.0";
309 309 doCheck = false;
310 310 src = fetchurl {
311 311 url = "https://files.pythonhosted.org/packages/ac/7e/1b4c2e05809a4414ebce0892fe1e32c14ace86ca7d50c70f00979ca9b3a3/MarkupSafe-1.1.0.tar.gz";
312 312 sha256 = "1lxirjypbdd3l9jl4vliilhfnhy7c7f2vlldqg1b0i74khn375sf";
313 313 };
314 314 meta = {
315 315 license = [ pkgs.lib.licenses.bsdOriginal ];
316 316 };
317 317 };
318 318 "mercurial" = super.buildPythonPackage {
319 name = "mercurial-4.6.2";
319 name = "mercurial-4.9";
320 320 doCheck = false;
321 321 src = fetchurl {
322 url = "https://files.pythonhosted.org/packages/d9/fb/c7ecf2b7fd349878dbf45b8390b8db735cef73d49dd9ce8a364b4ca3a846/mercurial-4.6.2.tar.gz";
323 sha256 = "1bv6wgcdx8glihjjfg22khhc52mclsn4kwfqvzbzlg0b42h4xl0w";
322 url = "https://files.pythonhosted.org/packages/1a/bb/fa36ada5f8d05651d30edeeb1b8dc7bf797ea701a77e4842c334246c912d/mercurial-4.9.tar.gz";
323 sha256 = "01ig0464cvy9d87rn274g39frxr0p5q4lxf1xn5k3m24grf0qq0g";
324 324 };
325 325 meta = {
326 326 license = [ pkgs.lib.licenses.gpl1 pkgs.lib.licenses.gpl2Plus ];
327 327 };
328 328 };
329 329 "mock" = super.buildPythonPackage {
330 330 name = "mock-1.0.1";
331 331 doCheck = false;
332 332 src = fetchurl {
333 333 url = "https://files.pythonhosted.org/packages/a2/52/7edcd94f0afb721a2d559a5b9aae8af4f8f2c79bc63fdbe8a8a6c9b23bbe/mock-1.0.1.tar.gz";
334 334 sha256 = "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq";
335 335 };
336 336 meta = {
337 337 license = [ pkgs.lib.licenses.bsdOriginal ];
338 338 };
339 339 };
340 340 "more-itertools" = super.buildPythonPackage {
341 341 name = "more-itertools-5.0.0";
342 342 doCheck = false;
343 343 propagatedBuildInputs = [
344 344 self."six"
345 345 ];
346 346 src = fetchurl {
347 347 url = "https://files.pythonhosted.org/packages/dd/26/30fc0d541d9fdf55faf5ba4b0fd68f81d5bd2447579224820ad525934178/more-itertools-5.0.0.tar.gz";
348 348 sha256 = "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q";
349 349 };
350 350 meta = {
351 351 license = [ pkgs.lib.licenses.mit ];
352 352 };
353 353 };
354 354 "msgpack-python" = super.buildPythonPackage {
355 355 name = "msgpack-python-0.5.6";
356 356 doCheck = false;
357 357 src = fetchurl {
358 358 url = "https://files.pythonhosted.org/packages/8a/20/6eca772d1a5830336f84aca1d8198e5a3f4715cd1c7fc36d3cc7f7185091/msgpack-python-0.5.6.tar.gz";
359 359 sha256 = "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p";
360 360 };
361 361 meta = {
362 362 license = [ pkgs.lib.licenses.asl20 ];
363 363 };
364 364 };
365 365 "pastedeploy" = super.buildPythonPackage {
366 366 name = "pastedeploy-2.0.1";
367 367 doCheck = false;
368 368 src = fetchurl {
369 369 url = "https://files.pythonhosted.org/packages/19/a0/5623701df7e2478a68a1b685d1a84518024eef994cde7e4da8449a31616f/PasteDeploy-2.0.1.tar.gz";
370 370 sha256 = "02imfbbx1mi2h546f3sr37m47dk9qizaqhzzlhx8bkzxa6fzn8yl";
371 371 };
372 372 meta = {
373 373 license = [ pkgs.lib.licenses.mit ];
374 374 };
375 375 };
376 376 "pathlib2" = super.buildPythonPackage {
377 377 name = "pathlib2-2.3.3";
378 378 doCheck = false;
379 379 propagatedBuildInputs = [
380 380 self."six"
381 381 self."scandir"
382 382 ];
383 383 src = fetchurl {
384 384 url = "https://files.pythonhosted.org/packages/bf/d7/a2568f4596b75d2c6e2b4094a7e64f620decc7887f69a1f2811931ea15b9/pathlib2-2.3.3.tar.gz";
385 385 sha256 = "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695";
386 386 };
387 387 meta = {
388 388 license = [ pkgs.lib.licenses.mit ];
389 389 };
390 390 };
391 391 "pexpect" = super.buildPythonPackage {
392 392 name = "pexpect-4.6.0";
393 393 doCheck = false;
394 394 propagatedBuildInputs = [
395 395 self."ptyprocess"
396 396 ];
397 397 src = fetchurl {
398 398 url = "https://files.pythonhosted.org/packages/89/43/07d07654ee3e25235d8cea4164cdee0ec39d1fda8e9203156ebe403ffda4/pexpect-4.6.0.tar.gz";
399 399 sha256 = "1fla85g47iaxxpjhp9vkxdnv4pgc7rplfy6ja491smrrk0jqi3ia";
400 400 };
401 401 meta = {
402 402 license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ];
403 403 };
404 404 };
405 405 "pickleshare" = super.buildPythonPackage {
406 406 name = "pickleshare-0.7.5";
407 407 doCheck = false;
408 408 propagatedBuildInputs = [
409 409 self."pathlib2"
410 410 ];
411 411 src = fetchurl {
412 412 url = "https://files.pythonhosted.org/packages/d8/b6/df3c1c9b616e9c0edbc4fbab6ddd09df9535849c64ba51fcb6531c32d4d8/pickleshare-0.7.5.tar.gz";
413 413 sha256 = "1jmghg3c53yp1i8cm6pcrm280ayi8621rwyav9fac7awjr3kss47";
414 414 };
415 415 meta = {
416 416 license = [ pkgs.lib.licenses.mit ];
417 417 };
418 418 };
419 419 "plaster" = super.buildPythonPackage {
420 420 name = "plaster-1.0";
421 421 doCheck = false;
422 422 propagatedBuildInputs = [
423 423 self."setuptools"
424 424 ];
425 425 src = fetchurl {
426 426 url = "https://files.pythonhosted.org/packages/37/e1/56d04382d718d32751017d32f351214384e529b794084eee20bb52405563/plaster-1.0.tar.gz";
427 427 sha256 = "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3";
428 428 };
429 429 meta = {
430 430 license = [ pkgs.lib.licenses.mit ];
431 431 };
432 432 };
433 433 "plaster-pastedeploy" = super.buildPythonPackage {
434 434 name = "plaster-pastedeploy-0.6";
435 435 doCheck = false;
436 436 propagatedBuildInputs = [
437 437 self."pastedeploy"
438 438 self."plaster"
439 439 ];
440 440 src = fetchurl {
441 441 url = "https://files.pythonhosted.org/packages/3f/e7/6a6833158d2038ec40085433308a1e164fd1dac595513f6dd556d5669bb8/plaster_pastedeploy-0.6.tar.gz";
442 442 sha256 = "1bkggk18f4z2bmsmxyxabvf62znvjwbivzh880419r3ap0616cf2";
443 443 };
444 444 meta = {
445 445 license = [ pkgs.lib.licenses.mit ];
446 446 };
447 447 };
448 448 "pluggy" = super.buildPythonPackage {
449 449 name = "pluggy-0.9.0";
450 450 doCheck = false;
451 451 src = fetchurl {
452 452 url = "https://files.pythonhosted.org/packages/a7/8c/55c629849c64e665258d8976322dfdad171fa2f57117590662d8a67618a4/pluggy-0.9.0.tar.gz";
453 453 sha256 = "13yg2q0wgcb4l8lgdvcnzqa8db5lrw3nwn50lxjy1z5jkp7gkv0r";
454 454 };
455 455 meta = {
456 456 license = [ pkgs.lib.licenses.mit ];
457 457 };
458 458 };
459 459 "prompt-toolkit" = super.buildPythonPackage {
460 460 name = "prompt-toolkit-1.0.15";
461 461 doCheck = false;
462 462 propagatedBuildInputs = [
463 463 self."six"
464 464 self."wcwidth"
465 465 ];
466 466 src = fetchurl {
467 467 url = "https://files.pythonhosted.org/packages/8a/ad/cf6b128866e78ad6d7f1dc5b7f99885fb813393d9860778b2984582e81b5/prompt_toolkit-1.0.15.tar.gz";
468 468 sha256 = "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5";
469 469 };
470 470 meta = {
471 471 license = [ pkgs.lib.licenses.bsdOriginal ];
472 472 };
473 473 };
474 474 "psutil" = super.buildPythonPackage {
475 475 name = "psutil-5.5.1";
476 476 doCheck = false;
477 477 src = fetchurl {
478 478 url = "https://files.pythonhosted.org/packages/c7/01/7c30b247cdc5ba29623faa5c8cf1f1bbf7e041783c340414b0ed7e067c64/psutil-5.5.1.tar.gz";
479 479 sha256 = "045qaqvn6k90bj5bcy259yrwcd2afgznaav3sfhphy9b8ambzkkj";
480 480 };
481 481 meta = {
482 482 license = [ pkgs.lib.licenses.bsdOriginal ];
483 483 };
484 484 };
485 485 "ptyprocess" = super.buildPythonPackage {
486 486 name = "ptyprocess-0.6.0";
487 487 doCheck = false;
488 488 src = fetchurl {
489 489 url = "https://files.pythonhosted.org/packages/7d/2d/e4b8733cf79b7309d84c9081a4ab558c89d8c89da5961bf4ddb050ca1ce0/ptyprocess-0.6.0.tar.gz";
490 490 sha256 = "1h4lcd3w5nrxnsk436ar7fwkiy5rfn5wj2xwy9l0r4mdqnf2jgwj";
491 491 };
492 492 meta = {
493 493 license = [ ];
494 494 };
495 495 };
496 496 "py" = super.buildPythonPackage {
497 497 name = "py-1.6.0";
498 498 doCheck = false;
499 499 src = fetchurl {
500 500 url = "https://files.pythonhosted.org/packages/4f/38/5f427d1eedae73063ce4da680d2bae72014995f9fdeaa57809df61c968cd/py-1.6.0.tar.gz";
501 501 sha256 = "1wcs3zv9wl5m5x7p16avqj2gsrviyb23yvc3pr330isqs0sh98q6";
502 502 };
503 503 meta = {
504 504 license = [ pkgs.lib.licenses.mit ];
505 505 };
506 506 };
507 507 "pygments" = super.buildPythonPackage {
508 508 name = "pygments-2.3.1";
509 509 doCheck = false;
510 510 src = fetchurl {
511 511 url = "https://files.pythonhosted.org/packages/64/69/413708eaf3a64a6abb8972644e0f20891a55e621c6759e2c3f3891e05d63/Pygments-2.3.1.tar.gz";
512 512 sha256 = "0ji87g09jph8jqcvclgb02qvxasdnr9pzvk90rl66d90yqcxmyjz";
513 513 };
514 514 meta = {
515 515 license = [ pkgs.lib.licenses.bsdOriginal ];
516 516 };
517 517 };
518 518 "pyramid" = super.buildPythonPackage {
519 519 name = "pyramid-1.10.1";
520 520 doCheck = false;
521 521 propagatedBuildInputs = [
522 522 self."hupper"
523 523 self."plaster"
524 524 self."plaster-pastedeploy"
525 525 self."setuptools"
526 526 self."translationstring"
527 527 self."venusian"
528 528 self."webob"
529 529 self."zope.deprecation"
530 530 self."zope.interface"
531 531 self."repoze.lru"
532 532 ];
533 533 src = fetchurl {
534 534 url = "https://files.pythonhosted.org/packages/0a/3e/22e3ac9be1b70a01139adba8906ee4b8f628bb469fea3c52f6c97b73063c/pyramid-1.10.1.tar.gz";
535 535 sha256 = "1h5105nfh6rsrfjiyw20aavyibj36la3hajy6vh1fa77xb4y3hrp";
536 536 };
537 537 meta = {
538 538 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
539 539 };
540 540 };
541 541 "pyramid-mako" = super.buildPythonPackage {
542 542 name = "pyramid-mako-1.0.2";
543 543 doCheck = false;
544 544 propagatedBuildInputs = [
545 545 self."pyramid"
546 546 self."mako"
547 547 ];
548 548 src = fetchurl {
549 549 url = "https://files.pythonhosted.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
550 550 sha256 = "18gk2vliq8z4acblsl6yzgbvnr9rlxjlcqir47km7kvlk1xri83d";
551 551 };
552 552 meta = {
553 553 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
554 554 };
555 555 };
556 556 "pytest" = super.buildPythonPackage {
557 557 name = "pytest-3.8.2";
558 558 doCheck = false;
559 559 propagatedBuildInputs = [
560 560 self."py"
561 561 self."six"
562 562 self."setuptools"
563 563 self."attrs"
564 564 self."more-itertools"
565 565 self."atomicwrites"
566 566 self."pluggy"
567 567 self."funcsigs"
568 568 self."pathlib2"
569 569 ];
570 570 src = fetchurl {
571 571 url = "https://files.pythonhosted.org/packages/5f/d2/7f77f406ac505abda02ab4afb50d06ebf304f6ea42fca34f8f37529106b2/pytest-3.8.2.tar.gz";
572 572 sha256 = "18nrwzn61kph2y6gxwfz9ms68rfvr9d4vcffsxng9p7jk9z18clk";
573 573 };
574 574 meta = {
575 575 license = [ pkgs.lib.licenses.mit ];
576 576 };
577 577 };
578 578 "pytest-cov" = super.buildPythonPackage {
579 579 name = "pytest-cov-2.6.0";
580 580 doCheck = false;
581 581 propagatedBuildInputs = [
582 582 self."pytest"
583 583 self."coverage"
584 584 ];
585 585 src = fetchurl {
586 586 url = "https://files.pythonhosted.org/packages/d9/e2/58f90a316fbd94dd50bf5c826a23f3f5d079fb3cc448c1e9f0e3c33a3d2a/pytest-cov-2.6.0.tar.gz";
587 587 sha256 = "0qnpp9y3ygx4jk4pf5ad71fh2skbvnr6gl54m7rg5qysnx4g0q73";
588 588 };
589 589 meta = {
590 590 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
591 591 };
592 592 };
593 593 "pytest-profiling" = super.buildPythonPackage {
594 594 name = "pytest-profiling-1.3.0";
595 595 doCheck = false;
596 596 propagatedBuildInputs = [
597 597 self."six"
598 598 self."pytest"
599 599 self."gprof2dot"
600 600 ];
601 601 src = fetchurl {
602 602 url = "https://files.pythonhosted.org/packages/f5/34/4626126e041a51ef50a80d0619519b18d20aef249aac25b0d0fdd47e57ee/pytest-profiling-1.3.0.tar.gz";
603 603 sha256 = "08r5afx5z22yvpmsnl91l4amsy1yxn8qsmm61mhp06mz8zjs51kb";
604 604 };
605 605 meta = {
606 606 license = [ pkgs.lib.licenses.mit ];
607 607 };
608 608 };
609 609 "pytest-runner" = super.buildPythonPackage {
610 610 name = "pytest-runner-4.2";
611 611 doCheck = false;
612 612 src = fetchurl {
613 613 url = "https://files.pythonhosted.org/packages/9e/b7/fe6e8f87f9a756fd06722216f1b6698ccba4d269eac6329d9f0c441d0f93/pytest-runner-4.2.tar.gz";
614 614 sha256 = "1gkpyphawxz38ni1gdq1fmwyqcg02m7ypzqvv46z06crwdxi2gyj";
615 615 };
616 616 meta = {
617 617 license = [ pkgs.lib.licenses.mit ];
618 618 };
619 619 };
620 620 "pytest-sugar" = super.buildPythonPackage {
621 621 name = "pytest-sugar-0.9.1";
622 622 doCheck = false;
623 623 propagatedBuildInputs = [
624 624 self."pytest"
625 625 self."termcolor"
626 626 ];
627 627 src = fetchurl {
628 628 url = "https://files.pythonhosted.org/packages/3e/6a/a3f909083079d03bde11d06ab23088886bbe25f2c97fbe4bb865e2bf05bc/pytest-sugar-0.9.1.tar.gz";
629 629 sha256 = "0b4av40dv30727m54v211r0nzwjp2ajkjgxix6j484qjmwpw935b";
630 630 };
631 631 meta = {
632 632 license = [ pkgs.lib.licenses.bsdOriginal ];
633 633 };
634 634 };
635 635 "pytest-timeout" = super.buildPythonPackage {
636 636 name = "pytest-timeout-1.3.2";
637 637 doCheck = false;
638 638 propagatedBuildInputs = [
639 639 self."pytest"
640 640 ];
641 641 src = fetchurl {
642 642 url = "https://files.pythonhosted.org/packages/8c/3e/1b6a319d12ae7baa3acb7c18ff2c8630a09471a0319d43535c683b4d03eb/pytest-timeout-1.3.2.tar.gz";
643 643 sha256 = "09wnmzvnls2mnsdz7x3c3sk2zdp6jl4dryvyj5i8hqz16q2zq5qi";
644 644 };
645 645 meta = {
646 646 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
647 647 };
648 648 };
649 649 "repoze.lru" = super.buildPythonPackage {
650 650 name = "repoze.lru-0.7";
651 651 doCheck = false;
652 652 src = fetchurl {
653 653 url = "https://files.pythonhosted.org/packages/12/bc/595a77c4b5e204847fdf19268314ef59c85193a9dc9f83630fc459c0fee5/repoze.lru-0.7.tar.gz";
654 654 sha256 = "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84";
655 655 };
656 656 meta = {
657 657 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
658 658 };
659 659 };
660 660 "rhodecode-vcsserver" = super.buildPythonPackage {
661 661 name = "rhodecode-vcsserver-4.17.0";
662 662 buildInputs = [
663 663 self."pytest"
664 664 self."py"
665 665 self."pytest-cov"
666 666 self."pytest-sugar"
667 667 self."pytest-runner"
668 668 self."pytest-profiling"
669 669 self."pytest-timeout"
670 670 self."gprof2dot"
671 671 self."mock"
672 672 self."cov-core"
673 673 self."coverage"
674 674 self."webtest"
675 675 self."beautifulsoup4"
676 676 self."configobj"
677 677 ];
678 678 doCheck = true;
679 679 propagatedBuildInputs = [
680 680 self."configobj"
681 681 self."dogpile.cache"
682 682 self."dogpile.core"
683 683 self."decorator"
684 684 self."dulwich"
685 685 self."hgsubversion"
686 686 self."hg-evolve"
687 687 self."mako"
688 688 self."markupsafe"
689 689 self."mercurial"
690 690 self."msgpack-python"
691 691 self."pastedeploy"
692 692 self."pyramid"
693 693 self."pyramid-mako"
694 694 self."repoze.lru"
695 695 self."simplejson"
696 696 self."subprocess32"
697 697 self."subvertpy"
698 698 self."six"
699 699 self."translationstring"
700 700 self."webob"
701 701 self."zope.deprecation"
702 702 self."zope.interface"
703 703 self."gevent"
704 704 self."greenlet"
705 705 self."gunicorn"
706 706 self."waitress"
707 707 self."ipdb"
708 708 self."ipython"
709 709 self."pytest"
710 710 self."py"
711 711 self."pytest-cov"
712 712 self."pytest-sugar"
713 713 self."pytest-runner"
714 714 self."pytest-profiling"
715 715 self."pytest-timeout"
716 716 self."gprof2dot"
717 717 self."mock"
718 718 self."cov-core"
719 719 self."coverage"
720 720 self."webtest"
721 721 self."beautifulsoup4"
722 722 ];
723 723 src = ./.;
724 724 meta = {
725 725 license = [ { fullName = "GPL V3"; } { fullName = "GNU General Public License v3 or later (GPLv3+)"; } ];
726 726 };
727 727 };
728 728 "scandir" = super.buildPythonPackage {
729 729 name = "scandir-1.9.0";
730 730 doCheck = false;
731 731 src = fetchurl {
732 732 url = "https://files.pythonhosted.org/packages/16/2a/557af1181e6b4e30254d5a6163b18f5053791ca66e251e77ab08887e8fe3/scandir-1.9.0.tar.gz";
733 733 sha256 = "0r3hvf1a9jm1rkqgx40gxkmccknkaiqjavs8lccgq9s8khh5x5s4";
734 734 };
735 735 meta = {
736 736 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "New BSD License"; } ];
737 737 };
738 738 };
739 739 "setproctitle" = super.buildPythonPackage {
740 740 name = "setproctitle-1.1.10";
741 741 doCheck = false;
742 742 src = fetchurl {
743 743 url = "https://files.pythonhosted.org/packages/5a/0d/dc0d2234aacba6cf1a729964383e3452c52096dc695581248b548786f2b3/setproctitle-1.1.10.tar.gz";
744 744 sha256 = "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2";
745 745 };
746 746 meta = {
747 747 license = [ pkgs.lib.licenses.bsdOriginal ];
748 748 };
749 749 };
750 750 "setuptools" = super.buildPythonPackage {
751 751 name = "setuptools-40.8.0";
752 752 doCheck = false;
753 753 src = fetchurl {
754 754 url = "https://files.pythonhosted.org/packages/c2/f7/c7b501b783e5a74cf1768bc174ee4fb0a8a6ee5af6afa92274ff964703e0/setuptools-40.8.0.zip";
755 755 sha256 = "0k9hifpgahnw2a26w3cr346iy733k6d3nwh3f7g9m13y6f8fqkkf";
756 756 };
757 757 meta = {
758 758 license = [ pkgs.lib.licenses.mit ];
759 759 };
760 760 };
761 761 "simplegeneric" = super.buildPythonPackage {
762 762 name = "simplegeneric-0.8.1";
763 763 doCheck = false;
764 764 src = fetchurl {
765 765 url = "https://files.pythonhosted.org/packages/3d/57/4d9c9e3ae9a255cd4e1106bb57e24056d3d0709fc01b2e3e345898e49d5b/simplegeneric-0.8.1.zip";
766 766 sha256 = "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw";
767 767 };
768 768 meta = {
769 769 license = [ pkgs.lib.licenses.zpl21 ];
770 770 };
771 771 };
772 772 "simplejson" = super.buildPythonPackage {
773 773 name = "simplejson-3.16.0";
774 774 doCheck = false;
775 775 src = fetchurl {
776 776 url = "https://files.pythonhosted.org/packages/e3/24/c35fb1c1c315fc0fffe61ea00d3f88e85469004713dab488dee4f35b0aff/simplejson-3.16.0.tar.gz";
777 777 sha256 = "19cws1syk8jzq2pw43878dv6fjkb0ifvjpx0i9aajix6kc9jkwxi";
778 778 };
779 779 meta = {
780 780 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
781 781 };
782 782 };
783 783 "six" = super.buildPythonPackage {
784 784 name = "six-1.11.0";
785 785 doCheck = false;
786 786 src = fetchurl {
787 787 url = "https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz";
788 788 sha256 = "1scqzwc51c875z23phj48gircqjgnn3af8zy2izjwmnlxrxsgs3h";
789 789 };
790 790 meta = {
791 791 license = [ pkgs.lib.licenses.mit ];
792 792 };
793 793 };
794 794 "subprocess32" = super.buildPythonPackage {
795 795 name = "subprocess32-3.5.3";
796 796 doCheck = false;
797 797 src = fetchurl {
798 798 url = "https://files.pythonhosted.org/packages/be/2b/beeba583e9877e64db10b52a96915afc0feabf7144dcbf2a0d0ea68bf73d/subprocess32-3.5.3.tar.gz";
799 799 sha256 = "1hr5fan8i719hmlmz73hf8rhq74014w07d8ryg7krvvf6692kj3b";
800 800 };
801 801 meta = {
802 802 license = [ pkgs.lib.licenses.psfl ];
803 803 };
804 804 };
805 805 "subvertpy" = super.buildPythonPackage {
806 806 name = "subvertpy-0.10.1";
807 807 doCheck = false;
808 808 src = fetchurl {
809 809 url = "https://files.pythonhosted.org/packages/9d/76/99fa82affce75f5ac0f7dbe513796c3f37311ace0c68e1b063683b4f9b99/subvertpy-0.10.1.tar.gz";
810 810 sha256 = "061ncy9wjz3zyv527avcrdyk0xygyssyy7p1644nhzhwp8zpybij";
811 811 };
812 812 meta = {
813 813 license = [ pkgs.lib.licenses.lgpl21Plus pkgs.lib.licenses.gpl2Plus ];
814 814 };
815 815 };
816 816 "termcolor" = super.buildPythonPackage {
817 817 name = "termcolor-1.1.0";
818 818 doCheck = false;
819 819 src = fetchurl {
820 820 url = "https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz";
821 821 sha256 = "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x";
822 822 };
823 823 meta = {
824 824 license = [ pkgs.lib.licenses.mit ];
825 825 };
826 826 };
827 827 "traitlets" = super.buildPythonPackage {
828 828 name = "traitlets-4.3.2";
829 829 doCheck = false;
830 830 propagatedBuildInputs = [
831 831 self."ipython-genutils"
832 832 self."six"
833 833 self."decorator"
834 834 self."enum34"
835 835 ];
836 836 src = fetchurl {
837 837 url = "https://files.pythonhosted.org/packages/a5/98/7f5ef2fe9e9e071813aaf9cb91d1a732e0a68b6c44a32b38cb8e14c3f069/traitlets-4.3.2.tar.gz";
838 838 sha256 = "0dbq7sx26xqz5ixs711k5nc88p8a0nqyz6162pwks5dpcz9d4jww";
839 839 };
840 840 meta = {
841 841 license = [ pkgs.lib.licenses.bsdOriginal ];
842 842 };
843 843 };
844 844 "translationstring" = super.buildPythonPackage {
845 845 name = "translationstring-1.3";
846 846 doCheck = false;
847 847 src = fetchurl {
848 848 url = "https://files.pythonhosted.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
849 849 sha256 = "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f";
850 850 };
851 851 meta = {
852 852 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
853 853 };
854 854 };
855 855 "venusian" = super.buildPythonPackage {
856 856 name = "venusian-1.2.0";
857 857 doCheck = false;
858 858 src = fetchurl {
859 859 url = "https://files.pythonhosted.org/packages/7e/6f/40a9d43ac77cb51cb62be5b5662d170f43f8037bdc4eab56336c4ca92bb7/venusian-1.2.0.tar.gz";
860 860 sha256 = "0ghyx66g8ikx9nx1mnwqvdcqm11i1vlq0hnvwl50s48bp22q5v34";
861 861 };
862 862 meta = {
863 863 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
864 864 };
865 865 };
866 866 "waitress" = super.buildPythonPackage {
867 867 name = "waitress-1.1.0";
868 868 doCheck = false;
869 869 src = fetchurl {
870 870 url = "https://files.pythonhosted.org/packages/3c/68/1c10dd5c556872ceebe88483b0436140048d39de83a84a06a8baa8136f4f/waitress-1.1.0.tar.gz";
871 871 sha256 = "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k";
872 872 };
873 873 meta = {
874 874 license = [ pkgs.lib.licenses.zpl21 ];
875 875 };
876 876 };
877 877 "wcwidth" = super.buildPythonPackage {
878 878 name = "wcwidth-0.1.7";
879 879 doCheck = false;
880 880 src = fetchurl {
881 881 url = "https://files.pythonhosted.org/packages/55/11/e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495/wcwidth-0.1.7.tar.gz";
882 882 sha256 = "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx";
883 883 };
884 884 meta = {
885 885 license = [ pkgs.lib.licenses.mit ];
886 886 };
887 887 };
888 888 "webob" = super.buildPythonPackage {
889 889 name = "webob-1.8.4";
890 890 doCheck = false;
891 891 src = fetchurl {
892 892 url = "https://files.pythonhosted.org/packages/e4/6c/99e322c3d4cc11d9060a67a9bf2f7c9c581f40988c11fffe89bb8c36bc5e/WebOb-1.8.4.tar.gz";
893 893 sha256 = "16cfg5y4n6sihz59vsmns2yqbfm0gfsn3l5xgz2g0pdhilaib0x4";
894 894 };
895 895 meta = {
896 896 license = [ pkgs.lib.licenses.mit ];
897 897 };
898 898 };
899 899 "webtest" = super.buildPythonPackage {
900 900 name = "webtest-2.0.32";
901 901 doCheck = false;
902 902 propagatedBuildInputs = [
903 903 self."six"
904 904 self."webob"
905 905 self."waitress"
906 906 self."beautifulsoup4"
907 907 ];
908 908 src = fetchurl {
909 909 url = "https://files.pythonhosted.org/packages/27/9f/9e74449d272ffbef4fb3012e6dbc53c0b24822d545e7a33a342f80131e59/WebTest-2.0.32.tar.gz";
910 910 sha256 = "0qp0nnbazzm4ibjiyqfcn6f230svk09i4g58zg2i9x1ga06h48a2";
911 911 };
912 912 meta = {
913 913 license = [ pkgs.lib.licenses.mit ];
914 914 };
915 915 };
916 916 "zope.deprecation" = super.buildPythonPackage {
917 917 name = "zope.deprecation-4.4.0";
918 918 doCheck = false;
919 919 propagatedBuildInputs = [
920 920 self."setuptools"
921 921 ];
922 922 src = fetchurl {
923 923 url = "https://files.pythonhosted.org/packages/34/da/46e92d32d545dd067b9436279d84c339e8b16de2ca393d7b892bc1e1e9fd/zope.deprecation-4.4.0.tar.gz";
924 924 sha256 = "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d";
925 925 };
926 926 meta = {
927 927 license = [ pkgs.lib.licenses.zpl21 ];
928 928 };
929 929 };
930 930 "zope.interface" = super.buildPythonPackage {
931 931 name = "zope.interface-4.6.0";
932 932 doCheck = false;
933 933 propagatedBuildInputs = [
934 934 self."setuptools"
935 935 ];
936 936 src = fetchurl {
937 937 url = "https://files.pythonhosted.org/packages/4e/d0/c9d16bd5b38de44a20c6dc5d5ed80a49626fafcb3db9f9efdc2a19026db6/zope.interface-4.6.0.tar.gz";
938 938 sha256 = "1rgh2x3rcl9r0v0499kf78xy86rnmanajf4ywmqb943wpk50sg8v";
939 939 };
940 940 meta = {
941 941 license = [ pkgs.lib.licenses.zpl21 ];
942 942 };
943 943 };
944 944
945 945 ### Test requirements
946 946
947 947
948 948 }
@@ -1,43 +1,43 b''
1 1 ## dependencies
2 2
3 3 # our custom configobj
4 4 https://code.rhodecode.com/upstream/configobj/archive/a11ff0a0bd4fbda9e3a91267e720f88329efb4a6.tar.gz?md5=9916c524ea11a6c418217af6b28d4b3c#egg=configobj==5.0.6
5 5
6 6 dogpile.cache==0.7.1
7 7 dogpile.core==0.4.1
8 8 decorator==4.1.2
9 9 dulwich==0.13.0
10 10 hgsubversion==1.9.3
11 11 hg-evolve==8.0.1
12 12 mako==1.0.7
13 13 markupsafe==1.1.0
14 mercurial==4.6.2
14 mercurial==4.9.0
15 15 msgpack-python==0.5.6
16 16
17 17 pastedeploy==2.0.1
18 18 pyramid==1.10.1
19 19 pyramid-mako==1.0.2
20 20
21 21 repoze.lru==0.7
22 22 simplejson==3.16.0
23 23 subprocess32==3.5.3
24 24 subvertpy==0.10.1
25 25
26 26 six==1.11.0
27 27 translationstring==1.3
28 28 webob==1.8.4
29 29 zope.deprecation==4.4.0
30 30 zope.interface==4.6.0
31 31
32 32 ## http servers
33 33 gevent==1.4.0
34 34 greenlet==0.4.15
35 35 gunicorn==19.9.0
36 36 waitress==1.1.0
37 37
38 38 ## debug
39 39 ipdb==0.11.0
40 40 ipython==5.1.0
41 41
42 42 ## test related requirements
43 43 -r requirements_test.txt
@@ -1,803 +1,803 b''
1 1 # RhodeCode VCSServer provides access to different vcs backends via network.
2 2 # Copyright (C) 2014-2019 RhodeCode GmbH
3 3 #
4 4 # This program is free software; you can redistribute it and/or modify
5 5 # it under the terms of the GNU General Public License as published by
6 6 # the Free Software Foundation; either version 3 of the License, or
7 7 # (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software Foundation,
16 16 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 17
18 18 import io
19 19 import logging
20 20 import stat
21 21 import urllib
22 22 import urllib2
23 23
24 24 from hgext import largefiles, rebase
25 25 from hgext.strip import strip as hgext_strip
26 26 from mercurial import commands
27 27 from mercurial import unionrepo
28 28 from mercurial import verify
29 29
30 30 import vcsserver
31 31 from vcsserver import exceptions
32 32 from vcsserver.base import RepoFactory, obfuscate_qs, raise_from_original
33 33 from vcsserver.hgcompat import (
34 34 archival, bin, clone, config as hgconfig, diffopts, hex,
35 35 hg_url as url_parser, httpbasicauthhandler, httpdigestauthhandler,
36 makepeer, localrepository, match, memctx, exchange, memfilectx, nullrev,
36 makepeer, instance, match, memctx, exchange, memfilectx, nullrev,
37 37 patch, peer, revrange, ui, hg_tag, Abort, LookupError, RepoError,
38 38 RepoLookupError, InterventionRequired, RequirementError)
39 39
40 40 log = logging.getLogger(__name__)
41 41
42 42
43 43 def make_ui_from_config(repo_config):
44 44 baseui = ui.ui()
45 45
46 46 # clean the baseui object
47 47 baseui._ocfg = hgconfig.config()
48 48 baseui._ucfg = hgconfig.config()
49 49 baseui._tcfg = hgconfig.config()
50 50
51 51 for section, option, value in repo_config:
52 52 baseui.setconfig(section, option, value)
53 53
54 54 # make our hgweb quiet so it doesn't print output
55 55 baseui.setconfig('ui', 'quiet', 'true')
56 56
57 57 baseui.setconfig('ui', 'paginate', 'never')
58 58 # force mercurial to only use 1 thread, otherwise it may try to set a
59 59 # signal in a non-main thread, thus generating a ValueError.
60 60 baseui.setconfig('worker', 'numcpus', 1)
61 61
62 62 # If there is no config for the largefiles extension, we explicitly disable
63 63 # it here. This overrides settings from repositories hgrc file. Recent
64 64 # mercurial versions enable largefiles in hgrc on clone from largefile
65 65 # repo.
66 66 if not baseui.hasconfig('extensions', 'largefiles'):
67 67 log.debug('Explicitly disable largefiles extension for repo.')
68 68 baseui.setconfig('extensions', 'largefiles', '!')
69 69
70 70 return baseui
71 71
72 72
73 73 def reraise_safe_exceptions(func):
74 74 """Decorator for converting mercurial exceptions to something neutral."""
75 75 def wrapper(*args, **kwargs):
76 76 try:
77 77 return func(*args, **kwargs)
78 78 except (Abort, InterventionRequired) as e:
79 79 raise_from_original(exceptions.AbortException(e))
80 80 except RepoLookupError as e:
81 81 raise_from_original(exceptions.LookupException(e))
82 82 except RequirementError as e:
83 83 raise_from_original(exceptions.RequirementException(e))
84 84 except RepoError as e:
85 85 raise_from_original(exceptions.VcsException(e))
86 86 except LookupError as e:
87 87 raise_from_original(exceptions.LookupException(e))
88 88 except Exception as e:
89 89 if not hasattr(e, '_vcs_kind'):
90 90 log.exception("Unhandled exception in hg remote call")
91 91 raise_from_original(exceptions.UnhandledException(e))
92 92
93 93 raise
94 94 return wrapper
95 95
96 96
97 97 class MercurialFactory(RepoFactory):
98 98 repo_type = 'hg'
99 99
100 100 def _create_config(self, config, hooks=True):
101 101 if not hooks:
102 102 hooks_to_clean = frozenset((
103 103 'changegroup.repo_size', 'preoutgoing.pre_pull',
104 104 'outgoing.pull_logger', 'prechangegroup.pre_push'))
105 105 new_config = []
106 106 for section, option, value in config:
107 107 if section == 'hooks' and option in hooks_to_clean:
108 108 continue
109 109 new_config.append((section, option, value))
110 110 config = new_config
111 111
112 112 baseui = make_ui_from_config(config)
113 113 return baseui
114 114
115 115 def _create_repo(self, wire, create):
116 116 baseui = self._create_config(wire["config"])
117 return localrepository(baseui, wire["path"], create)
117 return instance(baseui, wire["path"], create)
118 118
119 119
120 120 class HgRemote(object):
121 121
122 122 def __init__(self, factory):
123 123 self._factory = factory
124 124
125 125 self._bulk_methods = {
126 126 "affected_files": self.ctx_files,
127 127 "author": self.ctx_user,
128 128 "branch": self.ctx_branch,
129 129 "children": self.ctx_children,
130 130 "date": self.ctx_date,
131 131 "message": self.ctx_description,
132 132 "parents": self.ctx_parents,
133 133 "status": self.ctx_status,
134 134 "obsolete": self.ctx_obsolete,
135 135 "phase": self.ctx_phase,
136 136 "hidden": self.ctx_hidden,
137 137 "_file_paths": self.ctx_list,
138 138 }
139 139
140 140 @reraise_safe_exceptions
141 141 def discover_hg_version(self):
142 142 from mercurial import util
143 143 return util.version()
144 144
145 145 @reraise_safe_exceptions
146 146 def archive_repo(self, archive_path, mtime, file_info, kind):
147 147 if kind == "tgz":
148 148 archiver = archival.tarit(archive_path, mtime, "gz")
149 149 elif kind == "tbz2":
150 150 archiver = archival.tarit(archive_path, mtime, "bz2")
151 151 elif kind == 'zip':
152 152 archiver = archival.zipit(archive_path, mtime)
153 153 else:
154 154 raise exceptions.ArchiveException()(
155 155 'Remote does not support: "%s".' % kind)
156 156
157 157 for f_path, f_mode, f_is_link, f_content in file_info:
158 158 archiver.addfile(f_path, f_mode, f_is_link, f_content)
159 159 archiver.done()
160 160
161 161 @reraise_safe_exceptions
162 162 def bookmarks(self, wire):
163 163 repo = self._factory.repo(wire)
164 164 return dict(repo._bookmarks)
165 165
166 166 @reraise_safe_exceptions
167 167 def branches(self, wire, normal, closed):
168 168 repo = self._factory.repo(wire)
169 169 iter_branches = repo.branchmap().iterbranches()
170 170 bt = {}
171 171 for branch_name, _heads, tip, is_closed in iter_branches:
172 172 if normal and not is_closed:
173 173 bt[branch_name] = tip
174 174 if closed and is_closed:
175 175 bt[branch_name] = tip
176 176
177 177 return bt
178 178
179 179 @reraise_safe_exceptions
180 180 def bulk_request(self, wire, rev, pre_load):
181 181 result = {}
182 182 for attr in pre_load:
183 183 try:
184 184 method = self._bulk_methods[attr]
185 185 result[attr] = method(wire, rev)
186 186 except KeyError as e:
187 187 raise exceptions.VcsException(e)(
188 188 'Unknown bulk attribute: "%s"' % attr)
189 189 return result
190 190
191 191 @reraise_safe_exceptions
192 192 def clone(self, wire, source, dest, update_after_clone=False, hooks=True):
193 193 baseui = self._factory._create_config(wire["config"], hooks=hooks)
194 194 clone(baseui, source, dest, noupdate=not update_after_clone)
195 195
196 196 @reraise_safe_exceptions
197 197 def commitctx(
198 198 self, wire, message, parents, commit_time, commit_timezone,
199 199 user, files, extra, removed, updated):
200 200
201 201 def _filectxfn(_repo, memctx, path):
202 202 """
203 203 Marks given path as added/changed/removed in a given _repo. This is
204 204 for internal mercurial commit function.
205 205 """
206 206
207 207 # check if this path is removed
208 208 if path in removed:
209 209 # returning None is a way to mark node for removal
210 210 return None
211 211
212 212 # check if this path is added
213 213 for node in updated:
214 214 if node['path'] == path:
215 215 return memfilectx(
216 216 _repo,
217 217 changectx=memctx,
218 218 path=node['path'],
219 219 data=node['content'],
220 220 islink=False,
221 221 isexec=bool(node['mode'] & stat.S_IXUSR),
222 222 copied=False)
223 223
224 224 raise exceptions.AbortException()(
225 225 "Given path haven't been marked as added, "
226 226 "changed or removed (%s)" % path)
227 227
228 228 repo = self._factory.repo(wire)
229 229
230 230 commit_ctx = memctx(
231 231 repo=repo,
232 232 parents=parents,
233 233 text=message,
234 234 files=files,
235 235 filectxfn=_filectxfn,
236 236 user=user,
237 237 date=(commit_time, commit_timezone),
238 238 extra=extra)
239 239
240 240 n = repo.commitctx(commit_ctx)
241 241 new_id = hex(n)
242 242
243 243 return new_id
244 244
245 245 @reraise_safe_exceptions
246 246 def ctx_branch(self, wire, revision):
247 247 repo = self._factory.repo(wire)
248 248 ctx = repo[revision]
249 249 return ctx.branch()
250 250
251 251 @reraise_safe_exceptions
252 252 def ctx_children(self, wire, revision):
253 253 repo = self._factory.repo(wire)
254 254 ctx = repo[revision]
255 255 return [child.rev() for child in ctx.children()]
256 256
257 257 @reraise_safe_exceptions
258 258 def ctx_date(self, wire, revision):
259 259 repo = self._factory.repo(wire)
260 260 ctx = repo[revision]
261 261 return ctx.date()
262 262
263 263 @reraise_safe_exceptions
264 264 def ctx_description(self, wire, revision):
265 265 repo = self._factory.repo(wire)
266 266 ctx = repo[revision]
267 267 return ctx.description()
268 268
269 @reraise_safe_exceptions
270 def ctx_diff(
271 self, wire, revision, git=True, ignore_whitespace=True, context=3):
272 repo = self._factory.repo(wire)
273 ctx = repo[revision]
274 result = ctx.diff(
275 git=git, ignore_whitespace=ignore_whitespace, context=context)
276 return list(result)
269 # @reraise_safe_exceptions
270 # def ctx_diff(
271 # self, wire, revision, git=True, ignore_whitespace=True, context=3):
272 # repo = self._factory.repo(wire)
273 # ctx = repo[revision]
274 # result = ctx.diff(
275 # git=git, ignore_whitespace=ignore_whitespace, context=context)
276 # return list(result)
277 277
278 278 @reraise_safe_exceptions
279 279 def ctx_files(self, wire, revision):
280 280 repo = self._factory.repo(wire)
281 281 ctx = repo[revision]
282 282 return ctx.files()
283 283
284 284 @reraise_safe_exceptions
285 285 def ctx_list(self, path, revision):
286 286 repo = self._factory.repo(path)
287 287 ctx = repo[revision]
288 288 return list(ctx)
289 289
290 290 @reraise_safe_exceptions
291 291 def ctx_parents(self, wire, revision):
292 292 repo = self._factory.repo(wire)
293 293 ctx = repo[revision]
294 294 return [parent.rev() for parent in ctx.parents()]
295 295
296 296 @reraise_safe_exceptions
297 297 def ctx_phase(self, wire, revision):
298 298 repo = self._factory.repo(wire)
299 299 ctx = repo[revision]
300 300 # public=0, draft=1, secret=3
301 301 return ctx.phase()
302 302
303 303 @reraise_safe_exceptions
304 304 def ctx_obsolete(self, wire, revision):
305 305 repo = self._factory.repo(wire)
306 306 ctx = repo[revision]
307 307 return ctx.obsolete()
308 308
309 309 @reraise_safe_exceptions
310 310 def ctx_hidden(self, wire, revision):
311 311 repo = self._factory.repo(wire)
312 312 ctx = repo[revision]
313 313 return ctx.hidden()
314 314
315 315 @reraise_safe_exceptions
316 316 def ctx_substate(self, wire, revision):
317 317 repo = self._factory.repo(wire)
318 318 ctx = repo[revision]
319 319 return ctx.substate
320 320
321 321 @reraise_safe_exceptions
322 322 def ctx_status(self, wire, revision):
323 323 repo = self._factory.repo(wire)
324 324 ctx = repo[revision]
325 325 status = repo[ctx.p1().node()].status(other=ctx.node())
326 326 # object of status (odd, custom named tuple in mercurial) is not
327 327 # correctly serializable, we make it a list, as the underling
328 328 # API expects this to be a list
329 329 return list(status)
330 330
331 331 @reraise_safe_exceptions
332 332 def ctx_user(self, wire, revision):
333 333 repo = self._factory.repo(wire)
334 334 ctx = repo[revision]
335 335 return ctx.user()
336 336
337 337 @reraise_safe_exceptions
338 338 def check_url(self, url, config):
339 339 _proto = None
340 340 if '+' in url[:url.find('://')]:
341 341 _proto = url[0:url.find('+')]
342 342 url = url[url.find('+') + 1:]
343 343 handlers = []
344 344 url_obj = url_parser(url)
345 345 test_uri, authinfo = url_obj.authinfo()
346 346 url_obj.passwd = '*****' if url_obj.passwd else url_obj.passwd
347 347 url_obj.query = obfuscate_qs(url_obj.query)
348 348
349 349 cleaned_uri = str(url_obj)
350 350 log.info("Checking URL for remote cloning/import: %s", cleaned_uri)
351 351
352 352 if authinfo:
353 353 # create a password manager
354 354 passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
355 355 passmgr.add_password(*authinfo)
356 356
357 357 handlers.extend((httpbasicauthhandler(passmgr),
358 358 httpdigestauthhandler(passmgr)))
359 359
360 360 o = urllib2.build_opener(*handlers)
361 361 o.addheaders = [('Content-Type', 'application/mercurial-0.1'),
362 362 ('Accept', 'application/mercurial-0.1')]
363 363
364 364 q = {"cmd": 'between'}
365 365 q.update({'pairs': "%s-%s" % ('0' * 40, '0' * 40)})
366 366 qs = '?%s' % urllib.urlencode(q)
367 367 cu = "%s%s" % (test_uri, qs)
368 368 req = urllib2.Request(cu, None, {})
369 369
370 370 try:
371 371 log.debug("Trying to open URL %s", cleaned_uri)
372 372 resp = o.open(req)
373 373 if resp.code != 200:
374 374 raise exceptions.URLError()('Return Code is not 200')
375 375 except Exception as e:
376 376 log.warning("URL cannot be opened: %s", cleaned_uri, exc_info=True)
377 377 # means it cannot be cloned
378 378 raise exceptions.URLError(e)("[%s] org_exc: %s" % (cleaned_uri, e))
379 379
380 380 # now check if it's a proper hg repo, but don't do it for svn
381 381 try:
382 382 if _proto == 'svn':
383 383 pass
384 384 else:
385 385 # check for pure hg repos
386 386 log.debug(
387 387 "Verifying if URL is a Mercurial repository: %s",
388 388 cleaned_uri)
389 389 ui = make_ui_from_config(config)
390 390 peer_checker = makepeer(ui, url)
391 391 peer_checker.lookup('tip')
392 392 except Exception as e:
393 393 log.warning("URL is not a valid Mercurial repository: %s",
394 394 cleaned_uri)
395 395 raise exceptions.URLError(e)(
396 396 "url [%s] does not look like an hg repo org_exc: %s"
397 397 % (cleaned_uri, e))
398 398
399 399 log.info("URL is a valid Mercurial repository: %s", cleaned_uri)
400 400 return True
401 401
402 402 @reraise_safe_exceptions
403 403 def diff(
404 404 self, wire, rev1, rev2, file_filter, opt_git, opt_ignorews,
405 405 context):
406 406 repo = self._factory.repo(wire)
407 407
408 408 if file_filter:
409 409 match_filter = match(file_filter[0], '', [file_filter[1]])
410 410 else:
411 411 match_filter = file_filter
412 412 opts = diffopts(git=opt_git, ignorews=opt_ignorews, context=context)
413 413
414 414 try:
415 415 return "".join(patch.diff(
416 416 repo, node1=rev1, node2=rev2, match=match_filter, opts=opts))
417 417 except RepoLookupError as e:
418 418 raise exceptions.LookupException(e)()
419 419
420 420 @reraise_safe_exceptions
421 421 def node_history(self, wire, revision, path, limit):
422 422 repo = self._factory.repo(wire)
423 423
424 424 ctx = repo[revision]
425 425 fctx = ctx.filectx(path)
426 426
427 427 def history_iter():
428 428 limit_rev = fctx.rev()
429 429 for obj in reversed(list(fctx.filelog())):
430 430 obj = fctx.filectx(obj)
431 431 if limit_rev >= obj.rev():
432 432 yield obj
433 433
434 434 history = []
435 435 for cnt, obj in enumerate(history_iter()):
436 436 if limit and cnt >= limit:
437 437 break
438 438 history.append(hex(obj.node()))
439 439
440 440 return [x for x in history]
441 441
442 442 @reraise_safe_exceptions
443 443 def node_history_untill(self, wire, revision, path, limit):
444 444 repo = self._factory.repo(wire)
445 445 ctx = repo[revision]
446 446 fctx = ctx.filectx(path)
447 447
448 448 file_log = list(fctx.filelog())
449 449 if limit:
450 450 # Limit to the last n items
451 451 file_log = file_log[-limit:]
452 452
453 453 return [hex(fctx.filectx(cs).node()) for cs in reversed(file_log)]
454 454
455 455 @reraise_safe_exceptions
456 456 def fctx_annotate(self, wire, revision, path):
457 457 repo = self._factory.repo(wire)
458 458 ctx = repo[revision]
459 459 fctx = ctx.filectx(path)
460 460
461 461 result = []
462 462 for i, annotate_obj in enumerate(fctx.annotate(), 1):
463 463 ln_no = i
464 464 sha = hex(annotate_obj.fctx.node())
465 465 content = annotate_obj.text
466 466 result.append((ln_no, sha, content))
467 467 return result
468 468
469 469 @reraise_safe_exceptions
470 470 def fctx_data(self, wire, revision, path):
471 471 repo = self._factory.repo(wire)
472 472 ctx = repo[revision]
473 473 fctx = ctx.filectx(path)
474 474 return fctx.data()
475 475
476 476 @reraise_safe_exceptions
477 477 def fctx_flags(self, wire, revision, path):
478 478 repo = self._factory.repo(wire)
479 479 ctx = repo[revision]
480 480 fctx = ctx.filectx(path)
481 481 return fctx.flags()
482 482
483 483 @reraise_safe_exceptions
484 484 def fctx_size(self, wire, revision, path):
485 485 repo = self._factory.repo(wire)
486 486 ctx = repo[revision]
487 487 fctx = ctx.filectx(path)
488 488 return fctx.size()
489 489
490 490 @reraise_safe_exceptions
491 491 def get_all_commit_ids(self, wire, name):
492 492 repo = self._factory.repo(wire)
493 493 revs = repo.filtered(name).changelog.index
494 494 return map(lambda x: hex(x[7]), revs)[:-1]
495 495
496 496 @reraise_safe_exceptions
497 497 def get_config_value(self, wire, section, name, untrusted=False):
498 498 repo = self._factory.repo(wire)
499 499 return repo.ui.config(section, name, untrusted=untrusted)
500 500
501 501 @reraise_safe_exceptions
502 502 def get_config_bool(self, wire, section, name, untrusted=False):
503 503 repo = self._factory.repo(wire)
504 504 return repo.ui.configbool(section, name, untrusted=untrusted)
505 505
506 506 @reraise_safe_exceptions
507 507 def get_config_list(self, wire, section, name, untrusted=False):
508 508 repo = self._factory.repo(wire)
509 509 return repo.ui.configlist(section, name, untrusted=untrusted)
510 510
511 511 @reraise_safe_exceptions
512 512 def is_large_file(self, wire, path):
513 513 return largefiles.lfutil.isstandin(path)
514 514
515 515 @reraise_safe_exceptions
516 516 def in_largefiles_store(self, wire, sha):
517 517 repo = self._factory.repo(wire)
518 518 return largefiles.lfutil.instore(repo, sha)
519 519
520 520 @reraise_safe_exceptions
521 521 def in_user_cache(self, wire, sha):
522 522 repo = self._factory.repo(wire)
523 523 return largefiles.lfutil.inusercache(repo.ui, sha)
524 524
525 525 @reraise_safe_exceptions
526 526 def store_path(self, wire, sha):
527 527 repo = self._factory.repo(wire)
528 528 return largefiles.lfutil.storepath(repo, sha)
529 529
530 530 @reraise_safe_exceptions
531 531 def link(self, wire, sha, path):
532 532 repo = self._factory.repo(wire)
533 533 largefiles.lfutil.link(
534 534 largefiles.lfutil.usercachepath(repo.ui, sha), path)
535 535
536 536 @reraise_safe_exceptions
537 537 def localrepository(self, wire, create=False):
538 538 self._factory.repo(wire, create=create)
539 539
540 540 @reraise_safe_exceptions
541 541 def lookup(self, wire, revision, both):
542 542
543 543 repo = self._factory.repo(wire)
544 544
545 545 if isinstance(revision, int):
546 546 # NOTE(marcink):
547 547 # since Mercurial doesn't support indexes properly
548 548 # we need to shift accordingly by one to get proper index, e.g
549 549 # repo[-1] => repo[-2]
550 550 # repo[0] => repo[-1]
551 551 # repo[1] => repo[2] we also never call repo[0] because
552 552 # it's actually second commit
553 553 if revision <= 0:
554 554 revision = revision + -1
555 555 else:
556 556 revision = revision + 1
557 557
558 558 try:
559 559 ctx = repo[revision]
560 560 except RepoLookupError as e:
561 561 raise exceptions.LookupException(e)(revision)
562 562 except LookupError as e:
563 563 raise exceptions.LookupException(e)(e.name)
564 564
565 565 if not both:
566 566 return ctx.hex()
567 567
568 568 ctx = repo[ctx.hex()]
569 569 return ctx.hex(), ctx.rev()
570 570
571 571 @reraise_safe_exceptions
572 572 def pull(self, wire, url, commit_ids=None):
573 573 repo = self._factory.repo(wire)
574 574 # Disable any prompts for this repo
575 575 repo.ui.setconfig('ui', 'interactive', 'off', '-y')
576 576
577 577 remote = peer(repo, {}, url)
578 578 # Disable any prompts for this remote
579 579 remote.ui.setconfig('ui', 'interactive', 'off', '-y')
580 580
581 581 if commit_ids:
582 582 commit_ids = [bin(commit_id) for commit_id in commit_ids]
583 583
584 584 return exchange.pull(
585 585 repo, remote, heads=commit_ids, force=None).cgresult
586 586
587 587 @reraise_safe_exceptions
588 588 def sync_push(self, wire, url):
589 589 if not self.check_url(url, wire['config']):
590 590 return
591 591
592 592 repo = self._factory.repo(wire)
593 593
594 594 # Disable any prompts for this repo
595 595 repo.ui.setconfig('ui', 'interactive', 'off', '-y')
596 596
597 597 bookmarks = dict(repo._bookmarks).keys()
598 598 remote = peer(repo, {}, url)
599 599 # Disable any prompts for this remote
600 600 remote.ui.setconfig('ui', 'interactive', 'off', '-y')
601 601
602 602 return exchange.push(
603 603 repo, remote, newbranch=True, bookmarks=bookmarks).cgresult
604 604
605 605 @reraise_safe_exceptions
606 606 def revision(self, wire, rev):
607 607 repo = self._factory.repo(wire)
608 608 ctx = repo[rev]
609 609 return ctx.rev()
610 610
611 611 @reraise_safe_exceptions
612 612 def rev_range(self, wire, filter):
613 613 repo = self._factory.repo(wire)
614 614 revisions = [rev for rev in revrange(repo, filter)]
615 615 return revisions
616 616
617 617 @reraise_safe_exceptions
618 618 def rev_range_hash(self, wire, node):
619 619 repo = self._factory.repo(wire)
620 620
621 621 def get_revs(repo, rev_opt):
622 622 if rev_opt:
623 623 revs = revrange(repo, rev_opt)
624 624 if len(revs) == 0:
625 625 return (nullrev, nullrev)
626 626 return max(revs), min(revs)
627 627 else:
628 628 return len(repo) - 1, 0
629 629
630 630 stop, start = get_revs(repo, [node + ':'])
631 631 revs = [hex(repo[r].node()) for r in xrange(start, stop + 1)]
632 632 return revs
633 633
634 634 @reraise_safe_exceptions
635 635 def revs_from_revspec(self, wire, rev_spec, *args, **kwargs):
636 636 other_path = kwargs.pop('other_path', None)
637 637
638 638 # case when we want to compare two independent repositories
639 639 if other_path and other_path != wire["path"]:
640 640 baseui = self._factory._create_config(wire["config"])
641 repo = unionrepo.unionrepository(baseui, other_path, wire["path"])
641 repo = unionrepo.makeunionrepository(baseui, other_path, wire["path"])
642 642 else:
643 643 repo = self._factory.repo(wire)
644 644 return list(repo.revs(rev_spec, *args))
645 645
646 646 @reraise_safe_exceptions
647 647 def strip(self, wire, revision, update, backup):
648 648 repo = self._factory.repo(wire)
649 649 ctx = repo[revision]
650 650 hgext_strip(
651 651 repo.baseui, repo, ctx.node(), update=update, backup=backup)
652 652
653 653 @reraise_safe_exceptions
654 654 def verify(self, wire,):
655 655 repo = self._factory.repo(wire)
656 656 baseui = self._factory._create_config(wire['config'])
657 657 baseui.setconfig('ui', 'quiet', 'false')
658 658 output = io.BytesIO()
659 659
660 660 def write(data, **unused_kwargs):
661 661 output.write(data)
662 662 baseui.write = write
663 663
664 664 repo.ui = baseui
665 665 verify.verify(repo)
666 666 return output.getvalue()
667 667
668 668 @reraise_safe_exceptions
669 669 def tag(self, wire, name, revision, message, local, user,
670 670 tag_time, tag_timezone):
671 671 repo = self._factory.repo(wire)
672 672 ctx = repo[revision]
673 673 node = ctx.node()
674 674
675 675 date = (tag_time, tag_timezone)
676 676 try:
677 677 hg_tag.tag(repo, name, node, message, local, user, date)
678 678 except Abort as e:
679 679 log.exception("Tag operation aborted")
680 680 # Exception can contain unicode which we convert
681 681 raise exceptions.AbortException(e)(repr(e))
682 682
683 683 @reraise_safe_exceptions
684 684 def tags(self, wire):
685 685 repo = self._factory.repo(wire)
686 686 return repo.tags()
687 687
688 688 @reraise_safe_exceptions
689 689 def update(self, wire, node=None, clean=False):
690 690 repo = self._factory.repo(wire)
691 691 baseui = self._factory._create_config(wire['config'])
692 692 commands.update(baseui, repo, node=node, clean=clean)
693 693
694 694 @reraise_safe_exceptions
695 695 def identify(self, wire):
696 696 repo = self._factory.repo(wire)
697 697 baseui = self._factory._create_config(wire['config'])
698 698 output = io.BytesIO()
699 699 baseui.write = output.write
700 700 # This is required to get a full node id
701 701 baseui.debugflag = True
702 702 commands.identify(baseui, repo, id=True)
703 703
704 704 return output.getvalue()
705 705
706 706 @reraise_safe_exceptions
707 707 def pull_cmd(self, wire, source, bookmark=None, branch=None, revision=None,
708 708 hooks=True):
709 709 repo = self._factory.repo(wire)
710 710 baseui = self._factory._create_config(wire['config'], hooks=hooks)
711 711
712 712 # Mercurial internally has a lot of logic that checks ONLY if
713 713 # option is defined, we just pass those if they are defined then
714 714 opts = {}
715 715 if bookmark:
716 716 opts['bookmark'] = bookmark
717 717 if branch:
718 718 opts['branch'] = branch
719 719 if revision:
720 720 opts['rev'] = revision
721 721
722 722 commands.pull(baseui, repo, source, **opts)
723 723
724 724 @reraise_safe_exceptions
725 725 def heads(self, wire, branch=None):
726 726 repo = self._factory.repo(wire)
727 727 baseui = self._factory._create_config(wire['config'])
728 728 output = io.BytesIO()
729 729
730 730 def write(data, **unused_kwargs):
731 731 output.write(data)
732 732
733 733 baseui.write = write
734 734 if branch:
735 735 args = [branch]
736 736 else:
737 737 args = []
738 738 commands.heads(baseui, repo, template='{node} ', *args)
739 739
740 740 return output.getvalue()
741 741
742 742 @reraise_safe_exceptions
743 743 def ancestor(self, wire, revision1, revision2):
744 744 repo = self._factory.repo(wire)
745 745 changelog = repo.changelog
746 746 lookup = repo.lookup
747 747 a = changelog.ancestor(lookup(revision1), lookup(revision2))
748 748 return hex(a)
749 749
750 750 @reraise_safe_exceptions
751 751 def push(self, wire, revisions, dest_path, hooks=True,
752 752 push_branches=False):
753 753 repo = self._factory.repo(wire)
754 754 baseui = self._factory._create_config(wire['config'], hooks=hooks)
755 755 commands.push(baseui, repo, dest=dest_path, rev=revisions,
756 756 new_branch=push_branches)
757 757
758 758 @reraise_safe_exceptions
759 759 def merge(self, wire, revision):
760 760 repo = self._factory.repo(wire)
761 761 baseui = self._factory._create_config(wire['config'])
762 762 repo.ui.setconfig('ui', 'merge', 'internal:dump')
763 763
764 764 # In case of sub repositories are used mercurial prompts the user in
765 765 # case of merge conflicts or different sub repository sources. By
766 766 # setting the interactive flag to `False` mercurial doesn't prompt the
767 767 # used but instead uses a default value.
768 768 repo.ui.setconfig('ui', 'interactive', False)
769 769
770 770 commands.merge(baseui, repo, rev=revision)
771 771
772 772 @reraise_safe_exceptions
773 773 def commit(self, wire, message, username, close_branch=False):
774 774 repo = self._factory.repo(wire)
775 775 baseui = self._factory._create_config(wire['config'])
776 776 repo.ui.setconfig('ui', 'username', username)
777 777 commands.commit(baseui, repo, message=message, close_branch=close_branch)
778 778
779 779 @reraise_safe_exceptions
780 780 def rebase(self, wire, source=None, dest=None, abort=False):
781 781 repo = self._factory.repo(wire)
782 782 baseui = self._factory._create_config(wire['config'])
783 783 repo.ui.setconfig('ui', 'merge', 'internal:dump')
784 784 rebase.rebase(
785 785 baseui, repo, base=source, dest=dest, abort=abort, keep=not abort)
786 786
787 787 @reraise_safe_exceptions
788 788 def bookmark(self, wire, bookmark, revision=None):
789 789 repo = self._factory.repo(wire)
790 790 baseui = self._factory._create_config(wire['config'])
791 791 commands.bookmark(baseui, repo, bookmark, rev=revision, force=True)
792 792
793 793 @reraise_safe_exceptions
794 794 def install_hooks(self, wire, force=False):
795 795 # we don't need any special hooks for Mercurial
796 796 pass
797 797
798 798 @reraise_safe_exceptions
799 799 def get_hooks_info(self, wire):
800 800 return {
801 801 'pre_version': vcsserver.__version__,
802 802 'post_version': vcsserver.__version__,
803 803 }
@@ -1,63 +1,63 b''
1 1 # RhodeCode VCSServer provides access to different vcs backends via network.
2 2 # Copyright (C) 2014-2019 RhodeCode GmbH
3 3 #
4 4 # This program is free software; you can redistribute it and/or modify
5 5 # it under the terms of the GNU General Public License as published by
6 6 # the Free Software Foundation; either version 3 of the License, or
7 7 # (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software Foundation,
16 16 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 17
18 18 """
19 19 Mercurial libs compatibility
20 20 """
21 21
22 22 import mercurial
23 23 from mercurial import demandimport
24 24 # patch demandimport, due to bug in mercurial when it always triggers
25 25 # demandimport.enable()
26 26 demandimport.enable = lambda *args, **kwargs: 1
27 27
28 28 from mercurial import ui
29 29 from mercurial import patch
30 30 from mercurial import config
31 31 from mercurial import extensions
32 32 from mercurial import scmutil
33 33 from mercurial import archival
34 34 from mercurial import discovery
35 35 from mercurial import unionrepo
36 36 from mercurial import localrepo
37 37 from mercurial import merge as hg_merge
38 38 from mercurial import subrepo
39 39 from mercurial import tags as hg_tag
40 40
41 41 from mercurial.commands import clone, nullid, pull
42 42 from mercurial.context import memctx, memfilectx
43 43 from mercurial.error import (
44 44 LookupError, RepoError, RepoLookupError, Abort, InterventionRequired,
45 45 RequirementError)
46 46 from mercurial.hgweb import hgweb_mod
47 from mercurial.localrepo import localrepository
47 from mercurial.localrepo import instance
48 48 from mercurial.match import match
49 49 from mercurial.mdiff import diffopts
50 50 from mercurial.node import bin, hex
51 51 from mercurial.encoding import tolocal
52 52 from mercurial.discovery import findcommonoutgoing
53 53 from mercurial.hg import peer
54 54 from mercurial.httppeer import makepeer
55 55 from mercurial.util import url as hg_url
56 56 from mercurial.scmutil import revrange
57 57 from mercurial.node import nullrev
58 58 from mercurial import exchange
59 59 from hgext import largefiles
60 60
61 61 # those authnadlers are patched for python 2.6.5 bug an
62 62 # infinit looping when given invalid resources
63 63 from mercurial.url import httpbasicauthhandler, httpdigestauthhandler
General Comments 0
You need to be logged in to leave comments. Login now