##// END OF EJS Templates
release: Merge default into stable for release preparation
marcink -
r284:a3f9910f merge stable
parent child Browse files
Show More
@@ -0,0 +1,37 b''
1 This patch does two things: (1) use the right name for `docbook2texi',
2 and (2) make sure `gitman.info' isn't produced since it's broken (duplicate
3 node names).
4
5 diff -ru git-1.8.4-orig/Documentation/Makefile git-1.8.4/Documentation/Makefile
6 --- git-1.8.4-orig/Documentation/Makefile 2013-08-23 21:38:43.000000000 +0200
7 +++ git-1.8.4/Documentation/Makefile 2013-09-30 14:48:51.532890378 +0200
8 @@ -101,7 +101,7 @@
9
10 MAKEINFO = makeinfo
11 INSTALL_INFO = install-info
12 -DOCBOOK2X_TEXI = docbook2x-texi
13 +DOCBOOK2X_TEXI = docbook2texi
14 DBLATEX = dblatex
15 ifndef PERL_PATH
16 PERL_PATH = /usr/bin/perl
17 @@ -205,7 +205,7 @@
18 man5: $(DOC_MAN5)
19 man7: $(DOC_MAN7)
20
21 -info: git.info gitman.info
22 +info: git.info
23
24 pdf: user-manual.pdf
25
26 @@ -221,10 +221,9 @@
27
28 install-info: info
29 $(INSTALL) -d -m 755 $(DESTDIR)$(infodir)
30 - $(INSTALL) -m 644 git.info gitman.info $(DESTDIR)$(infodir)
31 + $(INSTALL) -m 644 git.info $(DESTDIR)$(infodir)
32 if test -r $(DESTDIR)$(infodir)/dir; then \
33 $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) git.info ;\
34 - $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) gitman.info ;\
35 else \
36 echo "No directory found in $(DESTDIR)$(infodir)" >&2 ; \
37 fi
@@ -0,0 +1,94 b''
1 --- a/git-sh-i18n.sh
2 +++ b/git-sh-i18n.sh
3 @@ -15,87 +15,11 @@
4 fi
5 export TEXTDOMAINDIR
6
7 -# First decide what scheme to use...
8 -GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
9 -if test -n "@@USE_GETTEXT_SCHEME@@"
10 -then
11 - GIT_INTERNAL_GETTEXT_SH_SCHEME="@@USE_GETTEXT_SCHEME@@"
12 -elif test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"
13 -then
14 - : no probing necessary
15 -elif test -n "$GIT_GETTEXT_POISON"
16 -then
17 - GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
18 -elif type gettext.sh >/dev/null 2>&1
19 -then
20 - # GNU libintl's gettext.sh
21 - GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu
22 -elif test "$(gettext -h 2>&1)" = "-h"
23 -then
24 - # gettext binary exists but no gettext.sh. likely to be a gettext
25 - # binary on a Solaris or something that is not GNU libintl and
26 - # lack eval_gettext.
27 - GIT_INTERNAL_GETTEXT_SH_SCHEME=gettext_without_eval_gettext
28 -fi
29 -export GIT_INTERNAL_GETTEXT_SH_SCHEME
30 -
31 -# ... and then follow that decision.
32 -case "$GIT_INTERNAL_GETTEXT_SH_SCHEME" in
33 -gnu)
34 - # Use libintl's gettext.sh, or fall back to English if we can't.
35 - . gettext.sh
36 - ;;
37 -gettext_without_eval_gettext)
38 - # Solaris has a gettext(1) but no eval_gettext(1)
39 - eval_gettext () {
40 - gettext "$1" | (
41 - export PATH $(git sh-i18n--envsubst --variables "$1");
42 - git sh-i18n--envsubst "$1"
43 - )
44 - }
45 -
46 - eval_ngettext () {
47 - ngettext "$1" "$2" "$3" | (
48 - export PATH $(git sh-i18n--envsubst --variables "$2");
49 - git sh-i18n--envsubst "$2"
50 - )
51 - }
52 - ;;
53 -poison)
54 - # Emit garbage so that tests that incorrectly rely on translatable
55 - # strings will fail.
56 - gettext () {
57 - printf "%s" "# GETTEXT POISON #"
58 - }
59 -
60 - eval_gettext () {
61 - printf "%s" "# GETTEXT POISON #"
62 - }
63 -
64 - eval_ngettext () {
65 - printf "%s" "# GETTEXT POISON #"
66 - }
67 - ;;
68 -*)
69 - gettext () {
70 - printf "%s" "$1"
71 - }
72 -
73 - eval_gettext () {
74 - printf "%s" "$1" | (
75 - export PATH $(git sh-i18n--envsubst --variables "$1");
76 - git sh-i18n--envsubst "$1"
77 - )
78 - }
79 +# GNU gettext
80 +export GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu
81 +export PATH=@gettext@/bin:$PATH
82
83 - eval_ngettext () {
84 - (test "$3" = 1 && printf "%s" "$1" || printf "%s" "$2") | (
85 - export PATH $(git sh-i18n--envsubst --variables "$2");
86 - git sh-i18n--envsubst "$2"
87 - )
88 - }
89 - ;;
90 -esac
91 +. @gettext@/bin/gettext.sh
92
93 # Git-specific wrapper functions
94 gettextln () {
@@ -0,0 +1,26 b''
1 diff --git a/connect.c b/connect.c
2 index fd7ffe1..20cd992 100644
3 --- a/connect.c
4 +++ b/connect.c
5 @@ -768,7 +768,7 @@
6
7 ssh = getenv("GIT_SSH");
8 if (!ssh)
9 - ssh = "ssh";
10 + ssh = "@ssh@";
11 else
12 handle_ssh_variant(ssh, 0,
13 &port_option,
14 diff --git a/git-gui/lib/remote_add.tcl b/git-gui/lib/remote_add.tcl
15 index 50029d0..17b9594 100644
16 --- a/git-gui/lib/remote_add.tcl
17 +++ b/git-gui/lib/remote_add.tcl
18 @@ -139,7 +139,7 @@
19 # Parse the location
20 if { [regexp {(?:git\+)?ssh://([^/]+)(/.+)} $location xx host path]
21 || [regexp {([^:][^:]+):(.+)} $location xx host path]} {
22 - set ssh ssh
23 + set ssh @ssh@
24 if {[info exists env(GIT_SSH)]} {
25 set ssh $env(GIT_SSH)
26 }
@@ -1,5 +1,5 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.9.1
2 current_version = 4.10.0
3 message = release: Bump version {current_version} to {new_version}
3 message = release: Bump version {current_version} to {new_version}
4
4
5 [bumpversion:file:vcsserver/VERSION]
5 [bumpversion:file:vcsserver/VERSION]
@@ -5,12 +5,10 b' done = false'
5 done = true
5 done = true
6
6
7 [task:fixes_on_stable]
7 [task:fixes_on_stable]
8 done = true
9
8
10 [task:pip2nix_generated]
9 [task:pip2nix_generated]
11 done = true
12
10
13 [release]
11 [release]
14 state = prepared
12 state = in_progress
15 version = 4.9.1
13 version = 4.10.0
16
14
@@ -16,12 +16,19 b' let'
16 pkgs = pkgs_.overridePackages (self: super: {
16 pkgs = pkgs_.overridePackages (self: super: {
17 # bump GIT version
17 # bump GIT version
18 git = pkgs.lib.overrideDerivation pkgs_.git (oldAttrs: {
18 git = pkgs.lib.overrideDerivation pkgs_.git (oldAttrs: {
19 name = "git-2.9.5";
19 name = "git-2.13.5";
20 src = pkgs.fetchurl {
20 src = pkgs.fetchurl {
21 url = "https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.xz";
21 url = "https://www.kernel.org/pub/software/scm/git/git-2.13.5.tar.xz";
22 sha256 = "00ir7qmgfszwrhxjzxwixk7wp35gxvvw467gr30bagwsrdza7gm4";
22 sha256 = "18fi18103n7grshm4ffb0fwsnvbl48sbqy5gqx528vf8maff5j91";
23 };
23 };
24
24
25 patches = [
26 ./pkgs/git_patches/docbook2texi.patch
27 ./pkgs/git_patches/symlinks-in-bin.patch
28 ./pkgs/git_patches/git-sh-i18n.patch
29 ./pkgs/git_patches/ssh-path.patch
30 ];
31
25 });
32 });
26
33
27 # Override subversion derivation to
34 # Override subversion derivation to
@@ -3,13 +3,13 b''
3
3
4 {
4 {
5 Beaker = super.buildPythonPackage {
5 Beaker = super.buildPythonPackage {
6 name = "Beaker-1.7.0";
6 name = "Beaker-1.9.0";
7 buildInputs = with self; [];
7 buildInputs = with self; [];
8 doCheck = false;
8 doCheck = false;
9 propagatedBuildInputs = with self; [];
9 propagatedBuildInputs = with self; [funcsigs];
10 src = fetchurl {
10 src = fetchurl {
11 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
11 url = "https://pypi.python.org/packages/93/b2/12de6937b06e9615dbb3cb3a1c9af17f133f435bdef59f4ad42032b6eb49/Beaker-1.9.0.tar.gz";
12 md5 = "386be3f7fe427358881eee4622b428b3";
12 md5 = "38b3fcdfa24faf97c6cf66991eb54e9c";
13 };
13 };
14 meta = {
14 meta = {
15 license = [ pkgs.lib.licenses.bsdOriginal ];
15 license = [ pkgs.lib.licenses.bsdOriginal ];
@@ -29,13 +29,13 b''
29 };
29 };
30 };
30 };
31 Mako = super.buildPythonPackage {
31 Mako = super.buildPythonPackage {
32 name = "Mako-1.0.6";
32 name = "Mako-1.0.7";
33 buildInputs = with self; [];
33 buildInputs = with self; [];
34 doCheck = false;
34 doCheck = false;
35 propagatedBuildInputs = with self; [MarkupSafe];
35 propagatedBuildInputs = with self; [MarkupSafe];
36 src = fetchurl {
36 src = fetchurl {
37 url = "https://pypi.python.org/packages/56/4b/cb75836863a6382199aefb3d3809937e21fa4cb0db15a4f4ba0ecc2e7e8e/Mako-1.0.6.tar.gz";
37 url = "https://pypi.python.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz";
38 md5 = "a28e22a339080316b2acc352b9ee631c";
38 md5 = "5836cc997b1b773ef389bf6629c30e65";
39 };
39 };
40 meta = {
40 meta = {
41 license = [ pkgs.lib.licenses.mit ];
41 license = [ pkgs.lib.licenses.mit ];
@@ -68,26 +68,26 b''
68 };
68 };
69 };
69 };
70 WebOb = super.buildPythonPackage {
70 WebOb = super.buildPythonPackage {
71 name = "WebOb-1.3.1";
71 name = "WebOb-1.7.3";
72 buildInputs = with self; [];
72 buildInputs = with self; [];
73 doCheck = false;
73 doCheck = false;
74 propagatedBuildInputs = with self; [];
74 propagatedBuildInputs = with self; [];
75 src = fetchurl {
75 src = fetchurl {
76 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
76 url = "https://pypi.python.org/packages/46/87/2f96d8d43b2078fae6e1d33fa86b95c228cebed060f4e3c7576cc44ea83b/WebOb-1.7.3.tar.gz";
77 md5 = "20918251c5726956ba8fef22d1556177";
77 md5 = "350028baffc508e3d23c078118e35316";
78 };
78 };
79 meta = {
79 meta = {
80 license = [ pkgs.lib.licenses.mit ];
80 license = [ pkgs.lib.licenses.mit ];
81 };
81 };
82 };
82 };
83 WebTest = super.buildPythonPackage {
83 WebTest = super.buildPythonPackage {
84 name = "WebTest-1.4.3";
84 name = "WebTest-2.0.27";
85 buildInputs = with self; [];
85 buildInputs = with self; [];
86 doCheck = false;
86 doCheck = false;
87 propagatedBuildInputs = with self; [WebOb];
87 propagatedBuildInputs = with self; [six WebOb waitress beautifulsoup4];
88 src = fetchurl {
88 src = fetchurl {
89 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
89 url = "https://pypi.python.org/packages/80/fa/ca3a759985c72e3a124cbca3e1f8a2e931a07ffd31fd45d8f7bf21cb95cf/WebTest-2.0.27.tar.gz";
90 md5 = "631ce728bed92c681a4020a36adbc353";
90 md5 = "54e6515ac71c51b6fc90179483c749ad";
91 };
91 };
92 meta = {
92 meta = {
93 license = [ pkgs.lib.licenses.mit ];
93 license = [ pkgs.lib.licenses.mit ];
@@ -106,6 +106,19 b''
106 license = [ pkgs.lib.licenses.mit ];
106 license = [ pkgs.lib.licenses.mit ];
107 };
107 };
108 };
108 };
109 beautifulsoup4 = super.buildPythonPackage {
110 name = "beautifulsoup4-4.6.0";
111 buildInputs = with self; [];
112 doCheck = false;
113 propagatedBuildInputs = with self; [];
114 src = fetchurl {
115 url = "https://pypi.python.org/packages/fa/8d/1d14391fdaed5abada4e0f63543fef49b8331a34ca60c88bd521bcf7f782/beautifulsoup4-4.6.0.tar.gz";
116 md5 = "c17714d0f91a23b708a592cb3c697728";
117 };
118 meta = {
119 license = [ pkgs.lib.licenses.mit ];
120 };
121 };
109 configobj = super.buildPythonPackage {
122 configobj = super.buildPythonPackage {
110 name = "configobj-5.0.6";
123 name = "configobj-5.0.6";
111 buildInputs = with self; [];
124 buildInputs = with self; [];
@@ -184,14 +197,27 b''
184 license = [ pkgs.lib.licenses.bsdOriginal ];
197 license = [ pkgs.lib.licenses.bsdOriginal ];
185 };
198 };
186 };
199 };
200 funcsigs = super.buildPythonPackage {
201 name = "funcsigs-1.0.2";
202 buildInputs = with self; [];
203 doCheck = false;
204 propagatedBuildInputs = with self; [];
205 src = fetchurl {
206 url = "https://pypi.python.org/packages/94/4a/db842e7a0545de1cdb0439bb80e6e42dfe82aaeaadd4072f2263a4fbed23/funcsigs-1.0.2.tar.gz";
207 md5 = "7e583285b1fb8a76305d6d68f4ccc14e";
208 };
209 meta = {
210 license = [ { fullName = "ASL"; } pkgs.lib.licenses.asl20 ];
211 };
212 };
187 gevent = super.buildPythonPackage {
213 gevent = super.buildPythonPackage {
188 name = "gevent-1.1.2";
214 name = "gevent-1.2.2";
189 buildInputs = with self; [];
215 buildInputs = with self; [];
190 doCheck = false;
216 doCheck = false;
191 propagatedBuildInputs = with self; [greenlet];
217 propagatedBuildInputs = with self; [greenlet];
192 src = fetchurl {
218 src = fetchurl {
193 url = "https://pypi.python.org/packages/43/8f/cb3224a0e6ab663547f45c10d0651cfd52633fde4283bf68d627084df8cc/gevent-1.1.2.tar.gz";
219 url = "https://pypi.python.org/packages/1b/92/b111f76e54d2be11375b47b213b56687214f258fd9dae703546d30b837be/gevent-1.2.2.tar.gz";
194 md5 = "bb32a2f852a4997138014d5007215c6e";
220 md5 = "7f0baf355384fe5ff2ecf66853422554";
195 };
221 };
196 meta = {
222 meta = {
197 license = [ pkgs.lib.licenses.mit ];
223 license = [ pkgs.lib.licenses.mit ];
@@ -211,26 +237,26 b''
211 };
237 };
212 };
238 };
213 greenlet = super.buildPythonPackage {
239 greenlet = super.buildPythonPackage {
214 name = "greenlet-0.4.10";
240 name = "greenlet-0.4.12";
215 buildInputs = with self; [];
241 buildInputs = with self; [];
216 doCheck = false;
242 doCheck = false;
217 propagatedBuildInputs = with self; [];
243 propagatedBuildInputs = with self; [];
218 src = fetchurl {
244 src = fetchurl {
219 url = "https://pypi.python.org/packages/67/62/ca2a95648666eaa2ffeb6a9b3964f21d419ae27f82f2e66b53da5b943fc4/greenlet-0.4.10.zip";
245 url = "https://pypi.python.org/packages/be/76/82af375d98724054b7e273b5d9369346937324f9bcc20980b45b068ef0b0/greenlet-0.4.12.tar.gz";
220 md5 = "bed0c4b3b896702131f4d5c72f87c41d";
246 md5 = "e8637647d58a26c4a1f51ca393e53c00";
221 };
247 };
222 meta = {
248 meta = {
223 license = [ pkgs.lib.licenses.mit ];
249 license = [ pkgs.lib.licenses.mit ];
224 };
250 };
225 };
251 };
226 gunicorn = super.buildPythonPackage {
252 gunicorn = super.buildPythonPackage {
227 name = "gunicorn-19.6.0";
253 name = "gunicorn-19.7.1";
228 buildInputs = with self; [];
254 buildInputs = with self; [];
229 doCheck = false;
255 doCheck = false;
230 propagatedBuildInputs = with self; [];
256 propagatedBuildInputs = with self; [];
231 src = fetchurl {
257 src = fetchurl {
232 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
258 url = "https://pypi.python.org/packages/30/3a/10bb213cede0cc4d13ac2263316c872a64bf4c819000c8ccd801f1d5f822/gunicorn-19.7.1.tar.gz";
233 md5 = "338e5e8a83ea0f0625f768dba4597530";
259 md5 = "174d3c3cd670a5be0404d84c484e590c";
234 };
260 };
235 meta = {
261 meta = {
236 license = [ pkgs.lib.licenses.mit ];
262 license = [ pkgs.lib.licenses.mit ];
@@ -250,18 +276,31 b''
250 };
276 };
251 };
277 };
252 hgsubversion = super.buildPythonPackage {
278 hgsubversion = super.buildPythonPackage {
253 name = "hgsubversion-1.8.6";
279 name = "hgsubversion-1.8.7";
254 buildInputs = with self; [];
280 buildInputs = with self; [];
255 doCheck = false;
281 doCheck = false;
256 propagatedBuildInputs = with self; [mercurial subvertpy];
282 propagatedBuildInputs = with self; [mercurial subvertpy];
257 src = fetchurl {
283 src = fetchurl {
258 url = "https://pypi.python.org/packages/ce/97/032e5093ad250e9908cea04395cbddb6902d587f712a79b53b2d778bdfdd/hgsubversion-1.8.6.tar.gz";
284 url = "https://pypi.python.org/packages/1c/b8/ff4d2e0ec486f9765b410f09728c02a010e7485d68d6154968074498a403/hgsubversion-1.8.7.tar.gz";
259 md5 = "9310cb266031cf8d0779885782a84a5b";
285 md5 = "289f1c36c13bd6a3435a9be390a77bdc";
260 };
286 };
261 meta = {
287 meta = {
262 license = [ pkgs.lib.licenses.gpl1 ];
288 license = [ pkgs.lib.licenses.gpl1 ];
263 };
289 };
264 };
290 };
291 hupper = super.buildPythonPackage {
292 name = "hupper-1.0";
293 buildInputs = with self; [];
294 doCheck = false;
295 propagatedBuildInputs = with self; [];
296 src = fetchurl {
297 url = "https://pypi.python.org/packages/2e/07/df892c564dc09bb3cf6f6deb976c26adf9117db75ba218cb4353dbc9d826/hupper-1.0.tar.gz";
298 md5 = "26e77da7d5ac5858f59af050d1a6eb5a";
299 };
300 meta = {
301 license = [ pkgs.lib.licenses.mit ];
302 };
303 };
265 infrae.cache = super.buildPythonPackage {
304 infrae.cache = super.buildPythonPackage {
266 name = "infrae.cache-1.0.1";
305 name = "infrae.cache-1.0.1";
267 buildInputs = with self; [];
306 buildInputs = with self; [];
@@ -276,13 +315,13 b''
276 };
315 };
277 };
316 };
278 ipdb = super.buildPythonPackage {
317 ipdb = super.buildPythonPackage {
279 name = "ipdb-0.10.1";
318 name = "ipdb-0.10.3";
280 buildInputs = with self; [];
319 buildInputs = with self; [];
281 doCheck = false;
320 doCheck = false;
282 propagatedBuildInputs = with self; [ipython setuptools];
321 propagatedBuildInputs = with self; [setuptools ipython];
283 src = fetchurl {
322 src = fetchurl {
284 url = "https://pypi.python.org/packages/eb/0a/0a37dc19572580336ad3813792c0d18c8d7117c2d66fc63c501f13a7a8f8/ipdb-0.10.1.tar.gz";
323 url = "https://pypi.python.org/packages/ad/cc/0e7298e1fbf2efd52667c9354a12aa69fb6f796ce230cca03525051718ef/ipdb-0.10.3.tar.gz";
285 md5 = "4aeab65f633ddc98ebdb5eebf08dc713";
324 md5 = "def1f6ac075d54bdee07e6501263d4fa";
286 };
325 };
287 meta = {
326 meta = {
288 license = [ pkgs.lib.licenses.bsdOriginal ];
327 license = [ pkgs.lib.licenses.bsdOriginal ];
@@ -354,13 +393,13 b''
354 };
393 };
355 };
394 };
356 pathlib2 = super.buildPythonPackage {
395 pathlib2 = super.buildPythonPackage {
357 name = "pathlib2-2.1.0";
396 name = "pathlib2-2.3.0";
358 buildInputs = with self; [];
397 buildInputs = with self; [];
359 doCheck = false;
398 doCheck = false;
360 propagatedBuildInputs = with self; [six];
399 propagatedBuildInputs = with self; [six scandir];
361 src = fetchurl {
400 src = fetchurl {
362 url = "https://pypi.python.org/packages/c9/27/8448b10d8440c08efeff0794adf7d0ed27adb98372c70c7b38f3947d4749/pathlib2-2.1.0.tar.gz";
401 url = "https://pypi.python.org/packages/a1/14/df0deb867c2733f7d857523c10942b3d6612a1b222502fdffa9439943dfb/pathlib2-2.3.0.tar.gz";
363 md5 = "38e4f58b4d69dfcb9edb49a54a8b28d2";
402 md5 = "89c90409d11fd5947966b6a30a47d18c";
364 };
403 };
365 meta = {
404 meta = {
366 license = [ pkgs.lib.licenses.mit ];
405 license = [ pkgs.lib.licenses.mit ];
@@ -392,40 +431,66 b''
392 license = [ pkgs.lib.licenses.mit ];
431 license = [ pkgs.lib.licenses.mit ];
393 };
432 };
394 };
433 };
434 plaster = super.buildPythonPackage {
435 name = "plaster-0.5";
436 buildInputs = with self; [];
437 doCheck = false;
438 propagatedBuildInputs = with self; [setuptools];
439 src = fetchurl {
440 url = "https://pypi.python.org/packages/99/b3/d7ca1fe31d2b56dba68a238721fda6820770f9c2a3de17a582d4b5b2edcc/plaster-0.5.tar.gz";
441 md5 = "c59345a67a860cfcaa1bd6a81451399d";
442 };
443 meta = {
444 license = [ pkgs.lib.licenses.mit ];
445 };
446 };
447 plaster-pastedeploy = super.buildPythonPackage {
448 name = "plaster-pastedeploy-0.4.1";
449 buildInputs = with self; [];
450 doCheck = false;
451 propagatedBuildInputs = with self; [PasteDeploy plaster];
452 src = fetchurl {
453 url = "https://pypi.python.org/packages/9d/6e/f8be01ed41c94e6c54ac97cf2eb142a702aae0c8cce31c846f785e525b40/plaster_pastedeploy-0.4.1.tar.gz";
454 md5 = "f48d5344b922e56c4978eebf1cd2e0d3";
455 };
456 meta = {
457 license = [ pkgs.lib.licenses.mit ];
458 };
459 };
395 prompt-toolkit = super.buildPythonPackage {
460 prompt-toolkit = super.buildPythonPackage {
396 name = "prompt-toolkit-1.0.14";
461 name = "prompt-toolkit-1.0.15";
397 buildInputs = with self; [];
462 buildInputs = with self; [];
398 doCheck = false;
463 doCheck = false;
399 propagatedBuildInputs = with self; [six wcwidth];
464 propagatedBuildInputs = with self; [six wcwidth];
400 src = fetchurl {
465 src = fetchurl {
401 url = "https://pypi.python.org/packages/55/56/8c39509b614bda53e638b7500f12577d663ac1b868aef53426fc6a26c3f5/prompt_toolkit-1.0.14.tar.gz";
466 url = "https://pypi.python.org/packages/8a/ad/cf6b128866e78ad6d7f1dc5b7f99885fb813393d9860778b2984582e81b5/prompt_toolkit-1.0.15.tar.gz";
402 md5 = "f24061ae133ed32c6b764e92bd48c496";
467 md5 = "8fe70295006dbc8afedd43e5eba99032";
403 };
468 };
404 meta = {
469 meta = {
405 license = [ pkgs.lib.licenses.bsdOriginal ];
470 license = [ pkgs.lib.licenses.bsdOriginal ];
406 };
471 };
407 };
472 };
408 ptyprocess = super.buildPythonPackage {
473 ptyprocess = super.buildPythonPackage {
409 name = "ptyprocess-0.5.1";
474 name = "ptyprocess-0.5.2";
410 buildInputs = with self; [];
475 buildInputs = with self; [];
411 doCheck = false;
476 doCheck = false;
412 propagatedBuildInputs = with self; [];
477 propagatedBuildInputs = with self; [];
413 src = fetchurl {
478 src = fetchurl {
414 url = "https://pypi.python.org/packages/db/d7/b465161910f3d1cef593c5e002bff67e0384898f597f1a7fdc8db4c02bf6/ptyprocess-0.5.1.tar.gz";
479 url = "https://pypi.python.org/packages/51/83/5d07dc35534640b06f9d9f1a1d2bc2513fb9cc7595a1b0e28ae5477056ce/ptyprocess-0.5.2.tar.gz";
415 md5 = "94e537122914cc9ec9c1eadcd36e73a1";
480 md5 = "d3b8febae1b8c53b054bd818d0bb8665";
416 };
481 };
417 meta = {
482 meta = {
418 license = [ ];
483 license = [ ];
419 };
484 };
420 };
485 };
421 py = super.buildPythonPackage {
486 py = super.buildPythonPackage {
422 name = "py-1.4.31";
487 name = "py-1.4.34";
423 buildInputs = with self; [];
488 buildInputs = with self; [];
424 doCheck = false;
489 doCheck = false;
425 propagatedBuildInputs = with self; [];
490 propagatedBuildInputs = with self; [];
426 src = fetchurl {
491 src = fetchurl {
427 url = "https://pypi.python.org/packages/f4/9a/8dfda23f36600dd701c6722316ba8a3ab4b990261f83e7d3ffc6dfedf7ef/py-1.4.31.tar.gz";
492 url = "https://pypi.python.org/packages/68/35/58572278f1c097b403879c1e9369069633d1cbad5239b9057944bb764782/py-1.4.34.tar.gz";
428 md5 = "5d2c63c56dc3f2115ec35c066ecd582b";
493 md5 = "d9c3d8f734b0819ff48e355d77bf1730";
429 };
494 };
430 meta = {
495 meta = {
431 license = [ pkgs.lib.licenses.mit ];
496 license = [ pkgs.lib.licenses.mit ];
@@ -445,13 +510,13 b''
445 };
510 };
446 };
511 };
447 pyramid = super.buildPythonPackage {
512 pyramid = super.buildPythonPackage {
448 name = "pyramid-1.7.4";
513 name = "pyramid-1.9.1";
449 buildInputs = with self; [];
514 buildInputs = with self; [];
450 doCheck = false;
515 doCheck = false;
451 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy];
516 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy plaster plaster-pastedeploy hupper];
452 src = fetchurl {
517 src = fetchurl {
453 url = "https://pypi.python.org/packages/33/91/55f5c661f8923902cd1f68d75f2b937c45e7682857356cf18f0be5493899/pyramid-1.7.4.tar.gz";
518 url = "https://pypi.python.org/packages/9a/57/73447be9e7d0512d601e3f0a1fb9d7d1efb941911f49efdfe036d2826507/pyramid-1.9.1.tar.gz";
454 md5 = "6ef1dfdcff9136d04490410757c4c446";
519 md5 = "0163e19c58c2d12976a3b6fdb57e052d";
455 };
520 };
456 meta = {
521 meta = {
457 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
522 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
@@ -484,13 +549,13 b''
484 };
549 };
485 };
550 };
486 pytest = super.buildPythonPackage {
551 pytest = super.buildPythonPackage {
487 name = "pytest-3.0.5";
552 name = "pytest-3.1.2";
488 buildInputs = with self; [];
553 buildInputs = with self; [];
489 doCheck = false;
554 doCheck = false;
490 propagatedBuildInputs = with self; [py];
555 propagatedBuildInputs = with self; [py setuptools];
491 src = fetchurl {
556 src = fetchurl {
492 url = "https://pypi.python.org/packages/a8/87/b7ca49efe52d2b4169f2bfc49aa5e384173c4619ea8e635f123a0dac5b75/pytest-3.0.5.tar.gz";
557 url = "https://pypi.python.org/packages/72/2b/2d3155e01f45a5a04427857352ee88220ee39550b2bc078f9db3190aea46/pytest-3.1.2.tar.gz";
493 md5 = "cefd527b59332688bf5db4a10aa8a7cb";
558 md5 = "c4d179f89043cc925e1c169d03128e02";
494 };
559 };
495 meta = {
560 meta = {
496 license = [ pkgs.lib.licenses.mit ];
561 license = [ pkgs.lib.licenses.mit ];
@@ -510,52 +575,52 b''
510 };
575 };
511 };
576 };
512 pytest-cov = super.buildPythonPackage {
577 pytest-cov = super.buildPythonPackage {
513 name = "pytest-cov-2.4.0";
578 name = "pytest-cov-2.5.1";
514 buildInputs = with self; [];
579 buildInputs = with self; [];
515 doCheck = false;
580 doCheck = false;
516 propagatedBuildInputs = with self; [pytest coverage];
581 propagatedBuildInputs = with self; [pytest coverage];
517 src = fetchurl {
582 src = fetchurl {
518 url = "https://pypi.python.org/packages/00/c0/2bfd1fcdb9d407b8ac8185b1cb5ff458105c6b207a9a7f0e13032de9828f/pytest-cov-2.4.0.tar.gz";
583 url = "https://pypi.python.org/packages/24/b4/7290d65b2f3633db51393bdf8ae66309b37620bc3ec116c5e357e3e37238/pytest-cov-2.5.1.tar.gz";
519 md5 = "2fda09677d232acc99ec1b3c5831e33f";
584 md5 = "5acf38d4909e19819eb5c1754fbfc0ac";
520 };
585 };
521 meta = {
586 meta = {
522 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
587 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
523 };
588 };
524 };
589 };
525 pytest-profiling = super.buildPythonPackage {
590 pytest-profiling = super.buildPythonPackage {
526 name = "pytest-profiling-1.2.2";
591 name = "pytest-profiling-1.2.6";
527 buildInputs = with self; [];
592 buildInputs = with self; [];
528 doCheck = false;
593 doCheck = false;
529 propagatedBuildInputs = with self; [six pytest gprof2dot];
594 propagatedBuildInputs = with self; [six pytest gprof2dot];
530 src = fetchurl {
595 src = fetchurl {
531 url = "https://pypi.python.org/packages/73/e8/804681323bac0bc45c520ec34185ba8469008942266d0074699b204835c1/pytest-profiling-1.2.2.tar.gz";
596 url = "https://pypi.python.org/packages/f9/0d/df67fb9ce16c2cef201693da956321b1bccfbf9a4ead39748b9f9d1d74cb/pytest-profiling-1.2.6.tar.gz";
532 md5 = "0a16d7dda2d23b91e9730fa4558cf728";
597 md5 = "50eb4c66c3762a2f1a49669bedc0b894";
533 };
598 };
534 meta = {
599 meta = {
535 license = [ pkgs.lib.licenses.mit ];
600 license = [ pkgs.lib.licenses.mit ];
536 };
601 };
537 };
602 };
538 pytest-runner = super.buildPythonPackage {
603 pytest-runner = super.buildPythonPackage {
539 name = "pytest-runner-2.9";
604 name = "pytest-runner-2.11.1";
540 buildInputs = with self; [];
605 buildInputs = with self; [];
541 doCheck = false;
606 doCheck = false;
542 propagatedBuildInputs = with self; [];
607 propagatedBuildInputs = with self; [];
543 src = fetchurl {
608 src = fetchurl {
544 url = "https://pypi.python.org/packages/11/d4/c335ddf94463e451109e3494e909765c3e5205787b772e3b25ee8601b86a/pytest-runner-2.9.tar.gz";
609 url = "https://pypi.python.org/packages/9e/4d/08889e5e27a9f5d6096b9ad257f4dea1faabb03c5ded8f665ead448f5d8a/pytest-runner-2.11.1.tar.gz";
545 md5 = "2212a2e34404b0960b2fdc2c469247b2";
610 md5 = "bdb73eb18eca2727944a2dcf963c5a81";
546 };
611 };
547 meta = {
612 meta = {
548 license = [ pkgs.lib.licenses.mit ];
613 license = [ pkgs.lib.licenses.mit ];
549 };
614 };
550 };
615 };
551 pytest-sugar = super.buildPythonPackage {
616 pytest-sugar = super.buildPythonPackage {
552 name = "pytest-sugar-0.7.1";
617 name = "pytest-sugar-0.8.0";
553 buildInputs = with self; [];
618 buildInputs = with self; [];
554 doCheck = false;
619 doCheck = false;
555 propagatedBuildInputs = with self; [pytest termcolor];
620 propagatedBuildInputs = with self; [pytest termcolor];
556 src = fetchurl {
621 src = fetchurl {
557 url = "https://pypi.python.org/packages/03/97/05d988b4fa870e7373e8ee4582408543b9ca2bd35c3c67b569369c6f9c49/pytest-sugar-0.7.1.tar.gz";
622 url = "https://pypi.python.org/packages/a5/b0/b2773dee078f17773a5bf2dfad49b0be57b6354bbd84bbefe4313e509d87/pytest-sugar-0.8.0.tar.gz";
558 md5 = "7400f7c11f3d572b2c2a3b60352d35fe";
623 md5 = "8cafbdad648068e0e44b8fc5f9faae42";
559 };
624 };
560 meta = {
625 meta = {
561 license = [ pkgs.lib.licenses.bsdOriginal ];
626 license = [ pkgs.lib.licenses.bsdOriginal ];
@@ -588,7 +653,7 b''
588 };
653 };
589 };
654 };
590 rhodecode-vcsserver = super.buildPythonPackage {
655 rhodecode-vcsserver = super.buildPythonPackage {
591 name = "rhodecode-vcsserver-4.9.1";
656 name = "rhodecode-vcsserver-4.10.0";
592 buildInputs = with self; [pytest py pytest-cov pytest-sugar pytest-runner pytest-catchlog pytest-profiling gprof2dot pytest-timeout mock WebTest cov-core coverage configobj];
657 buildInputs = with self; [pytest py pytest-cov pytest-sugar pytest-runner pytest-catchlog pytest-profiling gprof2dot pytest-timeout mock WebTest cov-core coverage configobj];
593 doCheck = true;
658 doCheck = true;
594 propagatedBuildInputs = with self; [Beaker configobj decorator dulwich hgsubversion hg-evolve infrae.cache mercurial msgpack-python pyramid pyramid-jinja2 pyramid-mako repoze.lru simplejson subprocess32 subvertpy six translationstring WebOb wheel zope.deprecation zope.interface ipdb ipython gevent greenlet gunicorn waitress pytest py pytest-cov pytest-sugar pytest-runner pytest-catchlog pytest-profiling gprof2dot pytest-timeout mock WebTest cov-core coverage];
659 propagatedBuildInputs = with self; [Beaker configobj decorator dulwich hgsubversion hg-evolve infrae.cache mercurial msgpack-python pyramid pyramid-jinja2 pyramid-mako repoze.lru simplejson subprocess32 subvertpy six translationstring WebOb wheel zope.deprecation zope.interface ipdb ipython gevent greenlet gunicorn waitress pytest py pytest-cov pytest-sugar pytest-runner pytest-catchlog pytest-profiling gprof2dot pytest-timeout mock WebTest cov-core coverage];
@@ -597,6 +662,19 b''
597 license = [ { fullName = "GPL V3"; } { fullName = "GNU General Public License v3 or later (GPLv3+)"; } ];
662 license = [ { fullName = "GPL V3"; } { fullName = "GNU General Public License v3 or later (GPLv3+)"; } ];
598 };
663 };
599 };
664 };
665 scandir = super.buildPythonPackage {
666 name = "scandir-1.5";
667 buildInputs = with self; [];
668 doCheck = false;
669 propagatedBuildInputs = with self; [];
670 src = fetchurl {
671 url = "https://pypi.python.org/packages/bd/f4/3143e0289faf0883228017dbc6387a66d0b468df646645e29e1eb89ea10e/scandir-1.5.tar.gz";
672 md5 = "a2713043de681bba6b084be42e7a8a44";
673 };
674 meta = {
675 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "New BSD License"; } ];
676 };
677 };
600 setuptools = super.buildPythonPackage {
678 setuptools = super.buildPythonPackage {
601 name = "setuptools-30.1.0";
679 name = "setuptools-30.1.0";
602 buildInputs = with self; [];
680 buildInputs = with self; [];
@@ -624,13 +702,13 b''
624 };
702 };
625 };
703 };
626 simplejson = super.buildPythonPackage {
704 simplejson = super.buildPythonPackage {
627 name = "simplejson-3.7.2";
705 name = "simplejson-3.11.1";
628 buildInputs = with self; [];
706 buildInputs = with self; [];
629 doCheck = false;
707 doCheck = false;
630 propagatedBuildInputs = with self; [];
708 propagatedBuildInputs = with self; [];
631 src = fetchurl {
709 src = fetchurl {
632 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
710 url = "https://pypi.python.org/packages/08/48/c97b668d6da7d7bebe7ea1817a6f76394b0ec959cb04214ca833c34359df/simplejson-3.11.1.tar.gz";
633 md5 = "a5fc7d05d4cb38492285553def5d4b46";
711 md5 = "6e2f1bd5fb0a926facf5d89d217a7183";
634 };
712 };
635 meta = {
713 meta = {
636 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
714 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
@@ -650,13 +728,13 b''
650 };
728 };
651 };
729 };
652 subprocess32 = super.buildPythonPackage {
730 subprocess32 = super.buildPythonPackage {
653 name = "subprocess32-3.2.6";
731 name = "subprocess32-3.2.7";
654 buildInputs = with self; [];
732 buildInputs = with self; [];
655 doCheck = false;
733 doCheck = false;
656 propagatedBuildInputs = with self; [];
734 propagatedBuildInputs = with self; [];
657 src = fetchurl {
735 src = fetchurl {
658 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
736 url = "https://pypi.python.org/packages/b8/2f/49e53b0d0e94611a2dc624a1ad24d41b6d94d0f1b0a078443407ea2214c2/subprocess32-3.2.7.tar.gz";
659 md5 = "754c5ab9f533e764f931136974b618f1";
737 md5 = "824c801e479d3e916879aae3e9c15e16";
660 };
738 };
661 meta = {
739 meta = {
662 license = [ pkgs.lib.licenses.psfl ];
740 license = [ pkgs.lib.licenses.psfl ];
@@ -715,26 +793,26 b''
715 };
793 };
716 };
794 };
717 venusian = super.buildPythonPackage {
795 venusian = super.buildPythonPackage {
718 name = "venusian-1.0";
796 name = "venusian-1.1.0";
719 buildInputs = with self; [];
797 buildInputs = with self; [];
720 doCheck = false;
798 doCheck = false;
721 propagatedBuildInputs = with self; [];
799 propagatedBuildInputs = with self; [];
722 src = fetchurl {
800 src = fetchurl {
723 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
801 url = "https://pypi.python.org/packages/38/24/b4b470ab9e0a2e2e9b9030c7735828c8934b4c6b45befd1bb713ec2aeb2d/venusian-1.1.0.tar.gz";
724 md5 = "dccf2eafb7113759d60c86faf5538756";
802 md5 = "56bc5e6756e4bda37bcdb94f74a72b8f";
725 };
803 };
726 meta = {
804 meta = {
727 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
805 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
728 };
806 };
729 };
807 };
730 waitress = super.buildPythonPackage {
808 waitress = super.buildPythonPackage {
731 name = "waitress-1.0.1";
809 name = "waitress-1.0.2";
732 buildInputs = with self; [];
810 buildInputs = with self; [];
733 doCheck = false;
811 doCheck = false;
734 propagatedBuildInputs = with self; [];
812 propagatedBuildInputs = with self; [];
735 src = fetchurl {
813 src = fetchurl {
736 url = "https://pypi.python.org/packages/78/7d/84d11b96c3f60164dec3bef4a859a03aeae0231aa93f57fbe0d05fa4ff36/waitress-1.0.1.tar.gz";
814 url = "https://pypi.python.org/packages/cd/f4/400d00863afa1e03618e31fd7e2092479a71b8c9718b00eb1eeb603746c6/waitress-1.0.2.tar.gz";
737 md5 = "dda92358a7569669086155923a46e57c";
815 md5 = "b968f39e95d609f6194c6e50425d4bb7";
738 };
816 };
739 meta = {
817 meta = {
740 license = [ pkgs.lib.licenses.zpt21 ];
818 license = [ pkgs.lib.licenses.zpt21 ];
@@ -1,40 +1,41 b''
1 ## core
1 ## core
2 setuptools==30.1.0
2 setuptools==30.1.0
3
3
4 Beaker==1.7.0
4 Beaker==1.9.0
5 configobj==5.0.6
5 configobj==5.0.6
6 decorator==4.0.11
6 decorator==4.0.11
7 dulwich==0.13.0
7 dulwich==0.13.0
8 hgsubversion==1.8.6
8 hgsubversion==1.8.7
9 hg-evolve==6.6.0
9 hg-evolve==6.6.0
10 infrae.cache==1.0.1
10 infrae.cache==1.0.1
11 mercurial==4.2.3
11 mercurial==4.2.3
12 msgpack-python==0.4.8
12 msgpack-python==0.4.8
13 pyramid-jinja2==2.5
13 pyramid-jinja2==2.5
14 pyramid==1.7.4
14 pyramid==1.9.1
15 pyramid-mako==1.0.2
15 pyramid-mako==1.0.2
16 repoze.lru==0.6
16 repoze.lru==0.6
17 simplejson==3.7.2
17 simplejson==3.11.1
18 subprocess32==3.2.6
18 subprocess32==3.2.7
19
19
20 # Custom subvertpy that is not available on pypi.
20 # Custom subvertpy that is not available on pypi.
21 https://code.rhodecode.com/upstream/subvertpy/archive/subvertpy-0.9.3.tar.gz?md5=4e49da2fe07608239cc9a80a7bb8f33c#egg=subvertpy==0.9.3
21 https://code.rhodecode.com/upstream/subvertpy/archive/subvertpy-0.9.3.tar.gz?md5=4e49da2fe07608239cc9a80a7bb8f33c#egg=subvertpy==0.9.3
22
22
23 six==1.9.0
23 six==1.9.0
24 translationstring==1.3
24 translationstring==1.3
25 WebOb==1.3.1
25 WebOb==1.7.3
26 wheel==0.29.0
26 wheel==0.29.0
27 zope.deprecation==4.1.2
27 zope.deprecation==4.1.2
28 zope.interface==4.1.3
28 zope.interface==4.1.3
29
29
30 ## http servers
31 gevent==1.2.2
32 greenlet==0.4.12
33 gunicorn==19.7.1
34 waitress==1.0.2
35
30 ## debug
36 ## debug
31 ipdb==0.10.1
37 ipdb==0.10.3
32 ipython==5.1.0
38 ipython==5.1.0
33 # http servers
34 gevent==1.1.2
35 greenlet==0.4.10
36 gunicorn==19.6.0
37 waitress==1.0.1
38
39
39 ## test related requirements
40 ## test related requirements
40 -r requirements_test.txt
41 -r requirements_test.txt
@@ -1,15 +1,15 b''
1 # test related requirements
1 # test related requirements
2 pytest==3.0.5
2 pytest==3.1.2
3 py==1.4.31
3 py==1.4.34
4 pytest-cov==2.4.0
4 pytest-cov==2.5.1
5 pytest-sugar==0.7.1
5 pytest-sugar==0.8.0
6 pytest-runner==2.9.0
6 pytest-runner==2.11.1
7 pytest-catchlog==1.2.2
7 pytest-catchlog==1.2.2
8 pytest-profiling==1.2.2
8 pytest-profiling==1.2.6
9 gprof2dot==2016.10.13
9 gprof2dot==2016.10.13
10 pytest-timeout==1.2.0
10 pytest-timeout==1.2.0
11
11
12 mock==1.0.1
12 mock==1.0.1
13 WebTest==1.4.3
13 WebTest==2.0.27
14 cov-core==1.15.0
14 cov-core==1.15.0
15 coverage==3.7.1
15 coverage==3.7.1
@@ -1,1 +1,1 b''
1 4.9.1 No newline at end of file
1 4.10.0 No newline at end of file
@@ -21,11 +21,31 b' class EchoApp(object):'
21 log.debug("Content-Length: %s", environ.get('CONTENT_LENGTH'))
21 log.debug("Content-Length: %s", environ.get('CONTENT_LENGTH'))
22 environ['wsgi.input'].read()
22 environ['wsgi.input'].read()
23 status = '200 OK'
23 status = '200 OK'
24 headers = []
24 headers = [('Content-Type', 'text/plain')]
25 start_response(status, headers)
25 start_response(status, headers)
26 return ["ECHO"]
26 return ["ECHO"]
27
27
28
28
29 class EchoAppStream(object):
30
31 def __init__(self, repo_path, repo_name, config):
32 self._repo_path = repo_path
33 log.info("EchoApp initialized for %s", repo_path)
34
35 def __call__(self, environ, start_response):
36 log.debug("EchoApp called for %s", self._repo_path)
37 log.debug("Content-Length: %s", environ.get('CONTENT_LENGTH'))
38 environ['wsgi.input'].read()
39 status = '200 OK'
40 headers = [('Content-Type', 'text/plain')]
41 start_response(status, headers)
42
43 def generator():
44 for _ in xrange(1000000):
45 yield "ECHO"
46 return generator()
47
48
29 def create_app():
49 def create_app():
30 """
50 """
31 Allows to run this app directly in a WSGI server.
51 Allows to run this app directly in a WSGI server.
@@ -628,6 +628,7 b' class GitRemote(object):'
628
628
629 return ''.join(p), ''.join(p.error)
629 return ''.join(p), ''.join(p.error)
630 except (EnvironmentError, OSError) as err:
630 except (EnvironmentError, OSError) as err:
631 cmd = ' '.join(cmd) # human friendly CMD
631 tb_err = ("Couldn't run git command (%s).\n"
632 tb_err = ("Couldn't run git command (%s).\n"
632 "Original error was:%s\n" % (cmd, err))
633 "Original error was:%s\n" % (cmd, err))
633 log.exception(tb_err)
634 log.exception(tb_err)
@@ -33,8 +33,8 b' from vcsserver.hgcompat import ('
33 archival, bin, clone, config as hgconfig, diffopts, hex,
33 archival, bin, clone, config as hgconfig, diffopts, hex,
34 hg_url as url_parser, httpbasicauthhandler, httpdigestauthhandler,
34 hg_url as url_parser, httpbasicauthhandler, httpdigestauthhandler,
35 httppeer, localrepository, match, memctx, exchange, memfilectx, nullrev,
35 httppeer, localrepository, match, memctx, exchange, memfilectx, nullrev,
36 patch, peer, revrange, ui, Abort, LookupError, RepoError, RepoLookupError,
36 patch, peer, revrange, ui, hg_tag, Abort, LookupError, RepoError,
37 InterventionRequired, RequirementError)
37 RepoLookupError, InterventionRequired, RequirementError)
38
38
39 log = logging.getLogger(__name__)
39 log = logging.getLogger(__name__)
40
40
@@ -127,6 +127,9 b' class HgRemote(object):'
127 "message": self.ctx_description,
127 "message": self.ctx_description,
128 "parents": self.ctx_parents,
128 "parents": self.ctx_parents,
129 "status": self.ctx_status,
129 "status": self.ctx_status,
130 "obsolete": self.ctx_obsolete,
131 "phase": self.ctx_phase,
132 "hidden": self.ctx_hidden,
130 "_file_paths": self.ctx_list,
133 "_file_paths": self.ctx_list,
131 }
134 }
132
135
@@ -629,7 +632,7 b' class HgRemote(object):'
629
632
630 date = (tag_time, tag_timezone)
633 date = (tag_time, tag_timezone)
631 try:
634 try:
632 repo.tag(name, node, message, local, user, date)
635 hg_tag.tag(repo, name, node, message, local, user, date)
633 except Abort as e:
636 except Abort as e:
634 log.exception("Tag operation aborted")
637 log.exception("Tag operation aborted")
635 # Exception can contain unicode which we convert
638 # Exception can contain unicode which we convert
@@ -725,11 +728,11 b' class HgRemote(object):'
725 commands.merge(baseui, repo, rev=revision)
728 commands.merge(baseui, repo, rev=revision)
726
729
727 @reraise_safe_exceptions
730 @reraise_safe_exceptions
728 def commit(self, wire, message, username):
731 def commit(self, wire, message, username, close_branch=False):
729 repo = self._factory.repo(wire)
732 repo = self._factory.repo(wire)
730 baseui = self._factory._create_config(wire['config'])
733 baseui = self._factory._create_config(wire['config'])
731 repo.ui.setconfig('ui', 'username', username)
734 repo.ui.setconfig('ui', 'username', username)
732 commands.commit(baseui, repo, message=message)
735 commands.commit(baseui, repo, message=message, close_branch=close_branch)
733
736
734 @reraise_safe_exceptions
737 @reraise_safe_exceptions
735 def rebase(self, wire, source=None, dest=None, abort=False):
738 def rebase(self, wire, source=None, dest=None, abort=False):
@@ -36,6 +36,7 b' from mercurial import unionrepo'
36 from mercurial import localrepo
36 from mercurial import localrepo
37 from mercurial import merge as hg_merge
37 from mercurial import merge as hg_merge
38 from mercurial import subrepo
38 from mercurial import subrepo
39 from mercurial import tags as hg_tag
39
40
40 from mercurial.commands import clone, nullid, pull
41 from mercurial.commands import clone, nullid, pull
41 from mercurial.context import memctx, memfilectx
42 from mercurial.context import memctx, memfilectx
@@ -18,6 +18,7 b''
18 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
19
20 import io
20 import io
21 import os
21 import sys
22 import sys
22 import json
23 import json
23 import logging
24 import logging
@@ -124,6 +125,7 b' def _get_hooks_client(extras):'
124 def _call_hook(hook_name, extras, writer):
125 def _call_hook(hook_name, extras, writer):
125 hooks = _get_hooks_client(extras)
126 hooks = _get_hooks_client(extras)
126 result = hooks(hook_name, extras)
127 result = hooks(hook_name, extras)
128 log.debug('Hooks got result: %s', result)
127 writer.write(result['output'])
129 writer.write(result['output'])
128 _handle_exception(result)
130 _handle_exception(result)
129
131
@@ -131,22 +133,14 b' def _call_hook(hook_name, extras, writer'
131
133
132
134
133 def _extras_from_ui(ui):
135 def _extras_from_ui(ui):
134 extras = json.loads(ui.config('rhodecode', 'RC_SCM_DATA'))
136 hook_data = ui.config('rhodecode', 'RC_SCM_DATA')
137 if not hook_data:
138 # maybe it's inside environ ?
139 hook_data = os.environ.get('RC_SCM_DATA')
140 extras = json.loads(hook_data)
135 return extras
141 return extras
136
142
137
143
138 def repo_size(ui, repo, **kwargs):
139 return _call_hook('repo_size', _extras_from_ui(ui), HgMessageWriter(ui))
140
141
142 def pre_pull(ui, repo, **kwargs):
143 return _call_hook('pre_pull', _extras_from_ui(ui), HgMessageWriter(ui))
144
145
146 def post_pull(ui, repo, **kwargs):
147 return _call_hook('post_pull', _extras_from_ui(ui), HgMessageWriter(ui))
148
149
150 def _rev_range_hash(repo, node):
144 def _rev_range_hash(repo, node):
151
145
152 commits = []
146 commits = []
@@ -159,6 +153,33 b' def _rev_range_hash(repo, node):'
159 return commits
153 return commits
160
154
161
155
156 def repo_size(ui, repo, **kwargs):
157 extras = _extras_from_ui(ui)
158 return _call_hook('repo_size', extras, HgMessageWriter(ui))
159
160
161 def pre_pull(ui, repo, **kwargs):
162 extras = _extras_from_ui(ui)
163 return _call_hook('pre_pull', extras, HgMessageWriter(ui))
164
165
166 def pre_pull_ssh(ui, repo, **kwargs):
167 if _extras_from_ui(ui).get('SSH'):
168 return pre_pull(ui, repo, **kwargs)
169 return 0
170
171
172 def post_pull(ui, repo, **kwargs):
173 extras = _extras_from_ui(ui)
174 return _call_hook('post_pull', extras, HgMessageWriter(ui))
175
176
177 def post_pull_ssh(ui, repo, **kwargs):
178 if _extras_from_ui(ui).get('SSH'):
179 return post_pull(ui, repo, **kwargs)
180 return 0
181
182
162 def pre_push(ui, repo, node=None, **kwargs):
183 def pre_push(ui, repo, node=None, **kwargs):
163 extras = _extras_from_ui(ui)
184 extras = _extras_from_ui(ui)
164
185
@@ -182,6 +203,27 b' def pre_push(ui, repo, node=None, **kwar'
182 return _call_hook('pre_push', extras, HgMessageWriter(ui))
203 return _call_hook('pre_push', extras, HgMessageWriter(ui))
183
204
184
205
206 def pre_push_ssh(ui, repo, node=None, **kwargs):
207 if _extras_from_ui(ui).get('SSH'):
208 return pre_push(ui, repo, node, **kwargs)
209
210 return 0
211
212
213 def pre_push_ssh_auth(ui, repo, node=None, **kwargs):
214 extras = _extras_from_ui(ui)
215 if extras.get('SSH'):
216 permission = extras['SSH_PERMISSIONS']
217
218 if 'repository.write' == permission or 'repository.admin' == permission:
219 return 0
220
221 # non-zero ret code
222 return 1
223
224 return 0
225
226
185 def post_push(ui, repo, node, **kwargs):
227 def post_push(ui, repo, node, **kwargs):
186 extras = _extras_from_ui(ui)
228 extras = _extras_from_ui(ui)
187
229
@@ -208,12 +250,19 b' def post_push(ui, repo, node, **kwargs):'
208 return _call_hook('post_push', extras, HgMessageWriter(ui))
250 return _call_hook('post_push', extras, HgMessageWriter(ui))
209
251
210
252
253 def post_push_ssh(ui, repo, node, **kwargs):
254 if _extras_from_ui(ui).get('SSH'):
255 return post_push(ui, repo, node, **kwargs)
256 return 0
257
258
211 def key_push(ui, repo, **kwargs):
259 def key_push(ui, repo, **kwargs):
212 if kwargs['new'] != '0' and kwargs['namespace'] == 'bookmarks':
260 if kwargs['new'] != '0' and kwargs['namespace'] == 'bookmarks':
213 # store new bookmarks in our UI object propagated later to post_push
261 # store new bookmarks in our UI object propagated later to post_push
214 ui._rc_pushkey_branches = repo[kwargs['key']].bookmarks()
262 ui._rc_pushkey_branches = repo[kwargs['key']].bookmarks()
215 return
263 return
216
264
265
217 # backward compat
266 # backward compat
218 log_pull_action = post_pull
267 log_pull_action = post_pull
219
268
@@ -23,6 +23,7 b' import wsgiref.util'
23 import traceback
23 import traceback
24 from itertools import chain
24 from itertools import chain
25
25
26 import simplejson as json
26 import msgpack
27 import msgpack
27 from beaker.cache import CacheManager
28 from beaker.cache import CacheManager
28 from beaker.util import parse_cache_config_options
29 from beaker.util import parse_cache_config_options
@@ -269,7 +270,8 b' class HTTPApplication(object):'
269 return resp
270 return resp
270
271
271 def status_view(self, request):
272 def status_view(self, request):
272 return {'status': 'OK'}
273 import vcsserver
274 return {'status': 'OK', 'vcsserver_version': vcsserver.__version__}
273
275
274 def service_view(self, request):
276 def service_view(self, request):
275 import vcsserver
277 import vcsserver
@@ -310,6 +312,25 b' class HTTPApplication(object):'
310 return value
312 return value
311 return _render
313 return _render
312
314
315 def set_env_from_config(self, environ, config):
316 dict_conf = {}
317 try:
318 for elem in config:
319 if elem[0] == 'rhodecode':
320 dict_conf = json.loads(elem[2])
321 break
322 except Exception:
323 log.exception('Failed to fetch SCM CONFIG')
324 return
325
326 username = dict_conf.get('username')
327 if username:
328 environ['REMOTE_USER'] = username
329
330 ip = dict_conf.get('ip')
331 if ip:
332 environ['REMOTE_HOST'] = ip
333
313 def hg_proxy(self):
334 def hg_proxy(self):
314 @wsgiapp
335 @wsgiapp
315 def _hg_proxy(environ, start_response):
336 def _hg_proxy(environ, start_response):
@@ -334,6 +355,7 b' class HTTPApplication(object):'
334 else:
355 else:
335 @wsgiapp
356 @wsgiapp
336 def _hg_stream(environ, start_response):
357 def _hg_stream(environ, start_response):
358 log.debug('http-app: handling hg stream')
337 repo_path = environ['HTTP_X_RC_REPO_PATH']
359 repo_path = environ['HTTP_X_RC_REPO_PATH']
338 repo_name = environ['HTTP_X_RC_REPO_NAME']
360 repo_name = environ['HTTP_X_RC_REPO_NAME']
339 packed_config = base64.b64decode(
361 packed_config = base64.b64decode(
@@ -342,9 +364,13 b' class HTTPApplication(object):'
342 app = scm_app.create_hg_wsgi_app(
364 app = scm_app.create_hg_wsgi_app(
343 repo_path, repo_name, config)
365 repo_path, repo_name, config)
344
366
345 # Consitent path information for hgweb
367 # Consistent path information for hgweb
346 environ['PATH_INFO'] = environ['HTTP_X_RC_PATH_INFO']
368 environ['PATH_INFO'] = environ['HTTP_X_RC_PATH_INFO']
347 environ['REPO_NAME'] = repo_name
369 environ['REPO_NAME'] = repo_name
370 self.set_env_from_config(environ, config)
371
372 log.debug('http-app: starting app handler '
373 'with %s and process request', app)
348 return app(environ, ResponseFilter(start_response))
374 return app(environ, ResponseFilter(start_response))
349 return _hg_stream
375 return _hg_stream
350
376
@@ -358,6 +384,7 b' class HTTPApplication(object):'
358 else:
384 else:
359 @wsgiapp
385 @wsgiapp
360 def _git_stream(environ, start_response):
386 def _git_stream(environ, start_response):
387 log.debug('http-app: handling git stream')
361 repo_path = environ['HTTP_X_RC_REPO_PATH']
388 repo_path = environ['HTTP_X_RC_REPO_PATH']
362 repo_name = environ['HTTP_X_RC_REPO_NAME']
389 repo_name = environ['HTTP_X_RC_REPO_NAME']
363 packed_config = base64.b64decode(
390 packed_config = base64.b64decode(
@@ -365,6 +392,8 b' class HTTPApplication(object):'
365 config = msgpack.unpackb(packed_config)
392 config = msgpack.unpackb(packed_config)
366
393
367 environ['PATH_INFO'] = environ['HTTP_X_RC_PATH_INFO']
394 environ['PATH_INFO'] = environ['HTTP_X_RC_PATH_INFO']
395 self.set_env_from_config(environ, config)
396
368 content_type = environ.get('CONTENT_TYPE', '')
397 content_type = environ.get('CONTENT_TYPE', '')
369
398
370 path = environ['PATH_INFO']
399 path = environ['PATH_INFO']
@@ -388,6 +417,9 b' class HTTPApplication(object):'
388 else:
417 else:
389 app = scm_app.create_git_wsgi_app(
418 app = scm_app.create_git_wsgi_app(
390 repo_path, repo_name, config)
419 repo_path, repo_name, config)
420
421 log.debug('http-app: starting app handler '
422 'with %s and process request', app)
391 return app(environ, start_response)
423 return app(environ, start_response)
392
424
393 return _git_stream
425 return _git_stream
General Comments 0
You need to be logged in to leave comments. Login now