##// 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 1 [bumpversion]
2 current_version = 4.9.1
2 current_version = 4.10.0
3 3 message = release: Bump version {current_version} to {new_version}
4 4
5 5 [bumpversion:file:vcsserver/VERSION]
@@ -5,12 +5,10 b' done = false'
5 5 done = true
6 6
7 7 [task:fixes_on_stable]
8 done = true
9 8
10 9 [task:pip2nix_generated]
11 done = true
12 10
13 11 [release]
14 state = prepared
15 version = 4.9.1
12 state = in_progress
13 version = 4.10.0
16 14
@@ -16,12 +16,19 b' let'
16 16 pkgs = pkgs_.overridePackages (self: super: {
17 17 # bump GIT version
18 18 git = pkgs.lib.overrideDerivation pkgs_.git (oldAttrs: {
19 name = "git-2.9.5";
19 name = "git-2.13.5";
20 20 src = pkgs.fetchurl {
21 url = "https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.xz";
22 sha256 = "00ir7qmgfszwrhxjzxwixk7wp35gxvvw467gr30bagwsrdza7gm4";
21 url = "https://www.kernel.org/pub/software/scm/git/git-2.13.5.tar.xz";
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 34 # Override subversion derivation to
@@ -3,13 +3,13 b''
3 3
4 4 {
5 5 Beaker = super.buildPythonPackage {
6 name = "Beaker-1.7.0";
6 name = "Beaker-1.9.0";
7 7 buildInputs = with self; [];
8 8 doCheck = false;
9 propagatedBuildInputs = with self; [];
9 propagatedBuildInputs = with self; [funcsigs];
10 10 src = fetchurl {
11 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
12 md5 = "386be3f7fe427358881eee4622b428b3";
11 url = "https://pypi.python.org/packages/93/b2/12de6937b06e9615dbb3cb3a1c9af17f133f435bdef59f4ad42032b6eb49/Beaker-1.9.0.tar.gz";
12 md5 = "38b3fcdfa24faf97c6cf66991eb54e9c";
13 13 };
14 14 meta = {
15 15 license = [ pkgs.lib.licenses.bsdOriginal ];
@@ -29,13 +29,13 b''
29 29 };
30 30 };
31 31 Mako = super.buildPythonPackage {
32 name = "Mako-1.0.6";
32 name = "Mako-1.0.7";
33 33 buildInputs = with self; [];
34 34 doCheck = false;
35 35 propagatedBuildInputs = with self; [MarkupSafe];
36 36 src = fetchurl {
37 url = "https://pypi.python.org/packages/56/4b/cb75836863a6382199aefb3d3809937e21fa4cb0db15a4f4ba0ecc2e7e8e/Mako-1.0.6.tar.gz";
38 md5 = "a28e22a339080316b2acc352b9ee631c";
37 url = "https://pypi.python.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz";
38 md5 = "5836cc997b1b773ef389bf6629c30e65";
39 39 };
40 40 meta = {
41 41 license = [ pkgs.lib.licenses.mit ];
@@ -68,26 +68,26 b''
68 68 };
69 69 };
70 70 WebOb = super.buildPythonPackage {
71 name = "WebOb-1.3.1";
71 name = "WebOb-1.7.3";
72 72 buildInputs = with self; [];
73 73 doCheck = false;
74 74 propagatedBuildInputs = with self; [];
75 75 src = fetchurl {
76 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
77 md5 = "20918251c5726956ba8fef22d1556177";
76 url = "https://pypi.python.org/packages/46/87/2f96d8d43b2078fae6e1d33fa86b95c228cebed060f4e3c7576cc44ea83b/WebOb-1.7.3.tar.gz";
77 md5 = "350028baffc508e3d23c078118e35316";
78 78 };
79 79 meta = {
80 80 license = [ pkgs.lib.licenses.mit ];
81 81 };
82 82 };
83 83 WebTest = super.buildPythonPackage {
84 name = "WebTest-1.4.3";
84 name = "WebTest-2.0.27";
85 85 buildInputs = with self; [];
86 86 doCheck = false;
87 propagatedBuildInputs = with self; [WebOb];
87 propagatedBuildInputs = with self; [six WebOb waitress beautifulsoup4];
88 88 src = fetchurl {
89 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
90 md5 = "631ce728bed92c681a4020a36adbc353";
89 url = "https://pypi.python.org/packages/80/fa/ca3a759985c72e3a124cbca3e1f8a2e931a07ffd31fd45d8f7bf21cb95cf/WebTest-2.0.27.tar.gz";
90 md5 = "54e6515ac71c51b6fc90179483c749ad";
91 91 };
92 92 meta = {
93 93 license = [ pkgs.lib.licenses.mit ];
@@ -106,6 +106,19 b''
106 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 122 configobj = super.buildPythonPackage {
110 123 name = "configobj-5.0.6";
111 124 buildInputs = with self; [];
@@ -184,14 +197,27 b''
184 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 213 gevent = super.buildPythonPackage {
188 name = "gevent-1.1.2";
214 name = "gevent-1.2.2";
189 215 buildInputs = with self; [];
190 216 doCheck = false;
191 217 propagatedBuildInputs = with self; [greenlet];
192 218 src = fetchurl {
193 url = "https://pypi.python.org/packages/43/8f/cb3224a0e6ab663547f45c10d0651cfd52633fde4283bf68d627084df8cc/gevent-1.1.2.tar.gz";
194 md5 = "bb32a2f852a4997138014d5007215c6e";
219 url = "https://pypi.python.org/packages/1b/92/b111f76e54d2be11375b47b213b56687214f258fd9dae703546d30b837be/gevent-1.2.2.tar.gz";
220 md5 = "7f0baf355384fe5ff2ecf66853422554";
195 221 };
196 222 meta = {
197 223 license = [ pkgs.lib.licenses.mit ];
@@ -211,26 +237,26 b''
211 237 };
212 238 };
213 239 greenlet = super.buildPythonPackage {
214 name = "greenlet-0.4.10";
240 name = "greenlet-0.4.12";
215 241 buildInputs = with self; [];
216 242 doCheck = false;
217 243 propagatedBuildInputs = with self; [];
218 244 src = fetchurl {
219 url = "https://pypi.python.org/packages/67/62/ca2a95648666eaa2ffeb6a9b3964f21d419ae27f82f2e66b53da5b943fc4/greenlet-0.4.10.zip";
220 md5 = "bed0c4b3b896702131f4d5c72f87c41d";
245 url = "https://pypi.python.org/packages/be/76/82af375d98724054b7e273b5d9369346937324f9bcc20980b45b068ef0b0/greenlet-0.4.12.tar.gz";
246 md5 = "e8637647d58a26c4a1f51ca393e53c00";
221 247 };
222 248 meta = {
223 249 license = [ pkgs.lib.licenses.mit ];
224 250 };
225 251 };
226 252 gunicorn = super.buildPythonPackage {
227 name = "gunicorn-19.6.0";
253 name = "gunicorn-19.7.1";
228 254 buildInputs = with self; [];
229 255 doCheck = false;
230 256 propagatedBuildInputs = with self; [];
231 257 src = fetchurl {
232 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
233 md5 = "338e5e8a83ea0f0625f768dba4597530";
258 url = "https://pypi.python.org/packages/30/3a/10bb213cede0cc4d13ac2263316c872a64bf4c819000c8ccd801f1d5f822/gunicorn-19.7.1.tar.gz";
259 md5 = "174d3c3cd670a5be0404d84c484e590c";
234 260 };
235 261 meta = {
236 262 license = [ pkgs.lib.licenses.mit ];
@@ -250,18 +276,31 b''
250 276 };
251 277 };
252 278 hgsubversion = super.buildPythonPackage {
253 name = "hgsubversion-1.8.6";
279 name = "hgsubversion-1.8.7";
254 280 buildInputs = with self; [];
255 281 doCheck = false;
256 282 propagatedBuildInputs = with self; [mercurial subvertpy];
257 283 src = fetchurl {
258 url = "https://pypi.python.org/packages/ce/97/032e5093ad250e9908cea04395cbddb6902d587f712a79b53b2d778bdfdd/hgsubversion-1.8.6.tar.gz";
259 md5 = "9310cb266031cf8d0779885782a84a5b";
284 url = "https://pypi.python.org/packages/1c/b8/ff4d2e0ec486f9765b410f09728c02a010e7485d68d6154968074498a403/hgsubversion-1.8.7.tar.gz";
285 md5 = "289f1c36c13bd6a3435a9be390a77bdc";
260 286 };
261 287 meta = {
262 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 304 infrae.cache = super.buildPythonPackage {
266 305 name = "infrae.cache-1.0.1";
267 306 buildInputs = with self; [];
@@ -276,13 +315,13 b''
276 315 };
277 316 };
278 317 ipdb = super.buildPythonPackage {
279 name = "ipdb-0.10.1";
318 name = "ipdb-0.10.3";
280 319 buildInputs = with self; [];
281 320 doCheck = false;
282 propagatedBuildInputs = with self; [ipython setuptools];
321 propagatedBuildInputs = with self; [setuptools ipython];
283 322 src = fetchurl {
284 url = "https://pypi.python.org/packages/eb/0a/0a37dc19572580336ad3813792c0d18c8d7117c2d66fc63c501f13a7a8f8/ipdb-0.10.1.tar.gz";
285 md5 = "4aeab65f633ddc98ebdb5eebf08dc713";
323 url = "https://pypi.python.org/packages/ad/cc/0e7298e1fbf2efd52667c9354a12aa69fb6f796ce230cca03525051718ef/ipdb-0.10.3.tar.gz";
324 md5 = "def1f6ac075d54bdee07e6501263d4fa";
286 325 };
287 326 meta = {
288 327 license = [ pkgs.lib.licenses.bsdOriginal ];
@@ -354,13 +393,13 b''
354 393 };
355 394 };
356 395 pathlib2 = super.buildPythonPackage {
357 name = "pathlib2-2.1.0";
396 name = "pathlib2-2.3.0";
358 397 buildInputs = with self; [];
359 398 doCheck = false;
360 propagatedBuildInputs = with self; [six];
399 propagatedBuildInputs = with self; [six scandir];
361 400 src = fetchurl {
362 url = "https://pypi.python.org/packages/c9/27/8448b10d8440c08efeff0794adf7d0ed27adb98372c70c7b38f3947d4749/pathlib2-2.1.0.tar.gz";
363 md5 = "38e4f58b4d69dfcb9edb49a54a8b28d2";
401 url = "https://pypi.python.org/packages/a1/14/df0deb867c2733f7d857523c10942b3d6612a1b222502fdffa9439943dfb/pathlib2-2.3.0.tar.gz";
402 md5 = "89c90409d11fd5947966b6a30a47d18c";
364 403 };
365 404 meta = {
366 405 license = [ pkgs.lib.licenses.mit ];
@@ -392,40 +431,66 b''
392 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 460 prompt-toolkit = super.buildPythonPackage {
396 name = "prompt-toolkit-1.0.14";
461 name = "prompt-toolkit-1.0.15";
397 462 buildInputs = with self; [];
398 463 doCheck = false;
399 464 propagatedBuildInputs = with self; [six wcwidth];
400 465 src = fetchurl {
401 url = "https://pypi.python.org/packages/55/56/8c39509b614bda53e638b7500f12577d663ac1b868aef53426fc6a26c3f5/prompt_toolkit-1.0.14.tar.gz";
402 md5 = "f24061ae133ed32c6b764e92bd48c496";
466 url = "https://pypi.python.org/packages/8a/ad/cf6b128866e78ad6d7f1dc5b7f99885fb813393d9860778b2984582e81b5/prompt_toolkit-1.0.15.tar.gz";
467 md5 = "8fe70295006dbc8afedd43e5eba99032";
403 468 };
404 469 meta = {
405 470 license = [ pkgs.lib.licenses.bsdOriginal ];
406 471 };
407 472 };
408 473 ptyprocess = super.buildPythonPackage {
409 name = "ptyprocess-0.5.1";
474 name = "ptyprocess-0.5.2";
410 475 buildInputs = with self; [];
411 476 doCheck = false;
412 477 propagatedBuildInputs = with self; [];
413 478 src = fetchurl {
414 url = "https://pypi.python.org/packages/db/d7/b465161910f3d1cef593c5e002bff67e0384898f597f1a7fdc8db4c02bf6/ptyprocess-0.5.1.tar.gz";
415 md5 = "94e537122914cc9ec9c1eadcd36e73a1";
479 url = "https://pypi.python.org/packages/51/83/5d07dc35534640b06f9d9f1a1d2bc2513fb9cc7595a1b0e28ae5477056ce/ptyprocess-0.5.2.tar.gz";
480 md5 = "d3b8febae1b8c53b054bd818d0bb8665";
416 481 };
417 482 meta = {
418 483 license = [ ];
419 484 };
420 485 };
421 486 py = super.buildPythonPackage {
422 name = "py-1.4.31";
487 name = "py-1.4.34";
423 488 buildInputs = with self; [];
424 489 doCheck = false;
425 490 propagatedBuildInputs = with self; [];
426 491 src = fetchurl {
427 url = "https://pypi.python.org/packages/f4/9a/8dfda23f36600dd701c6722316ba8a3ab4b990261f83e7d3ffc6dfedf7ef/py-1.4.31.tar.gz";
428 md5 = "5d2c63c56dc3f2115ec35c066ecd582b";
492 url = "https://pypi.python.org/packages/68/35/58572278f1c097b403879c1e9369069633d1cbad5239b9057944bb764782/py-1.4.34.tar.gz";
493 md5 = "d9c3d8f734b0819ff48e355d77bf1730";
429 494 };
430 495 meta = {
431 496 license = [ pkgs.lib.licenses.mit ];
@@ -445,13 +510,13 b''
445 510 };
446 511 };
447 512 pyramid = super.buildPythonPackage {
448 name = "pyramid-1.7.4";
513 name = "pyramid-1.9.1";
449 514 buildInputs = with self; [];
450 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 517 src = fetchurl {
453 url = "https://pypi.python.org/packages/33/91/55f5c661f8923902cd1f68d75f2b937c45e7682857356cf18f0be5493899/pyramid-1.7.4.tar.gz";
454 md5 = "6ef1dfdcff9136d04490410757c4c446";
518 url = "https://pypi.python.org/packages/9a/57/73447be9e7d0512d601e3f0a1fb9d7d1efb941911f49efdfe036d2826507/pyramid-1.9.1.tar.gz";
519 md5 = "0163e19c58c2d12976a3b6fdb57e052d";
455 520 };
456 521 meta = {
457 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 551 pytest = super.buildPythonPackage {
487 name = "pytest-3.0.5";
552 name = "pytest-3.1.2";
488 553 buildInputs = with self; [];
489 554 doCheck = false;
490 propagatedBuildInputs = with self; [py];
555 propagatedBuildInputs = with self; [py setuptools];
491 556 src = fetchurl {
492 url = "https://pypi.python.org/packages/a8/87/b7ca49efe52d2b4169f2bfc49aa5e384173c4619ea8e635f123a0dac5b75/pytest-3.0.5.tar.gz";
493 md5 = "cefd527b59332688bf5db4a10aa8a7cb";
557 url = "https://pypi.python.org/packages/72/2b/2d3155e01f45a5a04427857352ee88220ee39550b2bc078f9db3190aea46/pytest-3.1.2.tar.gz";
558 md5 = "c4d179f89043cc925e1c169d03128e02";
494 559 };
495 560 meta = {
496 561 license = [ pkgs.lib.licenses.mit ];
@@ -510,52 +575,52 b''
510 575 };
511 576 };
512 577 pytest-cov = super.buildPythonPackage {
513 name = "pytest-cov-2.4.0";
578 name = "pytest-cov-2.5.1";
514 579 buildInputs = with self; [];
515 580 doCheck = false;
516 581 propagatedBuildInputs = with self; [pytest coverage];
517 582 src = fetchurl {
518 url = "https://pypi.python.org/packages/00/c0/2bfd1fcdb9d407b8ac8185b1cb5ff458105c6b207a9a7f0e13032de9828f/pytest-cov-2.4.0.tar.gz";
519 md5 = "2fda09677d232acc99ec1b3c5831e33f";
583 url = "https://pypi.python.org/packages/24/b4/7290d65b2f3633db51393bdf8ae66309b37620bc3ec116c5e357e3e37238/pytest-cov-2.5.1.tar.gz";
584 md5 = "5acf38d4909e19819eb5c1754fbfc0ac";
520 585 };
521 586 meta = {
522 587 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
523 588 };
524 589 };
525 590 pytest-profiling = super.buildPythonPackage {
526 name = "pytest-profiling-1.2.2";
591 name = "pytest-profiling-1.2.6";
527 592 buildInputs = with self; [];
528 593 doCheck = false;
529 594 propagatedBuildInputs = with self; [six pytest gprof2dot];
530 595 src = fetchurl {
531 url = "https://pypi.python.org/packages/73/e8/804681323bac0bc45c520ec34185ba8469008942266d0074699b204835c1/pytest-profiling-1.2.2.tar.gz";
532 md5 = "0a16d7dda2d23b91e9730fa4558cf728";
596 url = "https://pypi.python.org/packages/f9/0d/df67fb9ce16c2cef201693da956321b1bccfbf9a4ead39748b9f9d1d74cb/pytest-profiling-1.2.6.tar.gz";
597 md5 = "50eb4c66c3762a2f1a49669bedc0b894";
533 598 };
534 599 meta = {
535 600 license = [ pkgs.lib.licenses.mit ];
536 601 };
537 602 };
538 603 pytest-runner = super.buildPythonPackage {
539 name = "pytest-runner-2.9";
604 name = "pytest-runner-2.11.1";
540 605 buildInputs = with self; [];
541 606 doCheck = false;
542 607 propagatedBuildInputs = with self; [];
543 608 src = fetchurl {
544 url = "https://pypi.python.org/packages/11/d4/c335ddf94463e451109e3494e909765c3e5205787b772e3b25ee8601b86a/pytest-runner-2.9.tar.gz";
545 md5 = "2212a2e34404b0960b2fdc2c469247b2";
609 url = "https://pypi.python.org/packages/9e/4d/08889e5e27a9f5d6096b9ad257f4dea1faabb03c5ded8f665ead448f5d8a/pytest-runner-2.11.1.tar.gz";
610 md5 = "bdb73eb18eca2727944a2dcf963c5a81";
546 611 };
547 612 meta = {
548 613 license = [ pkgs.lib.licenses.mit ];
549 614 };
550 615 };
551 616 pytest-sugar = super.buildPythonPackage {
552 name = "pytest-sugar-0.7.1";
617 name = "pytest-sugar-0.8.0";
553 618 buildInputs = with self; [];
554 619 doCheck = false;
555 620 propagatedBuildInputs = with self; [pytest termcolor];
556 621 src = fetchurl {
557 url = "https://pypi.python.org/packages/03/97/05d988b4fa870e7373e8ee4582408543b9ca2bd35c3c67b569369c6f9c49/pytest-sugar-0.7.1.tar.gz";
558 md5 = "7400f7c11f3d572b2c2a3b60352d35fe";
622 url = "https://pypi.python.org/packages/a5/b0/b2773dee078f17773a5bf2dfad49b0be57b6354bbd84bbefe4313e509d87/pytest-sugar-0.8.0.tar.gz";
623 md5 = "8cafbdad648068e0e44b8fc5f9faae42";
559 624 };
560 625 meta = {
561 626 license = [ pkgs.lib.licenses.bsdOriginal ];
@@ -588,7 +653,7 b''
588 653 };
589 654 };
590 655 rhodecode-vcsserver = super.buildPythonPackage {
591 name = "rhodecode-vcsserver-4.9.1";
656 name = "rhodecode-vcsserver-4.10.0";
592 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 658 doCheck = true;
594 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 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 678 setuptools = super.buildPythonPackage {
601 679 name = "setuptools-30.1.0";
602 680 buildInputs = with self; [];
@@ -624,13 +702,13 b''
624 702 };
625 703 };
626 704 simplejson = super.buildPythonPackage {
627 name = "simplejson-3.7.2";
705 name = "simplejson-3.11.1";
628 706 buildInputs = with self; [];
629 707 doCheck = false;
630 708 propagatedBuildInputs = with self; [];
631 709 src = fetchurl {
632 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
633 md5 = "a5fc7d05d4cb38492285553def5d4b46";
710 url = "https://pypi.python.org/packages/08/48/c97b668d6da7d7bebe7ea1817a6f76394b0ec959cb04214ca833c34359df/simplejson-3.11.1.tar.gz";
711 md5 = "6e2f1bd5fb0a926facf5d89d217a7183";
634 712 };
635 713 meta = {
636 714 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
@@ -650,13 +728,13 b''
650 728 };
651 729 };
652 730 subprocess32 = super.buildPythonPackage {
653 name = "subprocess32-3.2.6";
731 name = "subprocess32-3.2.7";
654 732 buildInputs = with self; [];
655 733 doCheck = false;
656 734 propagatedBuildInputs = with self; [];
657 735 src = fetchurl {
658 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
659 md5 = "754c5ab9f533e764f931136974b618f1";
736 url = "https://pypi.python.org/packages/b8/2f/49e53b0d0e94611a2dc624a1ad24d41b6d94d0f1b0a078443407ea2214c2/subprocess32-3.2.7.tar.gz";
737 md5 = "824c801e479d3e916879aae3e9c15e16";
660 738 };
661 739 meta = {
662 740 license = [ pkgs.lib.licenses.psfl ];
@@ -715,26 +793,26 b''
715 793 };
716 794 };
717 795 venusian = super.buildPythonPackage {
718 name = "venusian-1.0";
796 name = "venusian-1.1.0";
719 797 buildInputs = with self; [];
720 798 doCheck = false;
721 799 propagatedBuildInputs = with self; [];
722 800 src = fetchurl {
723 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
724 md5 = "dccf2eafb7113759d60c86faf5538756";
801 url = "https://pypi.python.org/packages/38/24/b4b470ab9e0a2e2e9b9030c7735828c8934b4c6b45befd1bb713ec2aeb2d/venusian-1.1.0.tar.gz";
802 md5 = "56bc5e6756e4bda37bcdb94f74a72b8f";
725 803 };
726 804 meta = {
727 805 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
728 806 };
729 807 };
730 808 waitress = super.buildPythonPackage {
731 name = "waitress-1.0.1";
809 name = "waitress-1.0.2";
732 810 buildInputs = with self; [];
733 811 doCheck = false;
734 812 propagatedBuildInputs = with self; [];
735 813 src = fetchurl {
736 url = "https://pypi.python.org/packages/78/7d/84d11b96c3f60164dec3bef4a859a03aeae0231aa93f57fbe0d05fa4ff36/waitress-1.0.1.tar.gz";
737 md5 = "dda92358a7569669086155923a46e57c";
814 url = "https://pypi.python.org/packages/cd/f4/400d00863afa1e03618e31fd7e2092479a71b8c9718b00eb1eeb603746c6/waitress-1.0.2.tar.gz";
815 md5 = "b968f39e95d609f6194c6e50425d4bb7";
738 816 };
739 817 meta = {
740 818 license = [ pkgs.lib.licenses.zpt21 ];
@@ -1,40 +1,41 b''
1 1 ## core
2 2 setuptools==30.1.0
3 3
4 Beaker==1.7.0
4 Beaker==1.9.0
5 5 configobj==5.0.6
6 6 decorator==4.0.11
7 7 dulwich==0.13.0
8 hgsubversion==1.8.6
8 hgsubversion==1.8.7
9 9 hg-evolve==6.6.0
10 10 infrae.cache==1.0.1
11 11 mercurial==4.2.3
12 12 msgpack-python==0.4.8
13 13 pyramid-jinja2==2.5
14 pyramid==1.7.4
14 pyramid==1.9.1
15 15 pyramid-mako==1.0.2
16 16 repoze.lru==0.6
17 simplejson==3.7.2
18 subprocess32==3.2.6
17 simplejson==3.11.1
18 subprocess32==3.2.7
19 19
20 20 # Custom subvertpy that is not available on pypi.
21 21 https://code.rhodecode.com/upstream/subvertpy/archive/subvertpy-0.9.3.tar.gz?md5=4e49da2fe07608239cc9a80a7bb8f33c#egg=subvertpy==0.9.3
22 22
23 23 six==1.9.0
24 24 translationstring==1.3
25 WebOb==1.3.1
25 WebOb==1.7.3
26 26 wheel==0.29.0
27 27 zope.deprecation==4.1.2
28 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 36 ## debug
31 ipdb==0.10.1
37 ipdb==0.10.3
32 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 40 ## test related requirements
40 41 -r requirements_test.txt
@@ -1,15 +1,15 b''
1 1 # test related requirements
2 pytest==3.0.5
3 py==1.4.31
4 pytest-cov==2.4.0
5 pytest-sugar==0.7.1
6 pytest-runner==2.9.0
2 pytest==3.1.2
3 py==1.4.34
4 pytest-cov==2.5.1
5 pytest-sugar==0.8.0
6 pytest-runner==2.11.1
7 7 pytest-catchlog==1.2.2
8 pytest-profiling==1.2.2
8 pytest-profiling==1.2.6
9 9 gprof2dot==2016.10.13
10 10 pytest-timeout==1.2.0
11 11
12 12 mock==1.0.1
13 WebTest==1.4.3
13 WebTest==2.0.27
14 14 cov-core==1.15.0
15 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 21 log.debug("Content-Length: %s", environ.get('CONTENT_LENGTH'))
22 22 environ['wsgi.input'].read()
23 23 status = '200 OK'
24 headers = []
24 headers = [('Content-Type', 'text/plain')]
25 25 start_response(status, headers)
26 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 49 def create_app():
30 50 """
31 51 Allows to run this app directly in a WSGI server.
@@ -628,6 +628,7 b' class GitRemote(object):'
628 628
629 629 return ''.join(p), ''.join(p.error)
630 630 except (EnvironmentError, OSError) as err:
631 cmd = ' '.join(cmd) # human friendly CMD
631 632 tb_err = ("Couldn't run git command (%s).\n"
632 633 "Original error was:%s\n" % (cmd, err))
633 634 log.exception(tb_err)
@@ -33,8 +33,8 b' from vcsserver.hgcompat import ('
33 33 archival, bin, clone, config as hgconfig, diffopts, hex,
34 34 hg_url as url_parser, httpbasicauthhandler, httpdigestauthhandler,
35 35 httppeer, localrepository, match, memctx, exchange, memfilectx, nullrev,
36 patch, peer, revrange, ui, Abort, LookupError, RepoError, RepoLookupError,
37 InterventionRequired, RequirementError)
36 patch, peer, revrange, ui, hg_tag, Abort, LookupError, RepoError,
37 RepoLookupError, InterventionRequired, RequirementError)
38 38
39 39 log = logging.getLogger(__name__)
40 40
@@ -127,6 +127,9 b' class HgRemote(object):'
127 127 "message": self.ctx_description,
128 128 "parents": self.ctx_parents,
129 129 "status": self.ctx_status,
130 "obsolete": self.ctx_obsolete,
131 "phase": self.ctx_phase,
132 "hidden": self.ctx_hidden,
130 133 "_file_paths": self.ctx_list,
131 134 }
132 135
@@ -629,7 +632,7 b' class HgRemote(object):'
629 632
630 633 date = (tag_time, tag_timezone)
631 634 try:
632 repo.tag(name, node, message, local, user, date)
635 hg_tag.tag(repo, name, node, message, local, user, date)
633 636 except Abort as e:
634 637 log.exception("Tag operation aborted")
635 638 # Exception can contain unicode which we convert
@@ -725,11 +728,11 b' class HgRemote(object):'
725 728 commands.merge(baseui, repo, rev=revision)
726 729
727 730 @reraise_safe_exceptions
728 def commit(self, wire, message, username):
731 def commit(self, wire, message, username, close_branch=False):
729 732 repo = self._factory.repo(wire)
730 733 baseui = self._factory._create_config(wire['config'])
731 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 737 @reraise_safe_exceptions
735 738 def rebase(self, wire, source=None, dest=None, abort=False):
@@ -36,6 +36,7 b' 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 from mercurial import tags as hg_tag
39 40
40 41 from mercurial.commands import clone, nullid, pull
41 42 from mercurial.context import memctx, memfilectx
@@ -18,6 +18,7 b''
18 18 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
20 20 import io
21 import os
21 22 import sys
22 23 import json
23 24 import logging
@@ -124,6 +125,7 b' def _get_hooks_client(extras):'
124 125 def _call_hook(hook_name, extras, writer):
125 126 hooks = _get_hooks_client(extras)
126 127 result = hooks(hook_name, extras)
128 log.debug('Hooks got result: %s', result)
127 129 writer.write(result['output'])
128 130 _handle_exception(result)
129 131
@@ -131,22 +133,14 b' def _call_hook(hook_name, extras, writer'
131 133
132 134
133 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 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 144 def _rev_range_hash(repo, node):
151 145
152 146 commits = []
@@ -159,6 +153,33 b' def _rev_range_hash(repo, node):'
159 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 183 def pre_push(ui, repo, node=None, **kwargs):
163 184 extras = _extras_from_ui(ui)
164 185
@@ -182,6 +203,27 b' def pre_push(ui, repo, node=None, **kwar'
182 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 227 def post_push(ui, repo, node, **kwargs):
186 228 extras = _extras_from_ui(ui)
187 229
@@ -208,12 +250,19 b' def post_push(ui, repo, node, **kwargs):'
208 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 259 def key_push(ui, repo, **kwargs):
212 260 if kwargs['new'] != '0' and kwargs['namespace'] == 'bookmarks':
213 261 # store new bookmarks in our UI object propagated later to post_push
214 262 ui._rc_pushkey_branches = repo[kwargs['key']].bookmarks()
215 263 return
216 264
265
217 266 # backward compat
218 267 log_pull_action = post_pull
219 268
@@ -23,6 +23,7 b' import wsgiref.util'
23 23 import traceback
24 24 from itertools import chain
25 25
26 import simplejson as json
26 27 import msgpack
27 28 from beaker.cache import CacheManager
28 29 from beaker.util import parse_cache_config_options
@@ -269,7 +270,8 b' class HTTPApplication(object):'
269 270 return resp
270 271
271 272 def status_view(self, request):
272 return {'status': 'OK'}
273 import vcsserver
274 return {'status': 'OK', 'vcsserver_version': vcsserver.__version__}
273 275
274 276 def service_view(self, request):
275 277 import vcsserver
@@ -310,6 +312,25 b' class HTTPApplication(object):'
310 312 return value
311 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 334 def hg_proxy(self):
314 335 @wsgiapp
315 336 def _hg_proxy(environ, start_response):
@@ -334,6 +355,7 b' class HTTPApplication(object):'
334 355 else:
335 356 @wsgiapp
336 357 def _hg_stream(environ, start_response):
358 log.debug('http-app: handling hg stream')
337 359 repo_path = environ['HTTP_X_RC_REPO_PATH']
338 360 repo_name = environ['HTTP_X_RC_REPO_NAME']
339 361 packed_config = base64.b64decode(
@@ -342,9 +364,13 b' class HTTPApplication(object):'
342 364 app = scm_app.create_hg_wsgi_app(
343 365 repo_path, repo_name, config)
344 366
345 # Consitent path information for hgweb
367 # Consistent path information for hgweb
346 368 environ['PATH_INFO'] = environ['HTTP_X_RC_PATH_INFO']
347 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 374 return app(environ, ResponseFilter(start_response))
349 375 return _hg_stream
350 376
@@ -358,6 +384,7 b' class HTTPApplication(object):'
358 384 else:
359 385 @wsgiapp
360 386 def _git_stream(environ, start_response):
387 log.debug('http-app: handling git stream')
361 388 repo_path = environ['HTTP_X_RC_REPO_PATH']
362 389 repo_name = environ['HTTP_X_RC_REPO_NAME']
363 390 packed_config = base64.b64decode(
@@ -365,6 +392,8 b' class HTTPApplication(object):'
365 392 config = msgpack.unpackb(packed_config)
366 393
367 394 environ['PATH_INFO'] = environ['HTTP_X_RC_PATH_INFO']
395 self.set_env_from_config(environ, config)
396
368 397 content_type = environ.get('CONTENT_TYPE', '')
369 398
370 399 path = environ['PATH_INFO']
@@ -388,6 +417,9 b' class HTTPApplication(object):'
388 417 else:
389 418 app = scm_app.create_git_wsgi_app(
390 419 repo_path, repo_name, config)
420
421 log.debug('http-app: starting app handler '
422 'with %s and process request', app)
391 423 return app(environ, start_response)
392 424
393 425 return _git_stream
General Comments 0
You need to be logged in to leave comments. Login now