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

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

@@ -0,0 +1,15 b''
1 {
2 "name": "rhodecode-elements",
3 "description": "User interface for elements for rhodecode",
4 "main": "index.html",
5 "dependencies": {
6 "webcomponentsjs": "^0.7.22",
7 "polymer": "Polymer/polymer#^1.6.1",
8 "paper-button": "PolymerElements/paper-button#^1.0.13",
9 "paper-spinner": "PolymerElements/paper-spinner#^1.2.0",
10 "paper-tooltip": "PolymerElements/paper-tooltip#^1.1.2",
11 "paper-toast": "PolymerElements/paper-toast#^1.3.0",
12 "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.2.0",
13 "iron-ajax": "PolymerElements/iron-ajax#^1.4.3"
14 }
15 }
@@ -0,0 +1,60 b''
1
2 =======================
3 Dependency management
4 =======================
5
6
7 Overview
8 ========
9
10 We use the Nix package manager to handle our dependencies. In general we use the
11 packages out of the package collection `nixpkgs`. For frequently changing
12 dependencies for Python and JavaScript we use the tools which are described in
13 this section to generate the needed Nix derivations.
14
15
16 Python dependencies
17 ===================
18
19 We use the tool `pip2nix` to generate the Nix derivations for our Python
20 dependencies.
21
22 Generating the dependencies should be done with the following command:
23
24 .. code:: shell
25
26 pip2nix generate --license
27
28
29 .. note::
30
31 License extraction support is still experimental, use the version from the
32 following pull request: https://github.com/ktosiek/pip2nix/pull/30
33
34
35
36 Node dependencies
37 =================
38
39 After adding new dependencies via ``npm install --save``, use `node2nix` to
40 update the corresponding Nix derivations:
41
42 .. code:: shell
43
44 cd pkgs
45 node2nix --input ../package.json \
46 -o node-packages.nix \
47 -e node-env.nix \
48 -c node-default.nix \
49 -d --flatten
50
51
52 Bower dependencies
53 ==================
54
55 Frontend dependencies are managed based on `bower`, with `bower2nix` a tool
56 exists which can generate the needed Nix derivations:
57
58 .. code:: shell
59
60 bower2nix bower.json pkgs/bower-packages.nix
@@ -0,0 +1,78 b''
1 |RCE| 4.4.0 |RNS|
2 -----------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2016-09-16
8
9
10 General
11 ^^^^^^^
12
13 - UI: introduced Polymer webcomponents into core application. RhodeCode will
14 be now shipped together with Polymer framework webcomponents. Most of
15 dynamic UI components that require large amounts of interaction
16 will be done now with Polymer.
17 - live-notifications: use rhodecode-toast for live notifications instead of
18 toastr jquery plugin.
19 - Svn: moved svn http support out of labs settings. It's tested and stable now.
20
21
22 New Features
23 ^^^^^^^^^^^^
24
25 - Integrations: integrations can now be configure on whole repo group to apply
26 same integrations on multiple projects/groups at once.
27 - Integrations: added scopes on integrations, scopes are: Global,
28 Repository Group (with/without children), Repositories, Root Repositories Only.
29 It will allow to configure exactly which projects use which integrations.
30 - Integrations: show branches/commits separately when posting push events
31 to hipchat/slack, fixes #4192.
32 - Pull-requests: summary page now shows update dates for pull request to
33 easier see which one were receantly updated.
34 - UI: hidden inline comments will be shown in side view when browsing the diffs
35 - Diffs: added inline comments toggle into pull requests diff view. #2884
36 - Live-chat: added summon reviewers functionality. You can now request
37 presence from online users into a chat for collaborative code-review.
38 This requires channelstream to be enabled.
39 - UX: added a static 502 page for gateway error. Once configured via
40 Nginx or Apache it will present a custom RhodeCode page while
41 backend servers are offline. Fixes #4202.
42
43
44 Security
45 ^^^^^^^^
46
47 - Passwords: forced password change will not allow users to put in the
48 old password as new one.
49
50
51 Performance
52 ^^^^^^^^^^^
53
54 - Vcs: refactor vcs-middleware to handle order of .ini file backends in
55 detection of vcs protocol. Detection ends now on first match and speeds
56 overall transaction speed.
57 - Summary: Improve the algorithm and performance of detection README files
58 inside summary page. In some cases we reduced cold-cache time from 50s to 1s.
59 - Safari: improved speed of large diffs on Safari browser.
60 - UX: remove position relative on diff td as it causes very slow
61 rendering in browsers.
62
63 Fixes
64 ^^^^^
65
66 - UX: change confirm password widget to have spacing between the fields to
67 match rest of ui, fixes: #4200.
68 - UX: show multiple tags/branches in changelog/summary instead of
69 truncating them.
70 - My-account: fix test notifications for IE10+
71 - Vcs: change way refs are retrieved for git so same name branch/tags and
72 remotes can be supported, fixes #298.
73 - Lexers: added small extensions table to extend syntax highlighting for file
74 sources. Fixes #4227.
75 - Search: fix bug where file path link was wrong when the repository name was
76 in the file path, fixes #4228
77 - Fixed INT overflow bug
78 - Events: send pushed commits always in the correct in order.
@@ -0,0 +1,186 b''
1 {
2 "dirs": {
3 "css": {
4 "src":"rhodecode/public/css",
5 "dest":"rhodecode/public/css"
6 },
7 "js": {
8 "src": "rhodecode/public/js/src",
9 "dest": "rhodecode/public/js"
10 }
11 },
12 "copy": {
13 "main": {
14 "expand": true,
15 "cwd": "bower_components",
16 "src": "webcomponentsjs/webcomponents-lite.js",
17 "dest": "<%= dirs.js.dest %>/vendors"
18 }
19 },
20 "concat": {
21 "polymercss": {
22 "src": [
23 "<%= dirs.js.src %>/components/root-styles-prefix.html",
24 "<%= dirs.css.src %>/style-polymer.css",
25 "<%= dirs.js.src %>/components/root-styles-suffix.html"
26 ],
27 "dest": "<%= dirs.js.dest %>/src/components/root-styles.gen.html",
28 "nonull": true
29 },
30 "dist": {
31 "src": [
32 "<%= dirs.js.src %>/jquery-1.11.1.min.js",
33 "<%= dirs.js.src %>/logging.js",
34 "<%= dirs.js.src %>/bootstrap.js",
35 "<%= dirs.js.src %>/mousetrap.js",
36 "<%= dirs.js.src %>/moment.js",
37 "<%= dirs.js.src %>/appenlight-client-0.4.1.min.js",
38 "<%= dirs.js.src %>/i18n_utils.js",
39 "<%= dirs.js.src %>/deform.js",
40 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
41 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
42 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
43 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
44 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
45 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
46 "<%= dirs.js.src %>/plugins/jquery.mark.js",
47 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
48 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
49 "<%= dirs.js.src %>/select2/select2.js",
50 "<%= dirs.js.src %>/codemirror/codemirror.js",
51 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
52 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
53 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
54 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
55 "<%= dirs.js.dest %>/mode/meta.js",
56 "<%= dirs.js.dest %>/mode/meta_ext.js",
57 "<%= dirs.js.dest %>/rhodecode/i18n/select2/translations.js",
58 "<%= dirs.js.src %>/rhodecode/utils/array.js",
59 "<%= dirs.js.src %>/rhodecode/utils/string.js",
60 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
61 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
62 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
63 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
64 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
65 "<%= dirs.js.src %>/rhodecode/utils/os.js",
66 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
67 "<%= dirs.js.src %>/rhodecode/widgets/multiselect.js",
68 "<%= dirs.js.src %>/rhodecode/init.js",
69 "<%= dirs.js.src %>/rhodecode/codemirror.js",
70 "<%= dirs.js.src %>/rhodecode/comments.js",
71 "<%= dirs.js.src %>/rhodecode/constants.js",
72 "<%= dirs.js.src %>/rhodecode/files.js",
73 "<%= dirs.js.src %>/rhodecode/followers.js",
74 "<%= dirs.js.src %>/rhodecode/menus.js",
75 "<%= dirs.js.src %>/rhodecode/notifications.js",
76 "<%= dirs.js.src %>/rhodecode/permissions.js",
77 "<%= dirs.js.src %>/rhodecode/pjax.js",
78 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
79 "<%= dirs.js.src %>/rhodecode/settings.js",
80 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
81 "<%= dirs.js.src %>/rhodecode/tooltips.js",
82 "<%= dirs.js.src %>/rhodecode/users.js",
83 "<%= dirs.js.src %>/rhodecode/appenlight.js",
84 "<%= dirs.js.src %>/rhodecode.js"
85 ],
86 "dest": "<%= dirs.js.dest %>/scripts.js",
87 "nonull": true
88 }
89 },
90 "crisper": {
91 "dist": {
92 "options": {
93 "cleanup": false,
94 "onlySplit": true
95 },
96 "src": "<%= dirs.js.dest %>/rhodecode-components.html",
97 "dest": "<%= dirs.js.dest %>/rhodecode-components.js"
98 }
99 },
100 "less": {
101 "development": {
102 "options": {
103 "compress": false,
104 "yuicompress": false,
105 "optimization": 0
106 },
107 "files": {
108 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
109 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
110 }
111 },
112 "production": {
113 "options": {
114 "compress": true,
115 "yuicompress": true,
116 "optimization": 2
117 },
118 "files": {
119 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
120 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
121 }
122 },
123 "components": {
124 "files": [
125 {
126 "cwd": "<%= dirs.js.src %>/components/",
127 "dest": "<%= dirs.js.src %>/components/",
128 "src": [
129 "**/*.less"
130 ],
131 "expand": true,
132 "ext": ".css"
133 }
134 ]
135 }
136 },
137 "watch": {
138 "less": {
139 "files": [
140 "<%= dirs.css.src %>/**/*.less",
141 "<%= dirs.js.src %>/components/**/*.less"
142 ],
143 "tasks": [
144 "less:development",
145 "less:components",
146 "concat:polymercss",
147 "vulcanize"
148 ]
149 },
150 "js": {
151 "files": [
152 "!<%= dirs.js.src %>/components/root-styles.gen.html",
153 "<%= dirs.js.src %>/**/*.js",
154 "<%= dirs.js.src %>/components/**/*.html"
155 ],
156 "tasks": [
157 "less:components",
158 "concat:polymercss",
159 "vulcanize",
160 "crisper",
161 "concat:dist"
162 ]
163 }
164 },
165 "jshint": {
166 "rhodecode": {
167 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
168 "options": {
169 "jshintrc": ".jshintrc"
170 }
171 }
172 },
173 "vulcanize": {
174 "default": {
175 "options": {
176 "abspath": "",
177 "inlineScripts": true,
178 "inlineCss": true,
179 "stripComments": true
180 },
181 "files": {
182 "<%= dirs.js.dest %>/rhodecode-components.html": "<%= dirs.js.src %>/components/shared-components.html"
183 }
184 }
185 }
186 }
@@ -0,0 +1,67 b''
1 # Backported buildBowerComponents so that we can also use it with the version
2 # 16.03 which is the current stable at the time of this writing.
3 #
4 # This file can be removed once building with 16.03 is not needed anymore.
5
6 { pkgs }:
7
8 { buildInputs ? [], generated, ... } @ attrs:
9
10 let
11 bower2nix-src = pkgs.fetchzip {
12 url = "https://github.com/rvl/bower2nix/archive/v3.0.1.tar.gz";
13 sha256 = "1zbvz96k2j6g0r4lvm5cgh41a73k9dgayk7x63cmg538dzznxvyb";
14 };
15
16 bower2nix = import "${bower2nix-src}/default.nix" { inherit pkgs; };
17
18 fetchbower = import ./backport-16.03-fetchbower.nix {
19 inherit (pkgs) stdenv lib;
20 inherit bower2nix;
21 };
22
23 # Fetches the bower packages. `generated` should be the result of a
24 # `bower2nix` command.
25 bowerPackages = import generated {
26 inherit (pkgs) buildEnv;
27 inherit fetchbower;
28 };
29
30 in pkgs.stdenv.mkDerivation (
31 attrs
32 //
33 {
34 name = "bower_components-" + attrs.name;
35
36 inherit bowerPackages;
37
38 builder = builtins.toFile "builder.sh" ''
39 source $stdenv/setup
40
41 # The project's bower.json is required
42 cp $src/bower.json .
43
44 # Dereference symlinks -- bower doesn't like them
45 cp --recursive --reflink=auto \
46 --dereference --no-preserve=mode \
47 $bowerPackages bc
48
49 # Bower install in offline mode -- links together the fetched
50 # bower packages.
51 HOME=$PWD bower \
52 --config.storage.packages=bc/packages \
53 --config.storage.registry=bc/registry \
54 --offline install
55
56 # Sets up a single bower_components directory within
57 # the output derivation.
58 mkdir -p $out
59 mv bower_components $out
60 '';
61
62 buildInputs = buildInputs ++ [
63 pkgs.git
64 pkgs.nodePackages.bower
65 ];
66 }
67 )
@@ -0,0 +1,26 b''
1 { stdenv, lib, bower2nix }:
2 let
3 bowerVersion = version:
4 let
5 components = lib.splitString "#" version;
6 hash = lib.last components;
7 ver = if builtins.length components == 1 then version else hash;
8 in ver;
9
10 fetchbower = name: version: target: outputHash: stdenv.mkDerivation {
11 name = "${name}-${bowerVersion version}";
12 buildCommand = ''
13 fetch-bower --quiet --out=$PWD/out "${name}" "${target}" "${version}"
14 # In some cases, the result of fetchBower is different depending
15 # on the output directory (e.g. if the bower package contains
16 # symlinks). So use a local output directory before copying to
17 # $out.
18 cp -R out $out
19 '';
20 outputHashMode = "recursive";
21 outputHashAlgo = "sha256";
22 inherit outputHash;
23 buildInputs = [ bower2nix ];
24 };
25
26 in fetchbower
@@ -0,0 +1,31 b''
1 { fetchbower, buildEnv }:
2 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
3 (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "0ggh3k8ssafd056ib1m5bvzi7cpz3ry7gr5176d79na1w0c3i7dz")
4 (fetchbower "polymer" "Polymer/polymer#1.6.1" "Polymer/polymer#^1.6.1" "09mm0jgk457gvwqlc155swch7gjr6fs3g7spnvhi6vh5b6518540")
5 (fetchbower "paper-button" "PolymerElements/paper-button#1.0.13" "PolymerElements/paper-button#^1.0.13" "0i3y153nqk06pn0gk282vyybnl3g1w3w41d5i9z659cgn27g3fvm")
6 (fetchbower "paper-spinner" "PolymerElements/paper-spinner#1.2.0" "PolymerElements/paper-spinner#^1.2.0" "1av1m6y81jw3hjhz1yqy3rwcgxarjzl58ldfn4q6sn51pgzngfqb")
7 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.2" "PolymerElements/paper-tooltip#^1.1.2" "1j64nprcyk2d2bbl3qwjyr0lbjngm4wclpyfwgai1c4y6g6bigd2")
8 (fetchbower "paper-toast" "PolymerElements/paper-toast#1.3.0" "PolymerElements/paper-toast#^1.3.0" "0x9rqxsks5455s8pk4aikpp99ijdn6kxr9gvhwh99nbcqdzcxq1m")
9 (fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#1.2.0" "PolymerElements/paper-toggle-button#^1.2.0" "0mphcng3ngspbpg4jjn0mb91nvr4xc1phq3qswib15h6sfww1b2w")
10 (fetchbower "iron-ajax" "PolymerElements/iron-ajax#1.4.3" "PolymerElements/iron-ajax#^1.4.3" "0m3dx27arwmlcp00b7n516sc5a51f40p9vapr1nvd57l3i3z0pzm")
11 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl")
12 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8")
13 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh")
14 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.1.4" "PolymerElements/paper-styles#^1.0.0" "0j8vg74xrcxlni8i93dsab3y80f34kk30lv4yblqpkp9c3nrilf7")
15 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j")
16 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d")
17 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.8.6" "PolymerElements/iron-overlay-behavior#^1.0.9" "14brn9gz6qqskarg3fxk91xs7vg02vgcsz9a9743kidxr0l0413m")
18 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf")
19 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.5" "PolymerElements/iron-checked-element-behavior#^1.0.0" "0l0yy4ah454s8bzfv076s8by7h67zy9ni6xb932qwyhx8br6c1m7")
20 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb")
21 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.17" "PolymerElements/iron-behaviors#^1.0.0" "021qvkmbk32jrrmmphpmwgby4bzi5jyf47rh1bxmq2ip07ly4bpr")
22 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns")
23 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj")
24 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl")
25 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn")
26 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r")
27 (fetchbower "web-animations-js" "web-animations/web-animations-js#2.2.2" "web-animations/web-animations-js#^2.2.0" "1izfvm3l67vwys0bqbhidi9rqziw2f8wv289386sc6jsxzgkzhga")
28 (fetchbower "iron-a11y-keys-behavior" "PolymerElements/iron-a11y-keys-behavior#1.1.7" "PolymerElements/iron-a11y-keys-behavior#^1.0.0" "070z46dbbz242002gmqrgy28x0y1fcqp9hnvbi05r3zphiqfx3l7")
29 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv")
30 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1")
31 ]; }
@@ -0,0 +1,15 b''
1 # This file has been generated by node2nix 1.0.0. Do not edit!
2
3 {pkgs ? import <nixpkgs> {
4 inherit system;
5 }, system ? builtins.currentSystem}:
6
7 let
8 nodeEnv = import ./node-env.nix {
9 inherit (pkgs) stdenv python utillinux runCommand writeTextFile nodejs;
10 };
11 in
12 import ./node-packages.nix {
13 inherit (pkgs) fetchurl fetchgit;
14 inherit nodeEnv;
15 } No newline at end of file
@@ -0,0 +1,292 b''
1 # This file originates from node2nix
2
3 {stdenv, python, nodejs, utillinux, runCommand, writeTextFile}:
4
5 let
6 # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
7 tarWrapper = runCommand "tarWrapper" {} ''
8 mkdir -p $out/bin
9
10 cat > $out/bin/tar <<EOF
11 #! ${stdenv.shell} -e
12 $(type -p tar) "\$@" --warning=no-unknown-keyword
13 EOF
14
15 chmod +x $out/bin/tar
16 '';
17
18 # Function that generates a TGZ file from a NPM project
19 buildNodeSourceDist =
20 { name, version, src, ... }:
21
22 stdenv.mkDerivation {
23 name = "node-tarball-${name}-${version}";
24 inherit src;
25 buildInputs = [ nodejs ];
26 buildPhase = ''
27 export HOME=$TMPDIR
28 tgzFile=$(npm pack)
29 '';
30 installPhase = ''
31 mkdir -p $out/tarballs
32 mv $tgzFile $out/tarballs
33 mkdir -p $out/nix-support
34 echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
35 '';
36 };
37
38 includeDependencies = {dependencies}:
39 stdenv.lib.optionalString (dependencies != [])
40 (stdenv.lib.concatMapStrings (dependency:
41 ''
42 # Bundle the dependencies of the package
43 mkdir -p node_modules
44 cd node_modules
45
46 # Only include dependencies if they don't exist. They may also be bundled in the package.
47 if [ ! -e "${dependency.name}" ]
48 then
49 ${composePackage dependency}
50 fi
51
52 cd ..
53 ''
54 ) dependencies);
55
56 # Recursively composes the dependencies of a package
57 composePackage = { name, packageName, src, dependencies ? [], ... }@args:
58 let
59 fixImpureDependencies = writeTextFile {
60 name = "fixDependencies.js";
61 text = ''
62 var fs = require('fs');
63 var url = require('url');
64
65 /*
66 * Replaces an impure version specification by *
67 */
68 function replaceImpureVersionSpec(versionSpec) {
69 var parsedUrl = url.parse(versionSpec);
70
71 if(versionSpec == "latest" || versionSpec == "unstable" ||
72 versionSpec.substr(0, 2) == ".." || dependency.substr(0, 2) == "./" || dependency.substr(0, 2) == "~/" || dependency.substr(0, 1) == '/')
73 return '*';
74 else if(parsedUrl.protocol == "git:" || parsedUrl.protocol == "git+ssh:" || parsedUrl.protocol == "git+http:" || parsedUrl.protocol == "git+https:" ||
75 parsedUrl.protocol == "http:" || parsedUrl.protocol == "https:")
76 return '*';
77 else
78 return versionSpec;
79 }
80
81 var packageObj = JSON.parse(fs.readFileSync('./package.json'));
82
83 /* Replace dependencies */
84 if(packageObj.dependencies !== undefined) {
85 for(var dependency in packageObj.dependencies) {
86 var versionSpec = packageObj.dependencies[dependency];
87 packageObj.dependencies[dependency] = replaceImpureVersionSpec(versionSpec);
88 }
89 }
90
91 /* Replace development dependencies */
92 if(packageObj.devDependencies !== undefined) {
93 for(var dependency in packageObj.devDependencies) {
94 var versionSpec = packageObj.devDependencies[dependency];
95 packageObj.devDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
96 }
97 }
98
99 /* Replace optional dependencies */
100 if(packageObj.optionalDependencies !== undefined) {
101 for(var dependency in packageObj.optionalDependencies) {
102 var versionSpec = packageObj.optionalDependencies[dependency];
103 packageObj.optionalDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
104 }
105 }
106
107 /* Write the fixed JSON file */
108 fs.writeFileSync("package.json", JSON.stringify(packageObj));
109 '';
110 };
111 in
112 ''
113 DIR=$(pwd)
114 cd $TMPDIR
115
116 unpackFile ${src}
117
118 # Make the base dir in which the target dependency resides first
119 mkdir -p "$(dirname "$DIR/${packageName}")"
120
121 if [ -f "${src}" ]
122 then
123 # Figure out what directory has been unpacked
124 packageDir=$(find . -type d -maxdepth 1 | tail -1)
125
126 # Restore write permissions to make building work
127 chmod -R u+w "$packageDir"
128
129 # Move the extracted tarball into the output folder
130 mv "$packageDir" "$DIR/${packageName}"
131 elif [ -d "${src}" ]
132 then
133 # Restore write permissions to make building work
134 chmod -R u+w $strippedName
135
136 # Move the extracted directory into the output folder
137 mv $strippedName "$DIR/${packageName}"
138 fi
139
140 # Unset the stripped name to not confuse the next unpack step
141 unset strippedName
142
143 # Some version specifiers (latest, unstable, URLs, file paths) force NPM to make remote connections or consult paths outside the Nix store.
144 # The following JavaScript replaces these by * to prevent that
145 cd "$DIR/${packageName}"
146 node ${fixImpureDependencies}
147
148 # Include the dependencies of the package
149 ${includeDependencies { inherit dependencies; }}
150 cd ..
151 ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
152 '';
153
154 # Extract the Node.js source code which is used to compile packages with
155 # native bindings
156 nodeSources = runCommand "node-sources" {} ''
157 tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
158 mv node-* $out
159 '';
160
161 # Builds and composes an NPM package including all its dependencies
162 buildNodePackage = { name, packageName, version, dependencies ? [], production ? true, npmFlags ? "", dontNpmInstall ? false, preRebuild ? "", ... }@args:
163
164 stdenv.lib.makeOverridable stdenv.mkDerivation (builtins.removeAttrs args [ "dependencies" ] // {
165 name = "node-${name}-${version}";
166 buildInputs = [ tarWrapper python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or [];
167 dontStrip = args.dontStrip or true; # Striping may fail a build for some package deployments
168
169 inherit dontNpmInstall preRebuild;
170
171 unpackPhase = args.unpackPhase or "true";
172
173 buildPhase = args.buildPhase or "true";
174
175 compositionScript = composePackage args;
176 passAsFile = [ "compositionScript" ];
177
178 installPhase = args.installPhase or ''
179 # Create and enter a root node_modules/ folder
180 mkdir -p $out/lib/node_modules
181 cd $out/lib/node_modules
182
183 # Compose the package and all its dependencies
184 source $compositionScriptPath
185
186 # Patch the shebangs of the bundled modules to prevent them from
187 # calling executables outside the Nix store as much as possible
188 patchShebangs .
189
190 # Deploy the Node.js package by running npm install. Since the
191 # dependencies have been provided already by ourselves, it should not
192 # attempt to install them again, which is good, because we want to make
193 # it Nix's responsibility. If it needs to install any dependencies
194 # anyway (e.g. because the dependency parameters are
195 # incomplete/incorrect), it fails.
196 #
197 # The other responsibilities of NPM are kept -- version checks, build
198 # steps, postprocessing etc.
199
200 export HOME=$TMPDIR
201 cd "${packageName}"
202 runHook preRebuild
203 npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild
204
205 if [ "$dontNpmInstall" != "1" ]
206 then
207 npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install
208 fi
209
210 # Create symlink to the deployed executable folder, if applicable
211 if [ -d "$out/lib/node_modules/.bin" ]
212 then
213 ln -s $out/lib/node_modules/.bin $out/bin
214 fi
215
216 # Create symlinks to the deployed manual page folders, if applicable
217 if [ -d "$out/lib/node_modules/${packageName}/man" ]
218 then
219 mkdir -p $out/share
220 for dir in "$out/lib/node_modules/${packageName}/man/"*
221 do
222 mkdir -p $out/share/man/$(basename "$dir")
223 for page in "$dir"/*
224 do
225 ln -s $page $out/share/man/$(basename "$dir")
226 done
227 done
228 fi
229 '';
230 });
231
232 # Builds a development shell
233 buildNodeShell = { name, packageName, version, src, dependencies ? [], production ? true, npmFlags ? "", dontNpmInstall ? false, ... }@args:
234 let
235 nodeDependencies = stdenv.mkDerivation {
236 name = "node-dependencies-${name}-${version}";
237
238 buildInputs = [ tarWrapper python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or [];
239
240 includeScript = includeDependencies { inherit dependencies; };
241 passAsFile = [ "includeScript" ];
242
243 buildCommand = ''
244 mkdir -p $out/lib
245 cd $out/lib
246 source $includeScriptPath
247
248 # Create fake package.json to make the npm commands work properly
249 cat > package.json <<EOF
250 {
251 "name": "${packageName}",
252 "version": "${version}"
253 }
254 EOF
255
256 # Patch the shebangs of the bundled modules to prevent them from
257 # calling executables outside the Nix store as much as possible
258 patchShebangs .
259
260 export HOME=$TMPDIR
261 npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild
262
263 ${stdenv.lib.optionalString (!dontNpmInstall) ''
264 npm --registry http://www.example.com --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install
265 ''}
266
267 ln -s $out/lib/node_modules/.bin $out/bin
268 '';
269 };
270 in
271 stdenv.lib.makeOverridable stdenv.mkDerivation {
272 name = "node-shell-${name}-${version}";
273
274 buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or [];
275 buildCommand = ''
276 mkdir -p $out/bin
277 cat > $out/bin/shell <<EOF
278 #! ${stdenv.shell} -e
279 $shellHook
280 exec ${stdenv.shell}
281 EOF
282 chmod +x $out/bin/shell
283 '';
284
285 # Provide the dependencies in a development shell through the NODE_PATH environment variable
286 inherit nodeDependencies;
287 shellHook = stdenv.lib.optionalString (dependencies != []) ''
288 export NODE_PATH=$nodeDependencies/lib/node_modules
289 '';
290 };
291 in
292 { inherit buildNodeSourceDist buildNodePackage buildNodeShell; }
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,6 +1,6 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.3.1
2 current_version = 4.4.0
3 message = release: Bump version {current_version} to {new_version}
3 message = release: Bump version {current_version} to {new_version}
4
4
5 [bumpversion:file:rhodecode/VERSION]
5 [bumpversion:file:rhodecode/VERSION]
6
6
@@ -1,59 +1,65 b''
1 syntax: glob
1 syntax: glob
2 *.egg
2 *.egg
3 *.egg-info
3 *.egg-info
4 *.idea
4 *.idea
5 *.orig
5 *.orig
6 *.pyc
6 *.pyc
7 *.sqlite-journal
7 *.sqlite-journal
8 *.swp
8 *.swp
9 *.tox
9 *.tox
10 *.DS_Store*
10 *.DS_Store*
11 rhodecode/public/js/src/components/**/*.css
11
12
12 syntax: regexp
13 syntax: regexp
13
14
14 #.filename
15 #.filename
15 ^\.settings$
16 ^\.settings$
16 ^\.project$
17 ^\.project$
17 ^\.pydevproject$
18 ^\.pydevproject$
18 ^\.coverage$
19 ^\.coverage$
19 ^\.cache.*$
20 ^\.cache.*$
20 ^\.rhodecode$
21 ^\.rhodecode$
21
22
22 ^rcextensions
23 ^rcextensions
23 ^_dev
24 ^_dev
24 ^._dev
25 ^._dev
25 ^build/
26 ^build/
27 ^bower_components/
26 ^coverage\.xml$
28 ^coverage\.xml$
27 ^data$
29 ^data$
28 ^\.eggs/
30 ^\.eggs/
29 ^configs/data$
31 ^configs/data$
30 ^dev.ini$
32 ^dev.ini$
31 ^acceptance_tests/dev.*\.ini$
33 ^acceptance_tests/dev.*\.ini$
32 ^dist/
34 ^dist/
33 ^fabfile.py
35 ^fabfile.py
34 ^htmlcov
36 ^htmlcov
35 ^junit\.xml$
37 ^junit\.xml$
36 ^node_modules/
38 ^node_modules/
37 ^pylint.log$
39 ^pylint.log$
38 ^rcextensions/
40 ^rcextensions/
39 ^result$
41 ^result$
40 ^rhodecode/public/css/style.css$
42 ^rhodecode/public/css/style.css$
43 ^rhodecode/public/css/style-polymer.css$
44 ^rhodecode/public/js/rhodecode-components.html$
41 ^rhodecode/public/js/scripts.js$
45 ^rhodecode/public/js/scripts.js$
46 ^rhodecode/public/js/src/components/root-styles.gen.html$
47 ^rhodecode/public/js/vendors/webcomponentsjs/
42 ^rhodecode\.db$
48 ^rhodecode\.db$
43 ^rhodecode\.log$
49 ^rhodecode\.log$
44 ^rhodecode_dev\.log$
50 ^rhodecode_dev\.log$
45 ^test\.db$
51 ^test\.db$
46
52
47 # ac-tests
53 # ac-tests
48 ^acceptance_tests/\.cache.*$
54 ^acceptance_tests/\.cache.*$
49 ^acceptance_tests/externals
55 ^acceptance_tests/externals
50 ^acceptance_tests/ghostdriver.log$
56 ^acceptance_tests/ghostdriver.log$
51 ^acceptance_tests/local(_.+)?\.ini$
57 ^acceptance_tests/local(_.+)?\.ini$
52
58
53 # docs
59 # docs
54 ^docs/_build$
60 ^docs/_build$
55 ^docs/result$
61 ^docs/result$
56 ^docs-internal/_build$
62 ^docs-internal/_build$
57
63
58 # Cythonized things
64 # Cythonized things
59 ^rhodecode/.*\.(c|so)$
65 ^rhodecode/.*\.(c|so)$
@@ -1,33 +1,28 b''
1 [DEFAULT]
1 [DEFAULT]
2 done = false
2 done = false
3
3
4 [task:bump_version]
4 [task:bump_version]
5 done = true
5 done = true
6
6
7 [task:rc_tools_pinned]
8 done = true
9
10 [task:fixes_on_stable]
7 [task:fixes_on_stable]
11 done = true
12
8
13 [task:pip2nix_generated]
9 [task:pip2nix_generated]
14 done = true
15
10
16 [task:changelog_updated]
11 [task:changelog_updated]
17 done = true
18
12
19 [task:generate_api_docs]
13 [task:generate_api_docs]
20 done = true
14
15 [task:updated_translation]
21
16
22 [release]
17 [release]
23 state = prepared
18 state = in_progress
24 version = 4.3.1
19 version = 4.4.0
25
20
26 [task:updated_translation]
21 [task:rc_tools_pinned]
27
22
28 [task:generate_js_routes]
23 [task:generate_js_routes]
29
24
30 [task:updated_trial_license]
25 [task:updated_trial_license]
31
26
32 [task:generate_oss_licenses]
27 [task:generate_oss_licenses]
33
28
@@ -1,144 +1,15 b''
1 module.exports = function(grunt) {
1 var gruntConfig = require('./grunt_config.json');
2 grunt.initConfig({
3
4 dirs: {
5 css: "rhodecode/public/css",
6 js: {
7 "src": "rhodecode/public/js/src",
8 "dest": "rhodecode/public/js"
9 }
10 },
11
12 concat: {
13 dist: {
14 src: [
15 // Base libraries
16 '<%= dirs.js.src %>/jquery-1.11.1.min.js',
17 '<%= dirs.js.src %>/logging.js',
18 '<%= dirs.js.src %>/bootstrap.js',
19 '<%= dirs.js.src %>/mousetrap.js',
20 '<%= dirs.js.src %>/moment.js',
21 '<%= dirs.js.src %>/appenlight-client-0.4.1.min.js',
22 '<%= dirs.js.src %>/i18n_utils.js',
23 '<%= dirs.js.src %>/deform.js',
24
25 // Plugins
26 '<%= dirs.js.src %>/plugins/jquery.pjax.js',
27 '<%= dirs.js.src %>/plugins/jquery.dataTables.js',
28 '<%= dirs.js.src %>/plugins/flavoured_checkbox.js',
29 '<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js',
30 '<%= dirs.js.src %>/plugins/jquery.autocomplete.js',
31 '<%= dirs.js.src %>/plugins/jquery.debounce.js',
32 '<%= dirs.js.src %>/plugins/jquery.mark.js',
33 '<%= dirs.js.src %>/plugins/jquery.timeago.js',
34 '<%= dirs.js.src %>/plugins/jquery.timeago-extension.js',
35 '<%= dirs.js.src %>/plugins/toastr.js',
36
37 // Select2
38 '<%= dirs.js.src %>/select2/select2.js',
39
40 // Code-mirror
41 '<%= dirs.js.src %>/codemirror/codemirror.js',
42 '<%= dirs.js.src %>/codemirror/codemirror_loadmode.js',
43 '<%= dirs.js.src %>/codemirror/codemirror_hint.js',
44 '<%= dirs.js.src %>/codemirror/codemirror_overlay.js',
45 '<%= dirs.js.src %>/codemirror/codemirror_placeholder.js',
46 // TODO: mikhail: this is an exception. Since the code mirror modes
47 // are loaded "on the fly", we need to keep them in a public folder
48 '<%= dirs.js.dest %>/mode/meta.js',
49 '<%= dirs.js.dest %>/mode/meta_ext.js',
50 '<%= dirs.js.dest %>/rhodecode/i18n/select2/translations.js',
51
52 // Rhodecode utilities
53 '<%= dirs.js.src %>/rhodecode/utils/array.js',
54 '<%= dirs.js.src %>/rhodecode/utils/string.js',
55 '<%= dirs.js.src %>/rhodecode/utils/pyroutes.js',
56 '<%= dirs.js.src %>/rhodecode/utils/ajax.js',
57 '<%= dirs.js.src %>/rhodecode/utils/autocomplete.js',
58 '<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js',
59 '<%= dirs.js.src %>/rhodecode/utils/ie.js',
60 '<%= dirs.js.src %>/rhodecode/utils/os.js',
61 '<%= dirs.js.src %>/rhodecode/utils/topics.js',
62
63 // Rhodecode widgets
64 '<%= dirs.js.src %>/rhodecode/widgets/multiselect.js',
65
2
66 // Rhodecode components
3 module.exports = function(grunt) {
67 '<%= dirs.js.src %>/rhodecode/init.js',
4 grunt.initConfig(gruntConfig);
68 '<%= dirs.js.src %>/rhodecode/connection_controller.js',
69 '<%= dirs.js.src %>/rhodecode/codemirror.js',
70 '<%= dirs.js.src %>/rhodecode/comments.js',
71 '<%= dirs.js.src %>/rhodecode/constants.js',
72 '<%= dirs.js.src %>/rhodecode/files.js',
73 '<%= dirs.js.src %>/rhodecode/followers.js',
74 '<%= dirs.js.src %>/rhodecode/menus.js',
75 '<%= dirs.js.src %>/rhodecode/notifications.js',
76 '<%= dirs.js.src %>/rhodecode/permissions.js',
77 '<%= dirs.js.src %>/rhodecode/pjax.js',
78 '<%= dirs.js.src %>/rhodecode/pullrequests.js',
79 '<%= dirs.js.src %>/rhodecode/settings.js',
80 '<%= dirs.js.src %>/rhodecode/select2_widgets.js',
81 '<%= dirs.js.src %>/rhodecode/tooltips.js',
82 '<%= dirs.js.src %>/rhodecode/users.js',
83 '<%= dirs.js.src %>/rhodecode/utils/notifications.js',
84 '<%= dirs.js.src %>/rhodecode/appenlight.js',
85
86 // Rhodecode main module
87 '<%= dirs.js.src %>/rhodecode.js'
88 ],
89 dest: '<%= dirs.js.dest %>/scripts.js',
90 nonull: true
91 }
92 },
93
94 less: {
95 development: {
96 options: {
97 compress: false,
98 yuicompress: false,
99 optimization: 0
100 },
101 files: {
102 "<%= dirs.css %>/style.css": "<%= dirs.css %>/main.less"
103 }
104 },
105 production: {
106 options: {
107 compress: true,
108 yuicompress: true,
109 optimization: 2
110 },
111 files: {
112 "<%= dirs.css %>/style.css": "<%= dirs.css %>/main.less"
113 }
114 }
115 },
116
117 watch: {
118 less: {
119 files: ["<%= dirs.css %>/*.less"],
120 tasks: ["less:production"]
121 },
122 js: {
123 files: ["<%= dirs.js.src %>/**/*.js"],
124 tasks: ["concat:dist"]
125 }
126 },
127
128 jshint: {
129 rhodecode: {
130 src: '<%= dirs.js.src %>/rhodecode/**/*.js',
131 options: {
132 jshintrc: '.jshintrc'
133 }
134 }
135 }
136 });
137
5
138 grunt.loadNpmTasks('grunt-contrib-less');
6 grunt.loadNpmTasks('grunt-contrib-less');
139 grunt.loadNpmTasks('grunt-contrib-concat');
7 grunt.loadNpmTasks('grunt-contrib-concat');
140 grunt.loadNpmTasks('grunt-contrib-watch');
8 grunt.loadNpmTasks('grunt-contrib-watch');
141 grunt.loadNpmTasks('grunt-contrib-jshint');
9 grunt.loadNpmTasks('grunt-contrib-jshint');
10 grunt.loadNpmTasks('grunt-vulcanize');
11 grunt.loadNpmTasks('grunt-crisper');
12 grunt.loadNpmTasks('grunt-contrib-copy');
142
13
143 grunt.registerTask('default', ['less:production', 'concat:dist']);
14 grunt.registerTask('default', ['less:production', 'less:components', 'concat:polymercss', 'copy','vulcanize', 'crisper', 'concat:dist']);
144 };
15 };
@@ -1,52 +1,55 b''
1 # top level files
1 # top level files
2 include test.ini
2 include test.ini
3 include MANIFEST.in
3 include MANIFEST.in
4 include README.rst
4 include README.rst
5 include CHANGES.rst
5 include CHANGES.rst
6 include LICENSE.txt
6 include LICENSE.txt
7
7
8 include rhodecode/VERSION
8 include rhodecode/VERSION
9
9
10 # docs
10 # docs
11 recursive-include docs *
11 recursive-include docs *
12
12
13 # all config files
13 # all config files
14 recursive-include configs *
14 recursive-include configs *
15
15
16 # translations
16 # translations
17 recursive-include rhodecode/i18n *
17 recursive-include rhodecode/i18n *
18
18
19 # hook templates
19 # hook templates
20 recursive-include rhodecode/config/hook_templates *
20 recursive-include rhodecode/config/hook_templates *
21
21
22 # non-python core stuff
22 # non-python core stuff
23 recursive-include rhodecode *.cfg
23 recursive-include rhodecode *.cfg
24 recursive-include rhodecode *.json
24 recursive-include rhodecode *.json
25 recursive-include rhodecode *.ini_tmpl
25 recursive-include rhodecode *.ini_tmpl
26 recursive-include rhodecode *.sh
26 recursive-include rhodecode *.sh
27 recursive-include rhodecode *.mako
27 recursive-include rhodecode *.mako
28
28
29 # 502 page
29 # 502 page
30 include rhodecode/public/502.html
30 include rhodecode/public/502.html
31
31
32 # 502 page
33 include rhodecode/public/502.html
34
32 # images, css
35 # images, css
33 include rhodecode/public/css/*.css
36 include rhodecode/public/css/*.css
34 include rhodecode/public/images/*.*
37 include rhodecode/public/images/*.*
35
38
36 # sound files
39 # sound files
37 include rhodecode/public/sounds/*.mp3
40 include rhodecode/public/sounds/*.mp3
38 include rhodecode/public/sounds/*.wav
41 include rhodecode/public/sounds/*.wav
39
42
40 # fonts
43 # fonts
41 recursive-include rhodecode/public/fonts/ProximaNova *
44 recursive-include rhodecode/public/fonts/ProximaNova *
42 recursive-include rhodecode/public/fonts/RCIcons *
45 recursive-include rhodecode/public/fonts/RCIcons *
43
46
44 # js
47 # js
45 recursive-include rhodecode/public/js *
48 recursive-include rhodecode/public/js *
46
49
47 # templates
50 # templates
48 recursive-include rhodecode/templates *
51 recursive-include rhodecode/templates *
49
52
50 # skip any tests files
53 # skip any tests files
51 recursive-exclude rhodecode/tests *
54 recursive-exclude rhodecode/tests *
52
55
@@ -1,672 +1,672 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE ENTERPRISE CONFIGURATION ##
4 ## RHODECODE ENTERPRISE CONFIGURATION ##
5 # The %(here)s variable will be replaced with the parent directory of this file#
5 # The %(here)s variable will be replaced with the parent directory of this file#
6 ################################################################################
6 ################################################################################
7
7
8 [DEFAULT]
8 [DEFAULT]
9 debug = true
9 debug = true
10
10
11 ################################################################################
11 ################################################################################
12 ## EMAIL CONFIGURATION ##
12 ## EMAIL CONFIGURATION ##
13 ## Uncomment and replace with the email address which should receive ##
13 ## Uncomment and replace with the email address which should receive ##
14 ## any error reports after an application crash ##
14 ## any error reports after an application crash ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 ################################################################################
16 ################################################################################
17
17
18 ## prefix all emails subjects with given prefix, helps filtering out emails
18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 #email_prefix = [RhodeCode]
19 #email_prefix = [RhodeCode]
20
20
21 ## email FROM address all mails will be sent
21 ## email FROM address all mails will be sent
22 #app_email_from = rhodecode-noreply@localhost
22 #app_email_from = rhodecode-noreply@localhost
23
23
24 ## Uncomment and replace with the address which should receive any error report
24 ## Uncomment and replace with the address which should receive any error report
25 ## note: using appenlight for error handling doesn't need this to be uncommented
25 ## note: using appenlight for error handling doesn't need this to be uncommented
26 #email_to = admin@localhost
26 #email_to = admin@localhost
27
27
28 ## in case of Application errors, sent an error email form
28 ## in case of Application errors, sent an error email form
29 #error_email_from = rhodecode_error@localhost
29 #error_email_from = rhodecode_error@localhost
30
30
31 ## additional error message to be send in case of server crash
31 ## additional error message to be send in case of server crash
32 #error_message =
32 #error_message =
33
33
34
34
35 #smtp_server = mail.server.com
35 #smtp_server = mail.server.com
36 #smtp_username =
36 #smtp_username =
37 #smtp_password =
37 #smtp_password =
38 #smtp_port =
38 #smtp_port =
39 #smtp_use_tls = false
39 #smtp_use_tls = false
40 #smtp_use_ssl = true
40 #smtp_use_ssl = true
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
42 #smtp_auth =
42 #smtp_auth =
43
43
44 [server:main]
44 [server:main]
45 ## COMMON ##
45 ## COMMON ##
46 host = 127.0.0.1
46 host = 127.0.0.1
47 port = 5000
47 port = 5000
48
48
49 ##################################
49 ##################################
50 ## WAITRESS WSGI SERVER ##
50 ## WAITRESS WSGI SERVER ##
51 ## Recommended for Development ##
51 ## Recommended for Development ##
52 ##################################
52 ##################################
53
53
54 use = egg:waitress#main
54 use = egg:waitress#main
55 ## number of worker threads
55 ## number of worker threads
56 threads = 5
56 threads = 5
57 ## MAX BODY SIZE 100GB
57 ## MAX BODY SIZE 100GB
58 max_request_body_size = 107374182400
58 max_request_body_size = 107374182400
59 ## Use poll instead of select, fixes file descriptors limits problems.
59 ## Use poll instead of select, fixes file descriptors limits problems.
60 ## May not work on old windows systems.
60 ## May not work on old windows systems.
61 asyncore_use_poll = true
61 asyncore_use_poll = true
62
62
63
63
64 ##########################
64 ##########################
65 ## GUNICORN WSGI SERVER ##
65 ## GUNICORN WSGI SERVER ##
66 ##########################
66 ##########################
67 ## run with gunicorn --log-config <inifile.ini> --paste <inifile.ini>
67 ## run with gunicorn --log-config <inifile.ini> --paste <inifile.ini>
68
68
69 #use = egg:gunicorn#main
69 #use = egg:gunicorn#main
70 ## Sets the number of process workers. You must set `instance_id = *`
70 ## Sets the number of process workers. You must set `instance_id = *`
71 ## when this option is set to more than one worker, recommended
71 ## when this option is set to more than one worker, recommended
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
73 ## The `instance_id = *` must be set in the [app:main] section below
73 ## The `instance_id = *` must be set in the [app:main] section below
74 #workers = 2
74 #workers = 2
75 ## number of threads for each of the worker, must be set to 1 for gevent
75 ## number of threads for each of the worker, must be set to 1 for gevent
76 ## generally recommened to be at 1
76 ## generally recommened to be at 1
77 #threads = 1
77 #threads = 1
78 ## process name
78 ## process name
79 #proc_name = rhodecode
79 #proc_name = rhodecode
80 ## type of worker class, one of sync, gevent
80 ## type of worker class, one of sync, gevent
81 ## recommended for bigger setup is using of of other than sync one
81 ## recommended for bigger setup is using of of other than sync one
82 #worker_class = sync
82 #worker_class = sync
83 ## The maximum number of simultaneous clients. Valid only for Gevent
83 ## The maximum number of simultaneous clients. Valid only for Gevent
84 #worker_connections = 10
84 #worker_connections = 10
85 ## max number of requests that worker will handle before being gracefully
85 ## max number of requests that worker will handle before being gracefully
86 ## restarted, could prevent memory leaks
86 ## restarted, could prevent memory leaks
87 #max_requests = 1000
87 #max_requests = 1000
88 #max_requests_jitter = 30
88 #max_requests_jitter = 30
89 ## amount of time a worker can spend with handling a request before it
89 ## amount of time a worker can spend with handling a request before it
90 ## gets killed and restarted. Set to 6hrs
90 ## gets killed and restarted. Set to 6hrs
91 #timeout = 21600
91 #timeout = 21600
92
92
93
93
94 ## prefix middleware for RhodeCode, disables force_https flag.
94 ## prefix middleware for RhodeCode, disables force_https flag.
95 ## recommended when using proxy setup.
95 ## recommended when using proxy setup.
96 ## allows to set RhodeCode under a prefix in server.
96 ## allows to set RhodeCode under a prefix in server.
97 ## eg https://server.com/<prefix>. Enable `filter-with =` option below as well.
97 ## eg https://server.com/<prefix>. Enable `filter-with =` option below as well.
98 ## optionally set prefix like: `prefix = /<your-prefix>`
98 ## optionally set prefix like: `prefix = /<your-prefix>`
99 [filter:proxy-prefix]
99 [filter:proxy-prefix]
100 use = egg:PasteDeploy#prefix
100 use = egg:PasteDeploy#prefix
101 prefix = /
101 prefix = /
102
102
103 [app:main]
103 [app:main]
104 use = egg:rhodecode-enterprise-ce
104 use = egg:rhodecode-enterprise-ce
105
105
106 ## enable proxy prefix middleware, defined above
106 ## enable proxy prefix middleware, defined above
107 #filter-with = proxy-prefix
107 #filter-with = proxy-prefix
108
108
109 # During development the we want to have the debug toolbar enabled
109 # During development the we want to have the debug toolbar enabled
110 pyramid.includes =
110 pyramid.includes =
111 pyramid_debugtoolbar
111 pyramid_debugtoolbar
112 rhodecode.utils.debugtoolbar
112 rhodecode.utils.debugtoolbar
113 rhodecode.lib.middleware.request_wrapper
113 rhodecode.lib.middleware.request_wrapper
114
114
115 pyramid.reload_templates = true
115 pyramid.reload_templates = true
116
116
117 debugtoolbar.hosts = 0.0.0.0/0
117 debugtoolbar.hosts = 0.0.0.0/0
118 debugtoolbar.exclude_prefixes =
118 debugtoolbar.exclude_prefixes =
119 /css
119 /css
120 /fonts
120 /fonts
121 /images
121 /images
122 /js
122 /js
123
123
124 ## RHODECODE PLUGINS ##
124 ## RHODECODE PLUGINS ##
125 rhodecode.includes =
125 rhodecode.includes =
126 rhodecode.api
126 rhodecode.api
127
127
128
128
129 # api prefix url
129 # api prefix url
130 rhodecode.api.url = /_admin/api
130 rhodecode.api.url = /_admin/api
131
131
132
132
133 ## END RHODECODE PLUGINS ##
133 ## END RHODECODE PLUGINS ##
134
134
135 ## encryption key used to encrypt social plugin tokens,
135 ## encryption key used to encrypt social plugin tokens,
136 ## remote_urls with credentials etc, if not set it defaults to
136 ## remote_urls with credentials etc, if not set it defaults to
137 ## `beaker.session.secret`
137 ## `beaker.session.secret`
138 #rhodecode.encrypted_values.secret =
138 #rhodecode.encrypted_values.secret =
139
139
140 ## decryption strict mode (enabled by default). It controls if decryption raises
140 ## decryption strict mode (enabled by default). It controls if decryption raises
141 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
141 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
142 #rhodecode.encrypted_values.strict = false
142 #rhodecode.encrypted_values.strict = false
143
143
144 ## return gzipped responses from Rhodecode (static files/application)
144 ## return gzipped responses from Rhodecode (static files/application)
145 gzip_responses = false
145 gzip_responses = false
146
146
147 ## autogenerate javascript routes file on startup
147 ## autogenerate javascript routes file on startup
148 generate_js_files = false
148 generate_js_files = false
149
149
150 ## Optional Languages
150 ## Optional Languages
151 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
151 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
152 lang = en
152 lang = en
153
153
154 ## perform a full repository scan on each server start, this should be
154 ## perform a full repository scan on each server start, this should be
155 ## set to false after first startup, to allow faster server restarts.
155 ## set to false after first startup, to allow faster server restarts.
156 startup.import_repos = false
156 startup.import_repos = false
157
157
158 ## Uncomment and set this path to use archive download cache.
158 ## Uncomment and set this path to use archive download cache.
159 ## Once enabled, generated archives will be cached at this location
159 ## Once enabled, generated archives will be cached at this location
160 ## and served from the cache during subsequent requests for the same archive of
160 ## and served from the cache during subsequent requests for the same archive of
161 ## the repository.
161 ## the repository.
162 #archive_cache_dir = /tmp/tarballcache
162 #archive_cache_dir = /tmp/tarballcache
163
163
164 ## change this to unique ID for security
164 ## change this to unique ID for security
165 app_instance_uuid = rc-production
165 app_instance_uuid = rc-production
166
166
167 ## cut off limit for large diffs (size in bytes)
167 ## cut off limit for large diffs (size in bytes)
168 cut_off_limit_diff = 1024000
168 cut_off_limit_diff = 1024000
169 cut_off_limit_file = 256000
169 cut_off_limit_file = 256000
170
170
171 ## use cache version of scm repo everywhere
171 ## use cache version of scm repo everywhere
172 vcs_full_cache = true
172 vcs_full_cache = true
173
173
174 ## force https in RhodeCode, fixes https redirects, assumes it's always https
174 ## force https in RhodeCode, fixes https redirects, assumes it's always https
175 ## Normally this is controlled by proper http flags sent from http server
175 ## Normally this is controlled by proper http flags sent from http server
176 force_https = false
176 force_https = false
177
177
178 ## use Strict-Transport-Security headers
178 ## use Strict-Transport-Security headers
179 use_htsts = false
179 use_htsts = false
180
180
181 ## number of commits stats will parse on each iteration
181 ## number of commits stats will parse on each iteration
182 commit_parse_limit = 25
182 commit_parse_limit = 25
183
183
184 ## git rev filter option, --all is the default filter, if you need to
184 ## git rev filter option, --all is the default filter, if you need to
185 ## hide all refs in changelog switch this to --branches --tags
185 ## hide all refs in changelog switch this to --branches --tags
186 git_rev_filter = --branches --tags
186 git_rev_filter = --branches --tags
187
187
188 # Set to true if your repos are exposed using the dumb protocol
188 # Set to true if your repos are exposed using the dumb protocol
189 git_update_server_info = false
189 git_update_server_info = false
190
190
191 ## RSS/ATOM feed options
191 ## RSS/ATOM feed options
192 rss_cut_off_limit = 256000
192 rss_cut_off_limit = 256000
193 rss_items_per_page = 10
193 rss_items_per_page = 10
194 rss_include_diff = false
194 rss_include_diff = false
195
195
196 ## gist URL alias, used to create nicer urls for gist. This should be an
196 ## gist URL alias, used to create nicer urls for gist. This should be an
197 ## url that does rewrites to _admin/gists/<gistid>.
197 ## url that does rewrites to _admin/gists/<gistid>.
198 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
198 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
199 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
199 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
200 gist_alias_url =
200 gist_alias_url =
201
201
202 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
202 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
203 ## used for access.
203 ## used for access.
204 ## Adding ?auth_token = <token> to the url authenticates this request as if it
204 ## Adding ?auth_token = <token> to the url authenticates this request as if it
205 ## came from the the logged in user who own this authentication token.
205 ## came from the the logged in user who own this authentication token.
206 ##
206 ##
207 ## Syntax is <ControllerClass>:<function_pattern>.
207 ## Syntax is <ControllerClass>:<function_pattern>.
208 ## To enable access to raw_files put `FilesController:raw`.
208 ## To enable access to raw_files put `FilesController:raw`.
209 ## To enable access to patches add `ChangesetController:changeset_patch`.
209 ## To enable access to patches add `ChangesetController:changeset_patch`.
210 ## The list should be "," separated and on a single line.
210 ## The list should be "," separated and on a single line.
211 ##
211 ##
212 ## Recommended controllers to enable:
212 ## Recommended controllers to enable:
213 # ChangesetController:changeset_patch,
213 # ChangesetController:changeset_patch,
214 # ChangesetController:changeset_raw,
214 # ChangesetController:changeset_raw,
215 # FilesController:raw,
215 # FilesController:raw,
216 # FilesController:archivefile,
216 # FilesController:archivefile,
217 # GistsController:*,
217 # GistsController:*,
218 api_access_controllers_whitelist =
218 api_access_controllers_whitelist =
219
219
220 ## default encoding used to convert from and to unicode
220 ## default encoding used to convert from and to unicode
221 ## can be also a comma separated list of encoding in case of mixed encodings
221 ## can be also a comma separated list of encoding in case of mixed encodings
222 default_encoding = UTF-8
222 default_encoding = UTF-8
223
223
224 ## instance-id prefix
224 ## instance-id prefix
225 ## a prefix key for this instance used for cache invalidation when running
225 ## a prefix key for this instance used for cache invalidation when running
226 ## multiple instances of rhodecode, make sure it's globally unique for
226 ## multiple instances of rhodecode, make sure it's globally unique for
227 ## all running rhodecode instances. Leave empty if you don't use it
227 ## all running rhodecode instances. Leave empty if you don't use it
228 instance_id =
228 instance_id =
229
229
230 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
230 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
231 ## of an authentication plugin also if it is disabled by it's settings.
231 ## of an authentication plugin also if it is disabled by it's settings.
232 ## This could be useful if you are unable to log in to the system due to broken
232 ## This could be useful if you are unable to log in to the system due to broken
233 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
233 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
234 ## module to log in again and fix the settings.
234 ## module to log in again and fix the settings.
235 ##
235 ##
236 ## Available builtin plugin IDs (hash is part of the ID):
236 ## Available builtin plugin IDs (hash is part of the ID):
237 ## egg:rhodecode-enterprise-ce#rhodecode
237 ## egg:rhodecode-enterprise-ce#rhodecode
238 ## egg:rhodecode-enterprise-ce#pam
238 ## egg:rhodecode-enterprise-ce#pam
239 ## egg:rhodecode-enterprise-ce#ldap
239 ## egg:rhodecode-enterprise-ce#ldap
240 ## egg:rhodecode-enterprise-ce#jasig_cas
240 ## egg:rhodecode-enterprise-ce#jasig_cas
241 ## egg:rhodecode-enterprise-ce#headers
241 ## egg:rhodecode-enterprise-ce#headers
242 ## egg:rhodecode-enterprise-ce#crowd
242 ## egg:rhodecode-enterprise-ce#crowd
243 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
243 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
244
244
245 ## alternative return HTTP header for failed authentication. Default HTTP
245 ## alternative return HTTP header for failed authentication. Default HTTP
246 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
246 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
247 ## handling that causing a series of failed authentication calls.
247 ## handling that causing a series of failed authentication calls.
248 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
248 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
249 ## This will be served instead of default 401 on bad authnetication
249 ## This will be served instead of default 401 on bad authnetication
250 auth_ret_code =
250 auth_ret_code =
251
251
252 ## use special detection method when serving auth_ret_code, instead of serving
252 ## use special detection method when serving auth_ret_code, instead of serving
253 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
253 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
254 ## and then serve auth_ret_code to clients
254 ## and then serve auth_ret_code to clients
255 auth_ret_code_detection = false
255 auth_ret_code_detection = false
256
256
257 ## locking return code. When repository is locked return this HTTP code. 2XX
257 ## locking return code. When repository is locked return this HTTP code. 2XX
258 ## codes don't break the transactions while 4XX codes do
258 ## codes don't break the transactions while 4XX codes do
259 lock_ret_code = 423
259 lock_ret_code = 423
260
260
261 ## allows to change the repository location in settings page
261 ## allows to change the repository location in settings page
262 allow_repo_location_change = true
262 allow_repo_location_change = true
263
263
264 ## allows to setup custom hooks in settings page
264 ## allows to setup custom hooks in settings page
265 allow_custom_hooks_settings = true
265 allow_custom_hooks_settings = true
266
266
267 ## generated license token, goto license page in RhodeCode settings to obtain
267 ## generated license token, goto license page in RhodeCode settings to obtain
268 ## new token
268 ## new token
269 license_token =
269 license_token =
270
270
271 ## supervisor connection uri, for managing supervisor and logs.
271 ## supervisor connection uri, for managing supervisor and logs.
272 supervisor.uri =
272 supervisor.uri =
273 ## supervisord group name/id we only want this RC instance to handle
273 ## supervisord group name/id we only want this RC instance to handle
274 supervisor.group_id = dev
274 supervisor.group_id = dev
275
275
276 ## Display extended labs settings
276 ## Display extended labs settings
277 labs_settings_active = true
277 labs_settings_active = true
278
278
279 ####################################
279 ####################################
280 ### CELERY CONFIG ####
280 ### CELERY CONFIG ####
281 ####################################
281 ####################################
282 use_celery = false
282 use_celery = false
283 broker.host = localhost
283 broker.host = localhost
284 broker.vhost = rabbitmqhost
284 broker.vhost = rabbitmqhost
285 broker.port = 5672
285 broker.port = 5672
286 broker.user = rabbitmq
286 broker.user = rabbitmq
287 broker.password = qweqwe
287 broker.password = qweqwe
288
288
289 celery.imports = rhodecode.lib.celerylib.tasks
289 celery.imports = rhodecode.lib.celerylib.tasks
290
290
291 celery.result.backend = amqp
291 celery.result.backend = amqp
292 celery.result.dburi = amqp://
292 celery.result.dburi = amqp://
293 celery.result.serialier = json
293 celery.result.serialier = json
294
294
295 #celery.send.task.error.emails = true
295 #celery.send.task.error.emails = true
296 #celery.amqp.task.result.expires = 18000
296 #celery.amqp.task.result.expires = 18000
297
297
298 celeryd.concurrency = 2
298 celeryd.concurrency = 2
299 #celeryd.log.file = celeryd.log
299 #celeryd.log.file = celeryd.log
300 celeryd.log.level = debug
300 celeryd.log.level = debug
301 celeryd.max.tasks.per.child = 1
301 celeryd.max.tasks.per.child = 1
302
302
303 ## tasks will never be sent to the queue, but executed locally instead.
303 ## tasks will never be sent to the queue, but executed locally instead.
304 celery.always.eager = false
304 celery.always.eager = false
305
305
306 ####################################
306 ####################################
307 ### BEAKER CACHE ####
307 ### BEAKER CACHE ####
308 ####################################
308 ####################################
309 # default cache dir for templates. Putting this into a ramdisk
309 # default cache dir for templates. Putting this into a ramdisk
310 ## can boost performance, eg. %(here)s/data_ramdisk
310 ## can boost performance, eg. %(here)s/data_ramdisk
311 cache_dir = %(here)s/data
311 cache_dir = %(here)s/data
312
312
313 ## locking and default file storage for Beaker. Putting this into a ramdisk
313 ## locking and default file storage for Beaker. Putting this into a ramdisk
314 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
314 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
315 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
315 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
316 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
316 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
317
317
318 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
318 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
319
319
320 beaker.cache.super_short_term.type = memory
320 beaker.cache.super_short_term.type = memory
321 beaker.cache.super_short_term.expire = 10
321 beaker.cache.super_short_term.expire = 10
322 beaker.cache.super_short_term.key_length = 256
322 beaker.cache.super_short_term.key_length = 256
323
323
324 beaker.cache.short_term.type = memory
324 beaker.cache.short_term.type = memory
325 beaker.cache.short_term.expire = 60
325 beaker.cache.short_term.expire = 60
326 beaker.cache.short_term.key_length = 256
326 beaker.cache.short_term.key_length = 256
327
327
328 beaker.cache.long_term.type = memory
328 beaker.cache.long_term.type = memory
329 beaker.cache.long_term.expire = 36000
329 beaker.cache.long_term.expire = 36000
330 beaker.cache.long_term.key_length = 256
330 beaker.cache.long_term.key_length = 256
331
331
332 beaker.cache.sql_cache_short.type = memory
332 beaker.cache.sql_cache_short.type = memory
333 beaker.cache.sql_cache_short.expire = 10
333 beaker.cache.sql_cache_short.expire = 10
334 beaker.cache.sql_cache_short.key_length = 256
334 beaker.cache.sql_cache_short.key_length = 256
335
335
336 ## default is memory cache, configure only if required
336 ## default is memory cache, configure only if required
337 ## using multi-node or multi-worker setup
337 ## using multi-node or multi-worker setup
338 #beaker.cache.auth_plugins.type = ext:database
338 #beaker.cache.auth_plugins.type = ext:database
339 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
339 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
340 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
340 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
341 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
341 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
342 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
342 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
343 #beaker.cache.auth_plugins.sa.pool_size = 10
343 #beaker.cache.auth_plugins.sa.pool_size = 10
344 #beaker.cache.auth_plugins.sa.max_overflow = 0
344 #beaker.cache.auth_plugins.sa.max_overflow = 0
345
345
346 beaker.cache.repo_cache_long.type = memorylru_base
346 beaker.cache.repo_cache_long.type = memorylru_base
347 beaker.cache.repo_cache_long.max_items = 4096
347 beaker.cache.repo_cache_long.max_items = 4096
348 beaker.cache.repo_cache_long.expire = 2592000
348 beaker.cache.repo_cache_long.expire = 2592000
349
349
350 ## default is memorylru_base cache, configure only if required
350 ## default is memorylru_base cache, configure only if required
351 ## using multi-node or multi-worker setup
351 ## using multi-node or multi-worker setup
352 #beaker.cache.repo_cache_long.type = ext:memcached
352 #beaker.cache.repo_cache_long.type = ext:memcached
353 #beaker.cache.repo_cache_long.url = localhost:11211
353 #beaker.cache.repo_cache_long.url = localhost:11211
354 #beaker.cache.repo_cache_long.expire = 1209600
354 #beaker.cache.repo_cache_long.expire = 1209600
355 #beaker.cache.repo_cache_long.key_length = 256
355 #beaker.cache.repo_cache_long.key_length = 256
356
356
357 ####################################
357 ####################################
358 ### BEAKER SESSION ####
358 ### BEAKER SESSION ####
359 ####################################
359 ####################################
360
360
361 ## .session.type is type of storage options for the session, current allowed
361 ## .session.type is type of storage options for the session, current allowed
362 ## types are file, ext:memcached, ext:database, and memory (default).
362 ## types are file, ext:memcached, ext:database, and memory (default).
363 beaker.session.type = file
363 beaker.session.type = file
364 beaker.session.data_dir = %(here)s/data/sessions/data
364 beaker.session.data_dir = %(here)s/data/sessions/data
365
365
366 ## db based session, fast, and allows easy management over logged in users
366 ## db based session, fast, and allows easy management over logged in users
367 #beaker.session.type = ext:database
367 #beaker.session.type = ext:database
368 #beaker.session.table_name = db_session
368 #beaker.session.table_name = db_session
369 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
369 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
370 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
370 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
371 #beaker.session.sa.pool_recycle = 3600
371 #beaker.session.sa.pool_recycle = 3600
372 #beaker.session.sa.echo = false
372 #beaker.session.sa.echo = false
373
373
374 beaker.session.key = rhodecode
374 beaker.session.key = rhodecode
375 beaker.session.secret = develop-rc-uytcxaz
375 beaker.session.secret = develop-rc-uytcxaz
376 beaker.session.lock_dir = %(here)s/data/sessions/lock
376 beaker.session.lock_dir = %(here)s/data/sessions/lock
377
377
378 ## Secure encrypted cookie. Requires AES and AES python libraries
378 ## Secure encrypted cookie. Requires AES and AES python libraries
379 ## you must disable beaker.session.secret to use this
379 ## you must disable beaker.session.secret to use this
380 #beaker.session.encrypt_key = <key_for_encryption>
380 #beaker.session.encrypt_key = <key_for_encryption>
381 #beaker.session.validate_key = <validation_key>
381 #beaker.session.validate_key = <validation_key>
382
382
383 ## sets session as invalid(also logging out user) if it haven not been
383 ## sets session as invalid(also logging out user) if it haven not been
384 ## accessed for given amount of time in seconds
384 ## accessed for given amount of time in seconds
385 beaker.session.timeout = 2592000
385 beaker.session.timeout = 2592000
386 beaker.session.httponly = true
386 beaker.session.httponly = true
387 ## Path to use for the cookie.
387 ## Path to use for the cookie.
388 #beaker.session.cookie_path = /<your-prefix>
388 #beaker.session.cookie_path = /<your-prefix>
389
389
390 ## uncomment for https secure cookie
390 ## uncomment for https secure cookie
391 beaker.session.secure = false
391 beaker.session.secure = false
392
392
393 ## auto save the session to not to use .save()
393 ## auto save the session to not to use .save()
394 beaker.session.auto = false
394 beaker.session.auto = false
395
395
396 ## default cookie expiration time in seconds, set to `true` to set expire
396 ## default cookie expiration time in seconds, set to `true` to set expire
397 ## at browser close
397 ## at browser close
398 #beaker.session.cookie_expires = 3600
398 #beaker.session.cookie_expires = 3600
399
399
400 ###################################
400 ###################################
401 ## SEARCH INDEXING CONFIGURATION ##
401 ## SEARCH INDEXING CONFIGURATION ##
402 ###################################
402 ###################################
403 ## Full text search indexer is available in rhodecode-tools under
403 ## Full text search indexer is available in rhodecode-tools under
404 ## `rhodecode-tools index` command
404 ## `rhodecode-tools index` command
405
405
406 # WHOOSH Backend, doesn't require additional services to run
406 # WHOOSH Backend, doesn't require additional services to run
407 # it works good with few dozen repos
407 # it works good with few dozen repos
408 search.module = rhodecode.lib.index.whoosh
408 search.module = rhodecode.lib.index.whoosh
409 search.location = %(here)s/data/index
409 search.location = %(here)s/data/index
410
410
411 ########################################
411 ########################################
412 ### CHANNELSTREAM CONFIG ####
412 ### CHANNELSTREAM CONFIG ####
413 ########################################
413 ########################################
414 ## channelstream enables persistent connections and live notification
414 ## channelstream enables persistent connections and live notification
415 ## in the system. It's also used by the chat system
415 ## in the system. It's also used by the chat system
416
416
417 channelstream.enabled = true
417 channelstream.enabled = false
418 ## location of channelstream server on the backend
418 ## location of channelstream server on the backend
419 channelstream.server = 127.0.0.1:9800
419 channelstream.server = 127.0.0.1:9800
420 ## location of the channelstream server from outside world
420 ## location of the channelstream server from outside world
421 ## most likely this would be an http server special backend URL, that handles
421 ## most likely this would be an http server special backend URL, that handles
422 ## websocket connections see nginx example for config
422 ## websocket connections see nginx example for config
423 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
423 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
424 channelstream.secret = secret
424 channelstream.secret = secret
425 channelstream.history.location = %(here)s/channelstream_history
425 channelstream.history.location = %(here)s/channelstream_history
426
426
427
427
428 ###################################
428 ###################################
429 ## APPENLIGHT CONFIG ##
429 ## APPENLIGHT CONFIG ##
430 ###################################
430 ###################################
431
431
432 ## Appenlight is tailored to work with RhodeCode, see
432 ## Appenlight is tailored to work with RhodeCode, see
433 ## http://appenlight.com for details how to obtain an account
433 ## http://appenlight.com for details how to obtain an account
434
434
435 ## appenlight integration enabled
435 ## appenlight integration enabled
436 appenlight = false
436 appenlight = false
437
437
438 appenlight.server_url = https://api.appenlight.com
438 appenlight.server_url = https://api.appenlight.com
439 appenlight.api_key = YOUR_API_KEY
439 appenlight.api_key = YOUR_API_KEY
440 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
440 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
441
441
442 # used for JS client
442 # used for JS client
443 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
443 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
444
444
445 ## TWEAK AMOUNT OF INFO SENT HERE
445 ## TWEAK AMOUNT OF INFO SENT HERE
446
446
447 ## enables 404 error logging (default False)
447 ## enables 404 error logging (default False)
448 appenlight.report_404 = false
448 appenlight.report_404 = false
449
449
450 ## time in seconds after request is considered being slow (default 1)
450 ## time in seconds after request is considered being slow (default 1)
451 appenlight.slow_request_time = 1
451 appenlight.slow_request_time = 1
452
452
453 ## record slow requests in application
453 ## record slow requests in application
454 ## (needs to be enabled for slow datastore recording and time tracking)
454 ## (needs to be enabled for slow datastore recording and time tracking)
455 appenlight.slow_requests = true
455 appenlight.slow_requests = true
456
456
457 ## enable hooking to application loggers
457 ## enable hooking to application loggers
458 appenlight.logging = true
458 appenlight.logging = true
459
459
460 ## minimum log level for log capture
460 ## minimum log level for log capture
461 appenlight.logging.level = WARNING
461 appenlight.logging.level = WARNING
462
462
463 ## send logs only from erroneous/slow requests
463 ## send logs only from erroneous/slow requests
464 ## (saves API quota for intensive logging)
464 ## (saves API quota for intensive logging)
465 appenlight.logging_on_error = false
465 appenlight.logging_on_error = false
466
466
467 ## list of additonal keywords that should be grabbed from environ object
467 ## list of additonal keywords that should be grabbed from environ object
468 ## can be string with comma separated list of words in lowercase
468 ## can be string with comma separated list of words in lowercase
469 ## (by default client will always send following info:
469 ## (by default client will always send following info:
470 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
470 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
471 ## start with HTTP* this list be extended with additional keywords here
471 ## start with HTTP* this list be extended with additional keywords here
472 appenlight.environ_keys_whitelist =
472 appenlight.environ_keys_whitelist =
473
473
474 ## list of keywords that should be blanked from request object
474 ## list of keywords that should be blanked from request object
475 ## can be string with comma separated list of words in lowercase
475 ## can be string with comma separated list of words in lowercase
476 ## (by default client will always blank keys that contain following words
476 ## (by default client will always blank keys that contain following words
477 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
477 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
478 ## this list be extended with additional keywords set here
478 ## this list be extended with additional keywords set here
479 appenlight.request_keys_blacklist =
479 appenlight.request_keys_blacklist =
480
480
481 ## list of namespaces that should be ignores when gathering log entries
481 ## list of namespaces that should be ignores when gathering log entries
482 ## can be string with comma separated list of namespaces
482 ## can be string with comma separated list of namespaces
483 ## (by default the client ignores own entries: appenlight_client.client)
483 ## (by default the client ignores own entries: appenlight_client.client)
484 appenlight.log_namespace_blacklist =
484 appenlight.log_namespace_blacklist =
485
485
486
486
487 ################################################################################
487 ################################################################################
488 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
488 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
489 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
489 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
490 ## execute malicious code after an exception is raised. ##
490 ## execute malicious code after an exception is raised. ##
491 ################################################################################
491 ################################################################################
492 #set debug = false
492 #set debug = false
493
493
494
494
495 ##############
495 ##############
496 ## STYLING ##
496 ## STYLING ##
497 ##############
497 ##############
498 debug_style = true
498 debug_style = true
499
499
500 #########################################################
500 #########################################################
501 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
501 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
502 #########################################################
502 #########################################################
503 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
503 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
504 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
504 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
505 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
505 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
506 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
506 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
507
507
508 # see sqlalchemy docs for other advanced settings
508 # see sqlalchemy docs for other advanced settings
509
509
510 ## print the sql statements to output
510 ## print the sql statements to output
511 sqlalchemy.db1.echo = false
511 sqlalchemy.db1.echo = false
512 ## recycle the connections after this ammount of seconds
512 ## recycle the connections after this ammount of seconds
513 sqlalchemy.db1.pool_recycle = 3600
513 sqlalchemy.db1.pool_recycle = 3600
514 sqlalchemy.db1.convert_unicode = true
514 sqlalchemy.db1.convert_unicode = true
515
515
516 ## the number of connections to keep open inside the connection pool.
516 ## the number of connections to keep open inside the connection pool.
517 ## 0 indicates no limit
517 ## 0 indicates no limit
518 #sqlalchemy.db1.pool_size = 5
518 #sqlalchemy.db1.pool_size = 5
519
519
520 ## the number of connections to allow in connection pool "overflow", that is
520 ## the number of connections to allow in connection pool "overflow", that is
521 ## connections that can be opened above and beyond the pool_size setting,
521 ## connections that can be opened above and beyond the pool_size setting,
522 ## which defaults to five.
522 ## which defaults to five.
523 #sqlalchemy.db1.max_overflow = 10
523 #sqlalchemy.db1.max_overflow = 10
524
524
525
525
526 ##################
526 ##################
527 ### VCS CONFIG ###
527 ### VCS CONFIG ###
528 ##################
528 ##################
529 vcs.server.enable = true
529 vcs.server.enable = true
530 vcs.server = localhost:9900
530 vcs.server = localhost:9900
531
531
532 ## Web server connectivity protocol, responsible for web based VCS operatations
532 ## Web server connectivity protocol, responsible for web based VCS operatations
533 ## Available protocols are:
533 ## Available protocols are:
534 ## `pyro4` - using pyro4 server
534 ## `pyro4` - using pyro4 server
535 ## `http` - using http-rpc backend
535 ## `http` - using http-rpc backend
536 vcs.server.protocol = http
536 vcs.server.protocol = http
537
537
538 ## Push/Pull operations protocol, available options are:
538 ## Push/Pull operations protocol, available options are:
539 ## `pyro4` - using pyro4 server
539 ## `pyro4` - using pyro4 server
540 ## `rhodecode.lib.middleware.utils.scm_app_http` - Http based, recommended
540 ## `rhodecode.lib.middleware.utils.scm_app_http` - Http based, recommended
541 ## `vcsserver.scm_app` - internal app (EE only)
541 ## `vcsserver.scm_app` - internal app (EE only)
542 vcs.scm_app_implementation = rhodecode.lib.middleware.utils.scm_app_http
542 vcs.scm_app_implementation = rhodecode.lib.middleware.utils.scm_app_http
543
543
544 ## Push/Pull operations hooks protocol, available options are:
544 ## Push/Pull operations hooks protocol, available options are:
545 ## `pyro4` - using pyro4 server
545 ## `pyro4` - using pyro4 server
546 ## `http` - using http-rpc backend
546 ## `http` - using http-rpc backend
547 vcs.hooks.protocol = http
547 vcs.hooks.protocol = http
548
548
549 vcs.server.log_level = debug
549 vcs.server.log_level = debug
550 ## Start VCSServer with this instance as a subprocess, usefull for development
550 ## Start VCSServer with this instance as a subprocess, usefull for development
551 vcs.start_server = true
551 vcs.start_server = true
552
552
553 ## List of enabled VCS backends, available options are:
553 ## List of enabled VCS backends, available options are:
554 ## `hg` - mercurial
554 ## `hg` - mercurial
555 ## `git` - git
555 ## `git` - git
556 ## `svn` - subversion
556 ## `svn` - subversion
557 vcs.backends = hg, git, svn
557 vcs.backends = hg, git, svn
558
558
559 vcs.connection_timeout = 3600
559 vcs.connection_timeout = 3600
560 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
560 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
561 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
561 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
562 #vcs.svn.compatible_version = pre-1.8-compatible
562 #vcs.svn.compatible_version = pre-1.8-compatible
563
563
564
564
565 ############################################################
565 ############################################################
566 ### Subversion proxy support (mod_dav_svn) ###
566 ### Subversion proxy support (mod_dav_svn) ###
567 ### Maps RhodeCode repo groups into SVN paths for Apache ###
567 ### Maps RhodeCode repo groups into SVN paths for Apache ###
568 ############################################################
568 ############################################################
569 ## Enable or disable the config file generation.
569 ## Enable or disable the config file generation.
570 svn.proxy.generate_config = false
570 svn.proxy.generate_config = false
571 ## Generate config file with `SVNListParentPath` set to `On`.
571 ## Generate config file with `SVNListParentPath` set to `On`.
572 svn.proxy.list_parent_path = true
572 svn.proxy.list_parent_path = true
573 ## Set location and file name of generated config file.
573 ## Set location and file name of generated config file.
574 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
574 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
575 ## File system path to the directory containing the repositories served by
575 ## File system path to the directory containing the repositories served by
576 ## RhodeCode.
576 ## RhodeCode.
577 svn.proxy.parent_path_root = /path/to/repo_store
577 svn.proxy.parent_path_root = /path/to/repo_store
578 ## Used as a prefix to the <Location> block in the generated config file. In
578 ## Used as a prefix to the <Location> block in the generated config file. In
579 ## most cases it should be set to `/`.
579 ## most cases it should be set to `/`.
580 svn.proxy.location_root = /
580 svn.proxy.location_root = /
581
581
582
582
583 ################################
583 ################################
584 ### LOGGING CONFIGURATION ####
584 ### LOGGING CONFIGURATION ####
585 ################################
585 ################################
586 [loggers]
586 [loggers]
587 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
587 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
588
588
589 [handlers]
589 [handlers]
590 keys = console, console_sql
590 keys = console, console_sql
591
591
592 [formatters]
592 [formatters]
593 keys = generic, color_formatter, color_formatter_sql
593 keys = generic, color_formatter, color_formatter_sql
594
594
595 #############
595 #############
596 ## LOGGERS ##
596 ## LOGGERS ##
597 #############
597 #############
598 [logger_root]
598 [logger_root]
599 level = NOTSET
599 level = NOTSET
600 handlers = console
600 handlers = console
601
601
602 [logger_routes]
602 [logger_routes]
603 level = DEBUG
603 level = DEBUG
604 handlers =
604 handlers =
605 qualname = routes.middleware
605 qualname = routes.middleware
606 ## "level = DEBUG" logs the route matched and routing variables.
606 ## "level = DEBUG" logs the route matched and routing variables.
607 propagate = 1
607 propagate = 1
608
608
609 [logger_beaker]
609 [logger_beaker]
610 level = DEBUG
610 level = DEBUG
611 handlers =
611 handlers =
612 qualname = beaker.container
612 qualname = beaker.container
613 propagate = 1
613 propagate = 1
614
614
615 [logger_pyro4]
615 [logger_pyro4]
616 level = DEBUG
616 level = DEBUG
617 handlers =
617 handlers =
618 qualname = Pyro4
618 qualname = Pyro4
619 propagate = 1
619 propagate = 1
620
620
621 [logger_templates]
621 [logger_templates]
622 level = INFO
622 level = INFO
623 handlers =
623 handlers =
624 qualname = pylons.templating
624 qualname = pylons.templating
625 propagate = 1
625 propagate = 1
626
626
627 [logger_rhodecode]
627 [logger_rhodecode]
628 level = DEBUG
628 level = DEBUG
629 handlers =
629 handlers =
630 qualname = rhodecode
630 qualname = rhodecode
631 propagate = 1
631 propagate = 1
632
632
633 [logger_sqlalchemy]
633 [logger_sqlalchemy]
634 level = INFO
634 level = INFO
635 handlers = console_sql
635 handlers = console_sql
636 qualname = sqlalchemy.engine
636 qualname = sqlalchemy.engine
637 propagate = 0
637 propagate = 0
638
638
639 ##############
639 ##############
640 ## HANDLERS ##
640 ## HANDLERS ##
641 ##############
641 ##############
642
642
643 [handler_console]
643 [handler_console]
644 class = StreamHandler
644 class = StreamHandler
645 args = (sys.stderr,)
645 args = (sys.stderr,)
646 level = DEBUG
646 level = DEBUG
647 formatter = color_formatter
647 formatter = color_formatter
648
648
649 [handler_console_sql]
649 [handler_console_sql]
650 class = StreamHandler
650 class = StreamHandler
651 args = (sys.stderr,)
651 args = (sys.stderr,)
652 level = DEBUG
652 level = DEBUG
653 formatter = color_formatter_sql
653 formatter = color_formatter_sql
654
654
655 ################
655 ################
656 ## FORMATTERS ##
656 ## FORMATTERS ##
657 ################
657 ################
658
658
659 [formatter_generic]
659 [formatter_generic]
660 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
660 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
661 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
661 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
662 datefmt = %Y-%m-%d %H:%M:%S
662 datefmt = %Y-%m-%d %H:%M:%S
663
663
664 [formatter_color_formatter]
664 [formatter_color_formatter]
665 class = rhodecode.lib.logging_formatter.ColorFormatter
665 class = rhodecode.lib.logging_formatter.ColorFormatter
666 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
666 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
667 datefmt = %Y-%m-%d %H:%M:%S
667 datefmt = %Y-%m-%d %H:%M:%S
668
668
669 [formatter_color_formatter_sql]
669 [formatter_color_formatter_sql]
670 class = rhodecode.lib.logging_formatter.ColorFormatterSql
670 class = rhodecode.lib.logging_formatter.ColorFormatterSql
671 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
671 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
672 datefmt = %Y-%m-%d %H:%M:%S
672 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,641 +1,641 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE ENTERPRISE CONFIGURATION ##
4 ## RHODECODE ENTERPRISE CONFIGURATION ##
5 # The %(here)s variable will be replaced with the parent directory of this file#
5 # The %(here)s variable will be replaced with the parent directory of this file#
6 ################################################################################
6 ################################################################################
7
7
8 [DEFAULT]
8 [DEFAULT]
9 debug = true
9 debug = true
10
10
11 ################################################################################
11 ################################################################################
12 ## EMAIL CONFIGURATION ##
12 ## EMAIL CONFIGURATION ##
13 ## Uncomment and replace with the email address which should receive ##
13 ## Uncomment and replace with the email address which should receive ##
14 ## any error reports after an application crash ##
14 ## any error reports after an application crash ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 ################################################################################
16 ################################################################################
17
17
18 ## prefix all emails subjects with given prefix, helps filtering out emails
18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 #email_prefix = [RhodeCode]
19 #email_prefix = [RhodeCode]
20
20
21 ## email FROM address all mails will be sent
21 ## email FROM address all mails will be sent
22 #app_email_from = rhodecode-noreply@localhost
22 #app_email_from = rhodecode-noreply@localhost
23
23
24 ## Uncomment and replace with the address which should receive any error report
24 ## Uncomment and replace with the address which should receive any error report
25 ## note: using appenlight for error handling doesn't need this to be uncommented
25 ## note: using appenlight for error handling doesn't need this to be uncommented
26 #email_to = admin@localhost
26 #email_to = admin@localhost
27
27
28 ## in case of Application errors, sent an error email form
28 ## in case of Application errors, sent an error email form
29 #error_email_from = rhodecode_error@localhost
29 #error_email_from = rhodecode_error@localhost
30
30
31 ## additional error message to be send in case of server crash
31 ## additional error message to be send in case of server crash
32 #error_message =
32 #error_message =
33
33
34
34
35 #smtp_server = mail.server.com
35 #smtp_server = mail.server.com
36 #smtp_username =
36 #smtp_username =
37 #smtp_password =
37 #smtp_password =
38 #smtp_port =
38 #smtp_port =
39 #smtp_use_tls = false
39 #smtp_use_tls = false
40 #smtp_use_ssl = true
40 #smtp_use_ssl = true
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
42 #smtp_auth =
42 #smtp_auth =
43
43
44 [server:main]
44 [server:main]
45 ## COMMON ##
45 ## COMMON ##
46 host = 127.0.0.1
46 host = 127.0.0.1
47 port = 5000
47 port = 5000
48
48
49 ##################################
49 ##################################
50 ## WAITRESS WSGI SERVER ##
50 ## WAITRESS WSGI SERVER ##
51 ## Recommended for Development ##
51 ## Recommended for Development ##
52 ##################################
52 ##################################
53
53
54 #use = egg:waitress#main
54 #use = egg:waitress#main
55 ## number of worker threads
55 ## number of worker threads
56 #threads = 5
56 #threads = 5
57 ## MAX BODY SIZE 100GB
57 ## MAX BODY SIZE 100GB
58 #max_request_body_size = 107374182400
58 #max_request_body_size = 107374182400
59 ## Use poll instead of select, fixes file descriptors limits problems.
59 ## Use poll instead of select, fixes file descriptors limits problems.
60 ## May not work on old windows systems.
60 ## May not work on old windows systems.
61 #asyncore_use_poll = true
61 #asyncore_use_poll = true
62
62
63
63
64 ##########################
64 ##########################
65 ## GUNICORN WSGI SERVER ##
65 ## GUNICORN WSGI SERVER ##
66 ##########################
66 ##########################
67 ## run with gunicorn --log-config <inifile.ini> --paste <inifile.ini>
67 ## run with gunicorn --log-config <inifile.ini> --paste <inifile.ini>
68
68
69 use = egg:gunicorn#main
69 use = egg:gunicorn#main
70 ## Sets the number of process workers. You must set `instance_id = *`
70 ## Sets the number of process workers. You must set `instance_id = *`
71 ## when this option is set to more than one worker, recommended
71 ## when this option is set to more than one worker, recommended
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
73 ## The `instance_id = *` must be set in the [app:main] section below
73 ## The `instance_id = *` must be set in the [app:main] section below
74 workers = 2
74 workers = 2
75 ## number of threads for each of the worker, must be set to 1 for gevent
75 ## number of threads for each of the worker, must be set to 1 for gevent
76 ## generally recommened to be at 1
76 ## generally recommened to be at 1
77 #threads = 1
77 #threads = 1
78 ## process name
78 ## process name
79 proc_name = rhodecode
79 proc_name = rhodecode
80 ## type of worker class, one of sync, gevent
80 ## type of worker class, one of sync, gevent
81 ## recommended for bigger setup is using of of other than sync one
81 ## recommended for bigger setup is using of of other than sync one
82 worker_class = sync
82 worker_class = sync
83 ## The maximum number of simultaneous clients. Valid only for Gevent
83 ## The maximum number of simultaneous clients. Valid only for Gevent
84 #worker_connections = 10
84 #worker_connections = 10
85 ## max number of requests that worker will handle before being gracefully
85 ## max number of requests that worker will handle before being gracefully
86 ## restarted, could prevent memory leaks
86 ## restarted, could prevent memory leaks
87 max_requests = 1000
87 max_requests = 1000
88 max_requests_jitter = 30
88 max_requests_jitter = 30
89 ## amount of time a worker can spend with handling a request before it
89 ## amount of time a worker can spend with handling a request before it
90 ## gets killed and restarted. Set to 6hrs
90 ## gets killed and restarted. Set to 6hrs
91 timeout = 21600
91 timeout = 21600
92
92
93
93
94 ## prefix middleware for RhodeCode, disables force_https flag.
94 ## prefix middleware for RhodeCode, disables force_https flag.
95 ## recommended when using proxy setup.
95 ## recommended when using proxy setup.
96 ## allows to set RhodeCode under a prefix in server.
96 ## allows to set RhodeCode under a prefix in server.
97 ## eg https://server.com/<prefix>. Enable `filter-with =` option below as well.
97 ## eg https://server.com/<prefix>. Enable `filter-with =` option below as well.
98 ## optionally set prefix like: `prefix = /<your-prefix>`
98 ## optionally set prefix like: `prefix = /<your-prefix>`
99 [filter:proxy-prefix]
99 [filter:proxy-prefix]
100 use = egg:PasteDeploy#prefix
100 use = egg:PasteDeploy#prefix
101 prefix = /
101 prefix = /
102
102
103 [app:main]
103 [app:main]
104 use = egg:rhodecode-enterprise-ce
104 use = egg:rhodecode-enterprise-ce
105
105
106 ## enable proxy prefix middleware, defined above
106 ## enable proxy prefix middleware, defined above
107 #filter-with = proxy-prefix
107 #filter-with = proxy-prefix
108
108
109 ## encryption key used to encrypt social plugin tokens,
109 ## encryption key used to encrypt social plugin tokens,
110 ## remote_urls with credentials etc, if not set it defaults to
110 ## remote_urls with credentials etc, if not set it defaults to
111 ## `beaker.session.secret`
111 ## `beaker.session.secret`
112 #rhodecode.encrypted_values.secret =
112 #rhodecode.encrypted_values.secret =
113
113
114 ## decryption strict mode (enabled by default). It controls if decryption raises
114 ## decryption strict mode (enabled by default). It controls if decryption raises
115 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
115 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
116 #rhodecode.encrypted_values.strict = false
116 #rhodecode.encrypted_values.strict = false
117
117
118 ## return gzipped responses from Rhodecode (static files/application)
118 ## return gzipped responses from Rhodecode (static files/application)
119 gzip_responses = false
119 gzip_responses = false
120
120
121 ## autogenerate javascript routes file on startup
121 ## autogenerate javascript routes file on startup
122 generate_js_files = false
122 generate_js_files = false
123
123
124 ## Optional Languages
124 ## Optional Languages
125 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
125 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
126 lang = en
126 lang = en
127
127
128 ## perform a full repository scan on each server start, this should be
128 ## perform a full repository scan on each server start, this should be
129 ## set to false after first startup, to allow faster server restarts.
129 ## set to false after first startup, to allow faster server restarts.
130 startup.import_repos = false
130 startup.import_repos = false
131
131
132 ## Uncomment and set this path to use archive download cache.
132 ## Uncomment and set this path to use archive download cache.
133 ## Once enabled, generated archives will be cached at this location
133 ## Once enabled, generated archives will be cached at this location
134 ## and served from the cache during subsequent requests for the same archive of
134 ## and served from the cache during subsequent requests for the same archive of
135 ## the repository.
135 ## the repository.
136 #archive_cache_dir = /tmp/tarballcache
136 #archive_cache_dir = /tmp/tarballcache
137
137
138 ## change this to unique ID for security
138 ## change this to unique ID for security
139 app_instance_uuid = rc-production
139 app_instance_uuid = rc-production
140
140
141 ## cut off limit for large diffs (size in bytes)
141 ## cut off limit for large diffs (size in bytes)
142 cut_off_limit_diff = 1024000
142 cut_off_limit_diff = 1024000
143 cut_off_limit_file = 256000
143 cut_off_limit_file = 256000
144
144
145 ## use cache version of scm repo everywhere
145 ## use cache version of scm repo everywhere
146 vcs_full_cache = true
146 vcs_full_cache = true
147
147
148 ## force https in RhodeCode, fixes https redirects, assumes it's always https
148 ## force https in RhodeCode, fixes https redirects, assumes it's always https
149 ## Normally this is controlled by proper http flags sent from http server
149 ## Normally this is controlled by proper http flags sent from http server
150 force_https = false
150 force_https = false
151
151
152 ## use Strict-Transport-Security headers
152 ## use Strict-Transport-Security headers
153 use_htsts = false
153 use_htsts = false
154
154
155 ## number of commits stats will parse on each iteration
155 ## number of commits stats will parse on each iteration
156 commit_parse_limit = 25
156 commit_parse_limit = 25
157
157
158 ## git rev filter option, --all is the default filter, if you need to
158 ## git rev filter option, --all is the default filter, if you need to
159 ## hide all refs in changelog switch this to --branches --tags
159 ## hide all refs in changelog switch this to --branches --tags
160 git_rev_filter = --branches --tags
160 git_rev_filter = --branches --tags
161
161
162 # Set to true if your repos are exposed using the dumb protocol
162 # Set to true if your repos are exposed using the dumb protocol
163 git_update_server_info = false
163 git_update_server_info = false
164
164
165 ## RSS/ATOM feed options
165 ## RSS/ATOM feed options
166 rss_cut_off_limit = 256000
166 rss_cut_off_limit = 256000
167 rss_items_per_page = 10
167 rss_items_per_page = 10
168 rss_include_diff = false
168 rss_include_diff = false
169
169
170 ## gist URL alias, used to create nicer urls for gist. This should be an
170 ## gist URL alias, used to create nicer urls for gist. This should be an
171 ## url that does rewrites to _admin/gists/<gistid>.
171 ## url that does rewrites to _admin/gists/<gistid>.
172 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
172 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
173 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
173 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
174 gist_alias_url =
174 gist_alias_url =
175
175
176 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
176 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
177 ## used for access.
177 ## used for access.
178 ## Adding ?auth_token = <token> to the url authenticates this request as if it
178 ## Adding ?auth_token = <token> to the url authenticates this request as if it
179 ## came from the the logged in user who own this authentication token.
179 ## came from the the logged in user who own this authentication token.
180 ##
180 ##
181 ## Syntax is <ControllerClass>:<function_pattern>.
181 ## Syntax is <ControllerClass>:<function_pattern>.
182 ## To enable access to raw_files put `FilesController:raw`.
182 ## To enable access to raw_files put `FilesController:raw`.
183 ## To enable access to patches add `ChangesetController:changeset_patch`.
183 ## To enable access to patches add `ChangesetController:changeset_patch`.
184 ## The list should be "," separated and on a single line.
184 ## The list should be "," separated and on a single line.
185 ##
185 ##
186 ## Recommended controllers to enable:
186 ## Recommended controllers to enable:
187 # ChangesetController:changeset_patch,
187 # ChangesetController:changeset_patch,
188 # ChangesetController:changeset_raw,
188 # ChangesetController:changeset_raw,
189 # FilesController:raw,
189 # FilesController:raw,
190 # FilesController:archivefile,
190 # FilesController:archivefile,
191 # GistsController:*,
191 # GistsController:*,
192 api_access_controllers_whitelist =
192 api_access_controllers_whitelist =
193
193
194 ## default encoding used to convert from and to unicode
194 ## default encoding used to convert from and to unicode
195 ## can be also a comma separated list of encoding in case of mixed encodings
195 ## can be also a comma separated list of encoding in case of mixed encodings
196 default_encoding = UTF-8
196 default_encoding = UTF-8
197
197
198 ## instance-id prefix
198 ## instance-id prefix
199 ## a prefix key for this instance used for cache invalidation when running
199 ## a prefix key for this instance used for cache invalidation when running
200 ## multiple instances of rhodecode, make sure it's globally unique for
200 ## multiple instances of rhodecode, make sure it's globally unique for
201 ## all running rhodecode instances. Leave empty if you don't use it
201 ## all running rhodecode instances. Leave empty if you don't use it
202 instance_id =
202 instance_id =
203
203
204 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
204 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
205 ## of an authentication plugin also if it is disabled by it's settings.
205 ## of an authentication plugin also if it is disabled by it's settings.
206 ## This could be useful if you are unable to log in to the system due to broken
206 ## This could be useful if you are unable to log in to the system due to broken
207 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
207 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
208 ## module to log in again and fix the settings.
208 ## module to log in again and fix the settings.
209 ##
209 ##
210 ## Available builtin plugin IDs (hash is part of the ID):
210 ## Available builtin plugin IDs (hash is part of the ID):
211 ## egg:rhodecode-enterprise-ce#rhodecode
211 ## egg:rhodecode-enterprise-ce#rhodecode
212 ## egg:rhodecode-enterprise-ce#pam
212 ## egg:rhodecode-enterprise-ce#pam
213 ## egg:rhodecode-enterprise-ce#ldap
213 ## egg:rhodecode-enterprise-ce#ldap
214 ## egg:rhodecode-enterprise-ce#jasig_cas
214 ## egg:rhodecode-enterprise-ce#jasig_cas
215 ## egg:rhodecode-enterprise-ce#headers
215 ## egg:rhodecode-enterprise-ce#headers
216 ## egg:rhodecode-enterprise-ce#crowd
216 ## egg:rhodecode-enterprise-ce#crowd
217 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
217 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
218
218
219 ## alternative return HTTP header for failed authentication. Default HTTP
219 ## alternative return HTTP header for failed authentication. Default HTTP
220 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
220 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
221 ## handling that causing a series of failed authentication calls.
221 ## handling that causing a series of failed authentication calls.
222 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
222 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
223 ## This will be served instead of default 401 on bad authnetication
223 ## This will be served instead of default 401 on bad authnetication
224 auth_ret_code =
224 auth_ret_code =
225
225
226 ## use special detection method when serving auth_ret_code, instead of serving
226 ## use special detection method when serving auth_ret_code, instead of serving
227 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
227 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
228 ## and then serve auth_ret_code to clients
228 ## and then serve auth_ret_code to clients
229 auth_ret_code_detection = false
229 auth_ret_code_detection = false
230
230
231 ## locking return code. When repository is locked return this HTTP code. 2XX
231 ## locking return code. When repository is locked return this HTTP code. 2XX
232 ## codes don't break the transactions while 4XX codes do
232 ## codes don't break the transactions while 4XX codes do
233 lock_ret_code = 423
233 lock_ret_code = 423
234
234
235 ## allows to change the repository location in settings page
235 ## allows to change the repository location in settings page
236 allow_repo_location_change = true
236 allow_repo_location_change = true
237
237
238 ## allows to setup custom hooks in settings page
238 ## allows to setup custom hooks in settings page
239 allow_custom_hooks_settings = true
239 allow_custom_hooks_settings = true
240
240
241 ## generated license token, goto license page in RhodeCode settings to obtain
241 ## generated license token, goto license page in RhodeCode settings to obtain
242 ## new token
242 ## new token
243 license_token =
243 license_token =
244
244
245 ## supervisor connection uri, for managing supervisor and logs.
245 ## supervisor connection uri, for managing supervisor and logs.
246 supervisor.uri =
246 supervisor.uri =
247 ## supervisord group name/id we only want this RC instance to handle
247 ## supervisord group name/id we only want this RC instance to handle
248 supervisor.group_id = prod
248 supervisor.group_id = prod
249
249
250 ## Display extended labs settings
250 ## Display extended labs settings
251 labs_settings_active = true
251 labs_settings_active = true
252
252
253 ####################################
253 ####################################
254 ### CELERY CONFIG ####
254 ### CELERY CONFIG ####
255 ####################################
255 ####################################
256 use_celery = false
256 use_celery = false
257 broker.host = localhost
257 broker.host = localhost
258 broker.vhost = rabbitmqhost
258 broker.vhost = rabbitmqhost
259 broker.port = 5672
259 broker.port = 5672
260 broker.user = rabbitmq
260 broker.user = rabbitmq
261 broker.password = qweqwe
261 broker.password = qweqwe
262
262
263 celery.imports = rhodecode.lib.celerylib.tasks
263 celery.imports = rhodecode.lib.celerylib.tasks
264
264
265 celery.result.backend = amqp
265 celery.result.backend = amqp
266 celery.result.dburi = amqp://
266 celery.result.dburi = amqp://
267 celery.result.serialier = json
267 celery.result.serialier = json
268
268
269 #celery.send.task.error.emails = true
269 #celery.send.task.error.emails = true
270 #celery.amqp.task.result.expires = 18000
270 #celery.amqp.task.result.expires = 18000
271
271
272 celeryd.concurrency = 2
272 celeryd.concurrency = 2
273 #celeryd.log.file = celeryd.log
273 #celeryd.log.file = celeryd.log
274 celeryd.log.level = debug
274 celeryd.log.level = debug
275 celeryd.max.tasks.per.child = 1
275 celeryd.max.tasks.per.child = 1
276
276
277 ## tasks will never be sent to the queue, but executed locally instead.
277 ## tasks will never be sent to the queue, but executed locally instead.
278 celery.always.eager = false
278 celery.always.eager = false
279
279
280 ####################################
280 ####################################
281 ### BEAKER CACHE ####
281 ### BEAKER CACHE ####
282 ####################################
282 ####################################
283 # default cache dir for templates. Putting this into a ramdisk
283 # default cache dir for templates. Putting this into a ramdisk
284 ## can boost performance, eg. %(here)s/data_ramdisk
284 ## can boost performance, eg. %(here)s/data_ramdisk
285 cache_dir = %(here)s/data
285 cache_dir = %(here)s/data
286
286
287 ## locking and default file storage for Beaker. Putting this into a ramdisk
287 ## locking and default file storage for Beaker. Putting this into a ramdisk
288 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
288 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
289 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
289 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
290 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
290 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
291
291
292 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
292 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
293
293
294 beaker.cache.super_short_term.type = memory
294 beaker.cache.super_short_term.type = memory
295 beaker.cache.super_short_term.expire = 10
295 beaker.cache.super_short_term.expire = 10
296 beaker.cache.super_short_term.key_length = 256
296 beaker.cache.super_short_term.key_length = 256
297
297
298 beaker.cache.short_term.type = memory
298 beaker.cache.short_term.type = memory
299 beaker.cache.short_term.expire = 60
299 beaker.cache.short_term.expire = 60
300 beaker.cache.short_term.key_length = 256
300 beaker.cache.short_term.key_length = 256
301
301
302 beaker.cache.long_term.type = memory
302 beaker.cache.long_term.type = memory
303 beaker.cache.long_term.expire = 36000
303 beaker.cache.long_term.expire = 36000
304 beaker.cache.long_term.key_length = 256
304 beaker.cache.long_term.key_length = 256
305
305
306 beaker.cache.sql_cache_short.type = memory
306 beaker.cache.sql_cache_short.type = memory
307 beaker.cache.sql_cache_short.expire = 10
307 beaker.cache.sql_cache_short.expire = 10
308 beaker.cache.sql_cache_short.key_length = 256
308 beaker.cache.sql_cache_short.key_length = 256
309
309
310 ## default is memory cache, configure only if required
310 ## default is memory cache, configure only if required
311 ## using multi-node or multi-worker setup
311 ## using multi-node or multi-worker setup
312 #beaker.cache.auth_plugins.type = ext:database
312 #beaker.cache.auth_plugins.type = ext:database
313 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
313 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
314 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
314 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
315 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
315 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
316 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
316 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
317 #beaker.cache.auth_plugins.sa.pool_size = 10
317 #beaker.cache.auth_plugins.sa.pool_size = 10
318 #beaker.cache.auth_plugins.sa.max_overflow = 0
318 #beaker.cache.auth_plugins.sa.max_overflow = 0
319
319
320 beaker.cache.repo_cache_long.type = memorylru_base
320 beaker.cache.repo_cache_long.type = memorylru_base
321 beaker.cache.repo_cache_long.max_items = 4096
321 beaker.cache.repo_cache_long.max_items = 4096
322 beaker.cache.repo_cache_long.expire = 2592000
322 beaker.cache.repo_cache_long.expire = 2592000
323
323
324 ## default is memorylru_base cache, configure only if required
324 ## default is memorylru_base cache, configure only if required
325 ## using multi-node or multi-worker setup
325 ## using multi-node or multi-worker setup
326 #beaker.cache.repo_cache_long.type = ext:memcached
326 #beaker.cache.repo_cache_long.type = ext:memcached
327 #beaker.cache.repo_cache_long.url = localhost:11211
327 #beaker.cache.repo_cache_long.url = localhost:11211
328 #beaker.cache.repo_cache_long.expire = 1209600
328 #beaker.cache.repo_cache_long.expire = 1209600
329 #beaker.cache.repo_cache_long.key_length = 256
329 #beaker.cache.repo_cache_long.key_length = 256
330
330
331 ####################################
331 ####################################
332 ### BEAKER SESSION ####
332 ### BEAKER SESSION ####
333 ####################################
333 ####################################
334
334
335 ## .session.type is type of storage options for the session, current allowed
335 ## .session.type is type of storage options for the session, current allowed
336 ## types are file, ext:memcached, ext:database, and memory (default).
336 ## types are file, ext:memcached, ext:database, and memory (default).
337 beaker.session.type = file
337 beaker.session.type = file
338 beaker.session.data_dir = %(here)s/data/sessions/data
338 beaker.session.data_dir = %(here)s/data/sessions/data
339
339
340 ## db based session, fast, and allows easy management over logged in users
340 ## db based session, fast, and allows easy management over logged in users
341 #beaker.session.type = ext:database
341 #beaker.session.type = ext:database
342 #beaker.session.table_name = db_session
342 #beaker.session.table_name = db_session
343 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
343 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
344 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
344 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
345 #beaker.session.sa.pool_recycle = 3600
345 #beaker.session.sa.pool_recycle = 3600
346 #beaker.session.sa.echo = false
346 #beaker.session.sa.echo = false
347
347
348 beaker.session.key = rhodecode
348 beaker.session.key = rhodecode
349 beaker.session.secret = production-rc-uytcxaz
349 beaker.session.secret = production-rc-uytcxaz
350 beaker.session.lock_dir = %(here)s/data/sessions/lock
350 beaker.session.lock_dir = %(here)s/data/sessions/lock
351
351
352 ## Secure encrypted cookie. Requires AES and AES python libraries
352 ## Secure encrypted cookie. Requires AES and AES python libraries
353 ## you must disable beaker.session.secret to use this
353 ## you must disable beaker.session.secret to use this
354 #beaker.session.encrypt_key = <key_for_encryption>
354 #beaker.session.encrypt_key = <key_for_encryption>
355 #beaker.session.validate_key = <validation_key>
355 #beaker.session.validate_key = <validation_key>
356
356
357 ## sets session as invalid(also logging out user) if it haven not been
357 ## sets session as invalid(also logging out user) if it haven not been
358 ## accessed for given amount of time in seconds
358 ## accessed for given amount of time in seconds
359 beaker.session.timeout = 2592000
359 beaker.session.timeout = 2592000
360 beaker.session.httponly = true
360 beaker.session.httponly = true
361 ## Path to use for the cookie.
361 ## Path to use for the cookie.
362 #beaker.session.cookie_path = /<your-prefix>
362 #beaker.session.cookie_path = /<your-prefix>
363
363
364 ## uncomment for https secure cookie
364 ## uncomment for https secure cookie
365 beaker.session.secure = false
365 beaker.session.secure = false
366
366
367 ## auto save the session to not to use .save()
367 ## auto save the session to not to use .save()
368 beaker.session.auto = false
368 beaker.session.auto = false
369
369
370 ## default cookie expiration time in seconds, set to `true` to set expire
370 ## default cookie expiration time in seconds, set to `true` to set expire
371 ## at browser close
371 ## at browser close
372 #beaker.session.cookie_expires = 3600
372 #beaker.session.cookie_expires = 3600
373
373
374 ###################################
374 ###################################
375 ## SEARCH INDEXING CONFIGURATION ##
375 ## SEARCH INDEXING CONFIGURATION ##
376 ###################################
376 ###################################
377 ## Full text search indexer is available in rhodecode-tools under
377 ## Full text search indexer is available in rhodecode-tools under
378 ## `rhodecode-tools index` command
378 ## `rhodecode-tools index` command
379
379
380 # WHOOSH Backend, doesn't require additional services to run
380 # WHOOSH Backend, doesn't require additional services to run
381 # it works good with few dozen repos
381 # it works good with few dozen repos
382 search.module = rhodecode.lib.index.whoosh
382 search.module = rhodecode.lib.index.whoosh
383 search.location = %(here)s/data/index
383 search.location = %(here)s/data/index
384
384
385 ########################################
385 ########################################
386 ### CHANNELSTREAM CONFIG ####
386 ### CHANNELSTREAM CONFIG ####
387 ########################################
387 ########################################
388 ## channelstream enables persistent connections and live notification
388 ## channelstream enables persistent connections and live notification
389 ## in the system. It's also used by the chat system
389 ## in the system. It's also used by the chat system
390
390
391 channelstream.enabled = true
391 channelstream.enabled = false
392 ## location of channelstream server on the backend
392 ## location of channelstream server on the backend
393 channelstream.server = 127.0.0.1:9800
393 channelstream.server = 127.0.0.1:9800
394 ## location of the channelstream server from outside world
394 ## location of the channelstream server from outside world
395 ## most likely this would be an http server special backend URL, that handles
395 ## most likely this would be an http server special backend URL, that handles
396 ## websocket connections see nginx example for config
396 ## websocket connections see nginx example for config
397 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
397 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
398 channelstream.secret = secret
398 channelstream.secret = secret
399 channelstream.history.location = %(here)s/channelstream_history
399 channelstream.history.location = %(here)s/channelstream_history
400
400
401
401
402 ###################################
402 ###################################
403 ## APPENLIGHT CONFIG ##
403 ## APPENLIGHT CONFIG ##
404 ###################################
404 ###################################
405
405
406 ## Appenlight is tailored to work with RhodeCode, see
406 ## Appenlight is tailored to work with RhodeCode, see
407 ## http://appenlight.com for details how to obtain an account
407 ## http://appenlight.com for details how to obtain an account
408
408
409 ## appenlight integration enabled
409 ## appenlight integration enabled
410 appenlight = false
410 appenlight = false
411
411
412 appenlight.server_url = https://api.appenlight.com
412 appenlight.server_url = https://api.appenlight.com
413 appenlight.api_key = YOUR_API_KEY
413 appenlight.api_key = YOUR_API_KEY
414 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
414 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
415
415
416 # used for JS client
416 # used for JS client
417 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
417 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
418
418
419 ## TWEAK AMOUNT OF INFO SENT HERE
419 ## TWEAK AMOUNT OF INFO SENT HERE
420
420
421 ## enables 404 error logging (default False)
421 ## enables 404 error logging (default False)
422 appenlight.report_404 = false
422 appenlight.report_404 = false
423
423
424 ## time in seconds after request is considered being slow (default 1)
424 ## time in seconds after request is considered being slow (default 1)
425 appenlight.slow_request_time = 1
425 appenlight.slow_request_time = 1
426
426
427 ## record slow requests in application
427 ## record slow requests in application
428 ## (needs to be enabled for slow datastore recording and time tracking)
428 ## (needs to be enabled for slow datastore recording and time tracking)
429 appenlight.slow_requests = true
429 appenlight.slow_requests = true
430
430
431 ## enable hooking to application loggers
431 ## enable hooking to application loggers
432 appenlight.logging = true
432 appenlight.logging = true
433
433
434 ## minimum log level for log capture
434 ## minimum log level for log capture
435 appenlight.logging.level = WARNING
435 appenlight.logging.level = WARNING
436
436
437 ## send logs only from erroneous/slow requests
437 ## send logs only from erroneous/slow requests
438 ## (saves API quota for intensive logging)
438 ## (saves API quota for intensive logging)
439 appenlight.logging_on_error = false
439 appenlight.logging_on_error = false
440
440
441 ## list of additonal keywords that should be grabbed from environ object
441 ## list of additonal keywords that should be grabbed from environ object
442 ## can be string with comma separated list of words in lowercase
442 ## can be string with comma separated list of words in lowercase
443 ## (by default client will always send following info:
443 ## (by default client will always send following info:
444 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
444 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
445 ## start with HTTP* this list be extended with additional keywords here
445 ## start with HTTP* this list be extended with additional keywords here
446 appenlight.environ_keys_whitelist =
446 appenlight.environ_keys_whitelist =
447
447
448 ## list of keywords that should be blanked from request object
448 ## list of keywords that should be blanked from request object
449 ## can be string with comma separated list of words in lowercase
449 ## can be string with comma separated list of words in lowercase
450 ## (by default client will always blank keys that contain following words
450 ## (by default client will always blank keys that contain following words
451 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
451 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
452 ## this list be extended with additional keywords set here
452 ## this list be extended with additional keywords set here
453 appenlight.request_keys_blacklist =
453 appenlight.request_keys_blacklist =
454
454
455 ## list of namespaces that should be ignores when gathering log entries
455 ## list of namespaces that should be ignores when gathering log entries
456 ## can be string with comma separated list of namespaces
456 ## can be string with comma separated list of namespaces
457 ## (by default the client ignores own entries: appenlight_client.client)
457 ## (by default the client ignores own entries: appenlight_client.client)
458 appenlight.log_namespace_blacklist =
458 appenlight.log_namespace_blacklist =
459
459
460
460
461 ################################################################################
461 ################################################################################
462 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
462 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
463 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
463 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
464 ## execute malicious code after an exception is raised. ##
464 ## execute malicious code after an exception is raised. ##
465 ################################################################################
465 ################################################################################
466 set debug = false
466 set debug = false
467
467
468
468
469 #########################################################
469 #########################################################
470 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
470 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
471 #########################################################
471 #########################################################
472 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
472 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
473 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
473 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
474 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
474 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
475 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
475 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
476
476
477 # see sqlalchemy docs for other advanced settings
477 # see sqlalchemy docs for other advanced settings
478
478
479 ## print the sql statements to output
479 ## print the sql statements to output
480 sqlalchemy.db1.echo = false
480 sqlalchemy.db1.echo = false
481 ## recycle the connections after this ammount of seconds
481 ## recycle the connections after this ammount of seconds
482 sqlalchemy.db1.pool_recycle = 3600
482 sqlalchemy.db1.pool_recycle = 3600
483 sqlalchemy.db1.convert_unicode = true
483 sqlalchemy.db1.convert_unicode = true
484
484
485 ## the number of connections to keep open inside the connection pool.
485 ## the number of connections to keep open inside the connection pool.
486 ## 0 indicates no limit
486 ## 0 indicates no limit
487 #sqlalchemy.db1.pool_size = 5
487 #sqlalchemy.db1.pool_size = 5
488
488
489 ## the number of connections to allow in connection pool "overflow", that is
489 ## the number of connections to allow in connection pool "overflow", that is
490 ## connections that can be opened above and beyond the pool_size setting,
490 ## connections that can be opened above and beyond the pool_size setting,
491 ## which defaults to five.
491 ## which defaults to five.
492 #sqlalchemy.db1.max_overflow = 10
492 #sqlalchemy.db1.max_overflow = 10
493
493
494
494
495 ##################
495 ##################
496 ### VCS CONFIG ###
496 ### VCS CONFIG ###
497 ##################
497 ##################
498 vcs.server.enable = true
498 vcs.server.enable = true
499 vcs.server = localhost:9900
499 vcs.server = localhost:9900
500
500
501 ## Web server connectivity protocol, responsible for web based VCS operatations
501 ## Web server connectivity protocol, responsible for web based VCS operatations
502 ## Available protocols are:
502 ## Available protocols are:
503 ## `pyro4` - using pyro4 server
503 ## `pyro4` - using pyro4 server
504 ## `http` - using http-rpc backend
504 ## `http` - using http-rpc backend
505 #vcs.server.protocol = http
505 #vcs.server.protocol = http
506
506
507 ## Push/Pull operations protocol, available options are:
507 ## Push/Pull operations protocol, available options are:
508 ## `pyro4` - using pyro4 server
508 ## `pyro4` - using pyro4 server
509 ## `rhodecode.lib.middleware.utils.scm_app_http` - Http based, recommended
509 ## `rhodecode.lib.middleware.utils.scm_app_http` - Http based, recommended
510 ## `vcsserver.scm_app` - internal app (EE only)
510 ## `vcsserver.scm_app` - internal app (EE only)
511 #vcs.scm_app_implementation = rhodecode.lib.middleware.utils.scm_app_http
511 #vcs.scm_app_implementation = rhodecode.lib.middleware.utils.scm_app_http
512
512
513 ## Push/Pull operations hooks protocol, available options are:
513 ## Push/Pull operations hooks protocol, available options are:
514 ## `pyro4` - using pyro4 server
514 ## `pyro4` - using pyro4 server
515 ## `http` - using http-rpc backend
515 ## `http` - using http-rpc backend
516 #vcs.hooks.protocol = http
516 #vcs.hooks.protocol = http
517
517
518 vcs.server.log_level = info
518 vcs.server.log_level = info
519 ## Start VCSServer with this instance as a subprocess, usefull for development
519 ## Start VCSServer with this instance as a subprocess, usefull for development
520 vcs.start_server = false
520 vcs.start_server = false
521
521
522 ## List of enabled VCS backends, available options are:
522 ## List of enabled VCS backends, available options are:
523 ## `hg` - mercurial
523 ## `hg` - mercurial
524 ## `git` - git
524 ## `git` - git
525 ## `svn` - subversion
525 ## `svn` - subversion
526 vcs.backends = hg, git, svn
526 vcs.backends = hg, git, svn
527
527
528 vcs.connection_timeout = 3600
528 vcs.connection_timeout = 3600
529 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
529 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
530 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
530 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
531 #vcs.svn.compatible_version = pre-1.8-compatible
531 #vcs.svn.compatible_version = pre-1.8-compatible
532
532
533
533
534 ############################################################
534 ############################################################
535 ### Subversion proxy support (mod_dav_svn) ###
535 ### Subversion proxy support (mod_dav_svn) ###
536 ### Maps RhodeCode repo groups into SVN paths for Apache ###
536 ### Maps RhodeCode repo groups into SVN paths for Apache ###
537 ############################################################
537 ############################################################
538 ## Enable or disable the config file generation.
538 ## Enable or disable the config file generation.
539 svn.proxy.generate_config = false
539 svn.proxy.generate_config = false
540 ## Generate config file with `SVNListParentPath` set to `On`.
540 ## Generate config file with `SVNListParentPath` set to `On`.
541 svn.proxy.list_parent_path = true
541 svn.proxy.list_parent_path = true
542 ## Set location and file name of generated config file.
542 ## Set location and file name of generated config file.
543 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
543 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
544 ## File system path to the directory containing the repositories served by
544 ## File system path to the directory containing the repositories served by
545 ## RhodeCode.
545 ## RhodeCode.
546 svn.proxy.parent_path_root = /path/to/repo_store
546 svn.proxy.parent_path_root = /path/to/repo_store
547 ## Used as a prefix to the <Location> block in the generated config file. In
547 ## Used as a prefix to the <Location> block in the generated config file. In
548 ## most cases it should be set to `/`.
548 ## most cases it should be set to `/`.
549 svn.proxy.location_root = /
549 svn.proxy.location_root = /
550
550
551
551
552 ################################
552 ################################
553 ### LOGGING CONFIGURATION ####
553 ### LOGGING CONFIGURATION ####
554 ################################
554 ################################
555 [loggers]
555 [loggers]
556 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
556 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
557
557
558 [handlers]
558 [handlers]
559 keys = console, console_sql
559 keys = console, console_sql
560
560
561 [formatters]
561 [formatters]
562 keys = generic, color_formatter, color_formatter_sql
562 keys = generic, color_formatter, color_formatter_sql
563
563
564 #############
564 #############
565 ## LOGGERS ##
565 ## LOGGERS ##
566 #############
566 #############
567 [logger_root]
567 [logger_root]
568 level = NOTSET
568 level = NOTSET
569 handlers = console
569 handlers = console
570
570
571 [logger_routes]
571 [logger_routes]
572 level = DEBUG
572 level = DEBUG
573 handlers =
573 handlers =
574 qualname = routes.middleware
574 qualname = routes.middleware
575 ## "level = DEBUG" logs the route matched and routing variables.
575 ## "level = DEBUG" logs the route matched and routing variables.
576 propagate = 1
576 propagate = 1
577
577
578 [logger_beaker]
578 [logger_beaker]
579 level = DEBUG
579 level = DEBUG
580 handlers =
580 handlers =
581 qualname = beaker.container
581 qualname = beaker.container
582 propagate = 1
582 propagate = 1
583
583
584 [logger_pyro4]
584 [logger_pyro4]
585 level = DEBUG
585 level = DEBUG
586 handlers =
586 handlers =
587 qualname = Pyro4
587 qualname = Pyro4
588 propagate = 1
588 propagate = 1
589
589
590 [logger_templates]
590 [logger_templates]
591 level = INFO
591 level = INFO
592 handlers =
592 handlers =
593 qualname = pylons.templating
593 qualname = pylons.templating
594 propagate = 1
594 propagate = 1
595
595
596 [logger_rhodecode]
596 [logger_rhodecode]
597 level = DEBUG
597 level = DEBUG
598 handlers =
598 handlers =
599 qualname = rhodecode
599 qualname = rhodecode
600 propagate = 1
600 propagate = 1
601
601
602 [logger_sqlalchemy]
602 [logger_sqlalchemy]
603 level = INFO
603 level = INFO
604 handlers = console_sql
604 handlers = console_sql
605 qualname = sqlalchemy.engine
605 qualname = sqlalchemy.engine
606 propagate = 0
606 propagate = 0
607
607
608 ##############
608 ##############
609 ## HANDLERS ##
609 ## HANDLERS ##
610 ##############
610 ##############
611
611
612 [handler_console]
612 [handler_console]
613 class = StreamHandler
613 class = StreamHandler
614 args = (sys.stderr,)
614 args = (sys.stderr,)
615 level = INFO
615 level = INFO
616 formatter = generic
616 formatter = generic
617
617
618 [handler_console_sql]
618 [handler_console_sql]
619 class = StreamHandler
619 class = StreamHandler
620 args = (sys.stderr,)
620 args = (sys.stderr,)
621 level = WARN
621 level = WARN
622 formatter = generic
622 formatter = generic
623
623
624 ################
624 ################
625 ## FORMATTERS ##
625 ## FORMATTERS ##
626 ################
626 ################
627
627
628 [formatter_generic]
628 [formatter_generic]
629 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
629 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
630 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
630 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
631 datefmt = %Y-%m-%d %H:%M:%S
631 datefmt = %Y-%m-%d %H:%M:%S
632
632
633 [formatter_color_formatter]
633 [formatter_color_formatter]
634 class = rhodecode.lib.logging_formatter.ColorFormatter
634 class = rhodecode.lib.logging_formatter.ColorFormatter
635 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
635 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
636 datefmt = %Y-%m-%d %H:%M:%S
636 datefmt = %Y-%m-%d %H:%M:%S
637
637
638 [formatter_color_formatter_sql]
638 [formatter_color_formatter_sql]
639 class = rhodecode.lib.logging_formatter.ColorFormatterSql
639 class = rhodecode.lib.logging_formatter.ColorFormatterSql
640 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
640 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
641 datefmt = %Y-%m-%d %H:%M:%S
641 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,229 +1,241 b''
1 # Nix environment for the community edition
1 # Nix environment for the community edition
2 #
2 #
3 # This shall be as lean as possible, just producing the Enterprise
3 # This shall be as lean as possible, just producing the Enterprise
4 # derivation. For advanced tweaks to pimp up the development environment we use
4 # derivation. For advanced tweaks to pimp up the development environment we use
5 # "shell.nix" so that it does not have to clutter this file.
5 # "shell.nix" so that it does not have to clutter this file.
6
6
7 { pkgs ? (import <nixpkgs> {})
7 { pkgs ? (import <nixpkgs> {})
8 , pythonPackages ? "python27Packages"
8 , pythonPackages ? "python27Packages"
9 , pythonExternalOverrides ? self: super: {}
9 , pythonExternalOverrides ? self: super: {}
10 , doCheck ? true
10 , doCheck ? true
11 }:
11 }:
12
12
13 let pkgs_ = pkgs; in
13 let pkgs_ = pkgs; in
14
14
15 let
15 let
16 pkgs = pkgs_.overridePackages (self: super: {
16 pkgs = pkgs_.overridePackages (self: super: {
17 # Override subversion derivation to
17 # Override subversion derivation to
18 # - activate python bindings
18 # - activate python bindings
19 # - set version to 1.8
19 # - set version to 1.8
20 subversion = super.subversion18.override {
20 subversion = super.subversion18.override {
21 httpSupport = true;
21 httpSupport = true;
22 pythonBindings = true;
22 pythonBindings = true;
23 python = self.python27Packages.python;
23 python = self.python27Packages.python;
24 };
24 };
25 });
25 });
26
26
27 inherit (pkgs.lib) fix extends;
27 inherit (pkgs.lib) fix extends;
28
28
29 basePythonPackages = with builtins; if isAttrs pythonPackages
29 basePythonPackages = with builtins; if isAttrs pythonPackages
30 then pythonPackages
30 then pythonPackages
31 else getAttr pythonPackages pkgs;
31 else getAttr pythonPackages pkgs;
32
32
33 buildBowerComponents =
34 pkgs.buildBowerComponents or
35 (import ./pkgs/backport-16.03-build-bower-components.nix { inherit pkgs; });
36
33 elem = builtins.elem;
37 elem = builtins.elem;
34 basename = path: with pkgs.lib; last (splitString "/" path);
38 basename = path: with pkgs.lib; last (splitString "/" path);
35 startsWith = prefix: full: let
39 startsWith = prefix: full: let
36 actualPrefix = builtins.substring 0 (builtins.stringLength prefix) full;
40 actualPrefix = builtins.substring 0 (builtins.stringLength prefix) full;
37 in actualPrefix == prefix;
41 in actualPrefix == prefix;
38
42
39 src-filter = path: type: with pkgs.lib;
43 src-filter = path: type: with pkgs.lib;
40 let
44 let
41 ext = last (splitString "." path);
45 ext = last (splitString "." path);
42 in
46 in
43 !elem (basename path) [
47 !elem (basename path) [
44 ".git" ".hg" "__pycache__" ".eggs" "node_modules"
48 ".git" ".hg" "__pycache__" ".eggs"
45 "build" "data" "tmp"] &&
49 "bower_components" "node_modules"
50 "build" "data" "result" "tmp"] &&
46 !elem ext ["egg-info" "pyc"] &&
51 !elem ext ["egg-info" "pyc"] &&
52 # TODO: johbo: This check is wrong, since "path" contains an absolute path,
53 # it would still be good to restore it since we want to ignore "result-*".
47 !startsWith "result" path;
54 !startsWith "result" path;
48
55
49 sources = pkgs.config.rc.sources or {};
56 sources = pkgs.config.rc.sources or {};
57 version = builtins.readFile ./rhodecode/VERSION;
50 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
58 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
51
59
52 # Load the generated node packages
60 nodeEnv = import ./pkgs/node-default.nix {
53 nodePackages = pkgs.callPackage "${pkgs.path}/pkgs/top-level/node-packages.nix" rec {
61 inherit pkgs;
54 self = nodePackages;
55 generated = pkgs.callPackage ./pkgs/node-packages.nix { inherit self; };
56 };
62 };
63 nodeDependencies = nodeEnv.shell.nodeDependencies;
57
64
58 # TODO: Should be taken automatically out of the generates packages.
65 bowerComponents = buildBowerComponents {
59 # apps.nix has one solution for this, although I'd prefer to have the deps
66 name = "enterprise-ce-${version}";
60 # from package.json mapped in here.
67 generated = ./pkgs/bower-packages.nix;
61 nodeDependencies = with nodePackages; [
68 src = rhodecode-enterprise-ce-src;
62 grunt
69 };
63 grunt-contrib-concat
64 grunt-contrib-jshint
65 grunt-contrib-less
66 grunt-contrib-watch
67 jshint
68 ];
69
70
70 pythonGeneratedPackages = self: basePythonPackages.override (a: {
71 pythonGeneratedPackages = self: basePythonPackages.override (a: {
71 inherit self;
72 inherit self;
72 })
73 })
73 // (scopedImport {
74 // (scopedImport {
74 self = self;
75 self = self;
75 super = basePythonPackages;
76 super = basePythonPackages;
76 inherit pkgs;
77 inherit pkgs;
77 inherit (pkgs) fetchurl fetchgit;
78 inherit (pkgs) fetchurl fetchgit;
78 } ./pkgs/python-packages.nix);
79 } ./pkgs/python-packages.nix);
79
80
80 pythonOverrides = import ./pkgs/python-packages-overrides.nix {
81 pythonOverrides = import ./pkgs/python-packages-overrides.nix {
81 inherit
82 inherit
82 basePythonPackages
83 basePythonPackages
83 pkgs;
84 pkgs;
84 };
85 };
85
86
86 pythonLocalOverrides = self: super: {
87 pythonLocalOverrides = self: super: {
87 rhodecode-enterprise-ce =
88 rhodecode-enterprise-ce =
88 let
89 let
89 version = builtins.readFile ./rhodecode/VERSION;
90 linkNodeAndBowerPackages = ''
90 linkNodeModules = ''
91 echo "Export RhodeCode CE path"
92 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
91 echo "Link node packages"
93 echo "Link node packages"
92 # TODO: check if this adds stuff as a dependency, closure size
93 rm -fr node_modules
94 rm -fr node_modules
94 mkdir -p node_modules
95 mkdir node_modules
95 ${pkgs.lib.concatMapStrings (dep: ''
96 # johbo: Linking individual packages allows us to run "npm install"
96 ln -sfv ${dep}/lib/node_modules/${dep.pkgName} node_modules/
97 # inside of a shell to try things out. Re-entering the shell will
97 '') nodeDependencies}
98 # restore a clean environment.
99 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
100
98 echo "DONE: Link node packages"
101 echo "DONE: Link node packages"
102
103 echo "Link bower packages"
104 rm -fr bower_components
105 mkdir bower_components
106
107 ln -s ${bowerComponents}/bower_components/* bower_components/
108 echo "DONE: Link bower packages"
99 '';
109 '';
100 in super.rhodecode-enterprise-ce.override (attrs: {
110 in super.rhodecode-enterprise-ce.override (attrs: {
101
111
102 inherit
112 inherit
103 doCheck
113 doCheck
104 version;
114 version;
105 name = "rhodecode-enterprise-ce-${version}";
115 name = "rhodecode-enterprise-ce-${version}";
106 releaseName = "RhodeCodeEnterpriseCE-${version}";
116 releaseName = "RhodeCodeEnterpriseCE-${version}";
107 src = rhodecode-enterprise-ce-src;
117 src = rhodecode-enterprise-ce-src;
108
118
109 buildInputs =
119 buildInputs =
110 attrs.buildInputs ++
120 attrs.buildInputs ++
111 (with self; [
121 (with self; [
122 pkgs.nodePackages.bower
112 pkgs.nodePackages.grunt-cli
123 pkgs.nodePackages.grunt-cli
113 pkgs.subversion
124 pkgs.subversion
114 pytest-catchlog
125 pytest-catchlog
115 rhodecode-testdata
126 rhodecode-testdata
116 ]);
127 ]);
117
128
118 propagatedBuildInputs = attrs.propagatedBuildInputs ++ (with self; [
129 propagatedBuildInputs = attrs.propagatedBuildInputs ++ (with self; [
119 rhodecode-tools
130 rhodecode-tools
120 ]);
131 ]);
121
132
122 # TODO: johbo: Make a nicer way to expose the parts. Maybe
133 # TODO: johbo: Make a nicer way to expose the parts. Maybe
123 # pkgs/default.nix?
134 # pkgs/default.nix?
124 passthru = {
135 passthru = {
125 inherit
136 inherit
126 linkNodeModules
137 bowerComponents
138 linkNodeAndBowerPackages
127 myPythonPackagesUnfix
139 myPythonPackagesUnfix
128 pythonLocalOverrides;
140 pythonLocalOverrides;
129 pythonPackages = self;
141 pythonPackages = self;
130 };
142 };
131
143
132 LC_ALL = "en_US.UTF-8";
144 LC_ALL = "en_US.UTF-8";
133 LOCALE_ARCHIVE =
145 LOCALE_ARCHIVE =
134 if pkgs.stdenv ? glibc
146 if pkgs.stdenv ? glibc
135 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
147 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
136 else "";
148 else "";
137
149
138 # Somewhat snappier setup of the development environment
150 # Somewhat snappier setup of the development environment
139 # TODO: move into shell.nix
151 # TODO: move into shell.nix
140 # TODO: think of supporting a stable path again, so that multiple shells
152 # TODO: think of supporting a stable path again, so that multiple shells
141 # can share it.
153 # can share it.
142 shellHook = ''
154 shellHook = ''
143 tmp_path=$(mktemp -d)
155 tmp_path=$(mktemp -d)
144 export PATH="$tmp_path/bin:$PATH"
156 export PATH="$tmp_path/bin:$PATH"
145 export PYTHONPATH="$tmp_path/${self.python.sitePackages}:$PYTHONPATH"
157 export PYTHONPATH="$tmp_path/${self.python.sitePackages}:$PYTHONPATH"
146 mkdir -p $tmp_path/${self.python.sitePackages}
158 mkdir -p $tmp_path/${self.python.sitePackages}
147 python setup.py develop --prefix $tmp_path --allow-hosts ""
159 python setup.py develop --prefix $tmp_path --allow-hosts ""
148 '' + linkNodeModules;
160 '' + linkNodeAndBowerPackages;
149
161
150 preCheck = ''
162 preCheck = ''
151 export PATH="$out/bin:$PATH"
163 export PATH="$out/bin:$PATH"
152 '';
164 '';
153
165
154 postCheck = ''
166 postCheck = ''
155 rm -rf $out/lib/${self.python.libPrefix}/site-packages/pytest_pylons
167 rm -rf $out/lib/${self.python.libPrefix}/site-packages/pytest_pylons
156 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
168 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
157 '';
169 '';
158
170
159 preBuild = linkNodeModules + ''
171 preBuild = linkNodeAndBowerPackages + ''
160 grunt
172 grunt
161 rm -fr node_modules
173 rm -fr node_modules
162 '';
174 '';
163
175
164 postInstall = ''
176 postInstall = ''
165 # python based programs need to be wrapped
177 # python based programs need to be wrapped
166 ln -s ${self.supervisor}/bin/supervisor* $out/bin/
178 ln -s ${self.supervisor}/bin/supervisor* $out/bin/
167 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
179 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
168 ln -s ${self.PasteScript}/bin/paster $out/bin/
180 ln -s ${self.PasteScript}/bin/paster $out/bin/
169 ln -s ${self.channelstream}/bin/channelstream $out/bin/
181 ln -s ${self.channelstream}/bin/channelstream $out/bin/
170 ln -s ${self.pyramid}/bin/* $out/bin/ #*/
182 ln -s ${self.pyramid}/bin/* $out/bin/ #*/
171
183
172 # rhodecode-tools
184 # rhodecode-tools
173 # TODO: johbo: re-think this. Do the tools import anything from enterprise?
185 # TODO: johbo: re-think this. Do the tools import anything from enterprise?
174 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
186 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
175
187
176 # note that condition should be restricted when adding further tools
188 # note that condition should be restricted when adding further tools
177 for file in $out/bin/*; do #*/
189 for file in $out/bin/*; do #*/
178 wrapProgram $file \
190 wrapProgram $file \
179 --prefix PYTHONPATH : $PYTHONPATH \
191 --prefix PYTHONPATH : $PYTHONPATH \
180 --prefix PATH : $PATH \
192 --prefix PATH : $PATH \
181 --set PYTHONHASHSEED random
193 --set PYTHONHASHSEED random
182 done
194 done
183
195
184 mkdir $out/etc
196 mkdir $out/etc
185 cp configs/production.ini $out/etc
197 cp configs/production.ini $out/etc
186
198
187 echo "Writing meta information for rccontrol to nix-support/rccontrol"
199 echo "Writing meta information for rccontrol to nix-support/rccontrol"
188 mkdir -p $out/nix-support/rccontrol
200 mkdir -p $out/nix-support/rccontrol
189 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
201 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
190 echo "DONE: Meta information for rccontrol written"
202 echo "DONE: Meta information for rccontrol written"
191
203
192 # TODO: johbo: Make part of ac-tests
204 # TODO: johbo: Make part of ac-tests
193 if [ ! -f rhodecode/public/js/scripts.js ]; then
205 if [ ! -f rhodecode/public/js/scripts.js ]; then
194 echo "Missing scripts.js"
206 echo "Missing scripts.js"
195 exit 1
207 exit 1
196 fi
208 fi
197 if [ ! -f rhodecode/public/css/style.css ]; then
209 if [ ! -f rhodecode/public/css/style.css ]; then
198 echo "Missing style.css"
210 echo "Missing style.css"
199 exit 1
211 exit 1
200 fi
212 fi
201 '';
213 '';
202
214
203 });
215 });
204
216
205 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
217 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
206 inherit
218 inherit
207 doCheck
219 doCheck
208 pkgs
220 pkgs
209 pythonPackages;
221 pythonPackages;
210 };
222 };
211
223
212 };
224 };
213
225
214 rhodecode-testdata-src = sources.rhodecode-testdata or (
226 rhodecode-testdata-src = sources.rhodecode-testdata or (
215 pkgs.fetchhg {
227 pkgs.fetchhg {
216 url = "https://code.rhodecode.com/upstream/rc_testdata";
228 url = "https://code.rhodecode.com/upstream/rc_testdata";
217 rev = "v0.8.0";
229 rev = "v0.8.0";
218 sha256 = "0hy1ba134rq2f9si85yx7j4qhc9ky0hjzdk553s3q026i7km809m";
230 sha256 = "0hy1ba134rq2f9si85yx7j4qhc9ky0hjzdk553s3q026i7km809m";
219 });
231 });
220
232
221 # Apply all overrides and fix the final package set
233 # Apply all overrides and fix the final package set
222 myPythonPackagesUnfix =
234 myPythonPackagesUnfix =
223 (extends pythonExternalOverrides
235 (extends pythonExternalOverrides
224 (extends pythonLocalOverrides
236 (extends pythonLocalOverrides
225 (extends pythonOverrides
237 (extends pythonOverrides
226 pythonGeneratedPackages)));
238 pythonGeneratedPackages)));
227 myPythonPackages = (fix myPythonPackagesUnfix);
239 myPythonPackages = (fix myPythonPackagesUnfix);
228
240
229 in myPythonPackages.rhodecode-enterprise-ce
241 in myPythonPackages.rhodecode-enterprise-ce
@@ -1,41 +1,31 b''
1 .. _lab-settings:
1 .. _lab-settings:
2
2
3 Lab Settings
3 Lab Settings
4 ============
4 ============
5
5
6 |RCE| Lab Settings is for delivering features which may require an additional
6 |RCE| Lab Settings is for delivering features which may require an additional
7 level of support to optimize for production scenarios. To enable lab settings,
7 level of support to optimize for production scenarios. To enable lab settings,
8 use the following instructions:
8 use the following instructions:
9
9
10 1. Open the |RCE| configuration file,
10 1. Open the |RCE| configuration file,
11 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
11 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
12
12
13 2. Add the following configuration option in the ``[app:main]`` section.
13 2. Add the following configuration option in the ``[app:main]`` section.
14
14
15 .. code-block:: bash
15 .. code-block:: bash
16
16
17 [app:main]
17 [app:main]
18
18
19 ## Display extended labs settings
19 ## Display extended labs settings
20 labs_settings_active = true
20 labs_settings_active = true
21
21
22 3. Restart your |RCE| instance
22 3. Restart your |RCE| instance
23
23
24 .. code-block:: bash
24 .. code-block:: bash
25
25
26 $ rccontrol restart enterprise-1
26 $ rccontrol restart enterprise-1
27
27
28 4. You will see the labs setting on the
28 4. You will see the labs setting on the
29 :menuselection:`Admin --> Settings --> labs` page.
29 :menuselection:`Admin --> Settings --> labs` page.
30
30
31 .. image:: ../images/lab-setting.png
31 .. image:: ../images/lab-setting.png
32
33 Available Lab Extras
34 --------------------
35
36 Once lab settings are enabled, the following features are available.
37
38 .. toctree::
39 :maxdepth: 1
40
41 svn-http
@@ -1,301 +1,430 b''
1 .. _vcs-server:
1 .. _vcs-server:
2
2
3 VCS Server Management
3 VCS Server Management
4 ---------------------
4 ---------------------
5
5
6 The VCS Server handles |RCM| backend functionality. You need to configure
6 The VCS Server handles |RCM| backend functionality. You need to configure
7 a VCS Server to run with a |RCM| instance. If you do not, you will be missing
7 a VCS Server to run with a |RCM| instance. If you do not, you will be missing
8 the connection between |RCM| and its |repos|. This will cause error messages
8 the connection between |RCM| and its |repos|. This will cause error messages
9 on the web interface. You can run your setup in the following configurations,
9 on the web interface. You can run your setup in the following configurations,
10 currently the best performance is one VCS Server per |RCM| instance:
10 currently the best performance is one VCS Server per |RCM| instance:
11
11
12 * One VCS Server per |RCM| instance.
12 * One VCS Server per |RCM| instance.
13 * One VCS Server handling multiple instances.
13 * One VCS Server handling multiple instances.
14
14
15 .. important::
15 .. important::
16
16
17 If your server locale settings are not correctly configured,
17 If your server locale settings are not correctly configured,
18 |RCE| and the VCS Server can run into issues. See this `Ask Ubuntu`_ post
18 |RCE| and the VCS Server can run into issues. See this `Ask Ubuntu`_ post
19 which explains the problem and gives a solution.
19 which explains the problem and gives a solution.
20
20
21 For more information, see the following sections:
21 For more information, see the following sections:
22
22
23 * :ref:`install-vcs`
23 * :ref:`install-vcs`
24 * :ref:`config-vcs`
24 * :ref:`config-vcs`
25 * :ref:`vcs-server-options`
25 * :ref:`vcs-server-options`
26 * :ref:`vcs-server-versions`
26 * :ref:`vcs-server-versions`
27 * :ref:`vcs-server-maintain`
27 * :ref:`vcs-server-maintain`
28 * :ref:`vcs-server-config-file`
28 * :ref:`vcs-server-config-file`
29 * :ref:`svn-http`
29
30
30 .. _install-vcs:
31 .. _install-vcs:
31
32
32 VCS Server Installation
33 VCS Server Installation
33 ^^^^^^^^^^^^^^^^^^^^^^^
34 ^^^^^^^^^^^^^^^^^^^^^^^
34
35
35 To install a VCS Server, see
36 To install a VCS Server, see
36 :ref:`Installing a VCS server <control:install-vcsserver>`.
37 :ref:`Installing a VCS server <control:install-vcsserver>`.
37
38
38 .. _config-vcs:
39 .. _config-vcs:
39
40
40 Hooking |RCE| to its VCS Server
41 Hooking |RCE| to its VCS Server
41 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42
43
43 To configure a |RCE| instance to use a VCS server, see
44 To configure a |RCE| instance to use a VCS server, see
44 :ref:`Configuring the VCS Server connection <control:manually-vcsserver-ini>`.
45 :ref:`Configuring the VCS Server connection <control:manually-vcsserver-ini>`.
45
46
46 .. _vcs-server-options:
47 .. _vcs-server-options:
47
48
48 |RCE| VCS Server Options
49 |RCE| VCS Server Options
49 ^^^^^^^^^^^^^^^^^^^^^^^^
50 ^^^^^^^^^^^^^^^^^^^^^^^^
50
51
51 The following list shows the available options on the |RCM| side of the
52 The following list shows the available options on the |RCM| side of the
52 connection to the VCS Server. The settings are configured per
53 connection to the VCS Server. The settings are configured per
53 instance in the
54 instance in the
54 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
55 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
55
56
56 .. rst-class:: dl-horizontal
57 .. rst-class:: dl-horizontal
57
58
58 \vcs.backends <available-vcs-systems>
59 \vcs.backends <available-vcs-systems>
59 Set a comma-separated list of the |repo| options available from the
60 Set a comma-separated list of the |repo| options available from the
60 web interface. The default is ``hg, git, svn``,
61 web interface. The default is ``hg, git, svn``,
61 which is all |repo| types available.
62 which is all |repo| types available.
62
63
63 \vcs.connection_timeout <seconds>
64 \vcs.connection_timeout <seconds>
64 Set the length of time in seconds that the VCS Server waits for
65 Set the length of time in seconds that the VCS Server waits for
65 requests to process. After the timeout expires,
66 requests to process. After the timeout expires,
66 the request is closed. The default is ``3600``. Set to a higher
67 the request is closed. The default is ``3600``. Set to a higher
67 number if you experience network latency, or timeout issues with very
68 number if you experience network latency, or timeout issues with very
68 large push/pull requests.
69 large push/pull requests.
69
70
70 \vcs.server.enable <boolean>
71 \vcs.server.enable <boolean>
71 Enable or disable the VCS Server. The available options are ``true`` or
72 Enable or disable the VCS Server. The available options are ``true`` or
72 ``false``. The default is ``true``.
73 ``false``. The default is ``true``.
73
74
74 \vcs.server <host:port>
75 \vcs.server <host:port>
75 Set the host, either hostname or IP Address, and port of the VCS server
76 Set the host, either hostname or IP Address, and port of the VCS server
76 you wish to run with your |RCM| instance.
77 you wish to run with your |RCM| instance.
77
78
78 .. code-block:: ini
79 .. code-block:: ini
79
80
80 ##################
81 ##################
81 ### VCS CONFIG ###
82 ### VCS CONFIG ###
82 ##################
83 ##################
83 # set this line to match your VCS Server
84 # set this line to match your VCS Server
84 vcs.server = 127.0.0.1:10004
85 vcs.server = 127.0.0.1:10004
85 # Set to False to disable the VCS Server
86 # Set to False to disable the VCS Server
86 vcs.server.enable = True
87 vcs.server.enable = True
87 vcs.backends = hg, git, svn
88 vcs.backends = hg, git, svn
88 vcs.connection_timeout = 3600
89 vcs.connection_timeout = 3600
89
90
90
91
91 .. _vcs-server-versions:
92 .. _vcs-server-versions:
92
93
93 VCS Server Versions
94 VCS Server Versions
94 ^^^^^^^^^^^^^^^^^^^
95 ^^^^^^^^^^^^^^^^^^^
95
96
96 An updated version of the VCS Server is released with each |RCE| version. Use
97 An updated version of the VCS Server is released with each |RCE| version. Use
97 the VCS Server number that matches with the |RCE| version to pair the
98 the VCS Server number that matches with the |RCE| version to pair the
98 appropriate ones together. For |RCE| versions pre 3.3.0,
99 appropriate ones together. For |RCE| versions pre 3.3.0,
99 VCS Server 1.X.Y works with |RCE| 3.X.Y, for example:
100 VCS Server 1.X.Y works with |RCE| 3.X.Y, for example:
100
101
101 * VCS Server 1.0.0 works with |RCE| 3.0.0
102 * VCS Server 1.0.0 works with |RCE| 3.0.0
102 * VCS Server 1.2.2 works with |RCE| 3.2.2
103 * VCS Server 1.2.2 works with |RCE| 3.2.2
103
104
104 For |RCE| versions post 3.3.0, the VCS Server and |RCE| version numbers
105 For |RCE| versions post 3.3.0, the VCS Server and |RCE| version numbers
105 match, for example:
106 match, for example:
106
107
107 * VCS Server |release| works with |RCE| |release|
108 * VCS Server |release| works with |RCE| |release|
108
109
109 .. _vcs-server-maintain:
110 .. _vcs-server-maintain:
110
111
111 VCS Server Memory Optimization
112 VCS Server Memory Optimization
112 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
113 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
113
114
114 To configure the VCS server to manage the cache efficiently, you need to
115 To configure the VCS server to manage the cache efficiently, you need to
115 configure the following options in the
116 configure the following options in the
116 :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini` file. Once
117 :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini` file. Once
117 configured, restart the VCS Server.
118 configured, restart the VCS Server.
118
119
119 .. rst-class:: dl-horizontal
120 .. rst-class:: dl-horizontal
120
121
121 \beaker.cache.repo_object.type = memorylru
122 \beaker.cache.repo_object.type = memorylru
122 Configures the cache to discard the least recently used items.
123 Configures the cache to discard the least recently used items.
123 This setting takes the following valid options:
124 This setting takes the following valid options:
124
125
125 * ``memorylru``: The default setting, which removes the least recently
126 * ``memorylru``: The default setting, which removes the least recently
126 used items from the cache.
127 used items from the cache.
127 * ``memory``: Runs the VCS Server without clearing the cache.
128 * ``memory``: Runs the VCS Server without clearing the cache.
128 * ``nocache``: Runs the VCS Server without a cache. This will
129 * ``nocache``: Runs the VCS Server without a cache. This will
129 dramatically reduce the VCS Server performance.
130 dramatically reduce the VCS Server performance.
130
131
131 \beaker.cache.repo_object.max_items = 100
132 \beaker.cache.repo_object.max_items = 100
132 Sets the maximum number of items stored in the cache, before the cache
133 Sets the maximum number of items stored in the cache, before the cache
133 starts to be cleared.
134 starts to be cleared.
134
135
135 As a general rule of thumb, running this value at 120 resulted in a
136 As a general rule of thumb, running this value at 120 resulted in a
136 5GB cache. Running it at 240 resulted in a 9GB cache. Your results
137 5GB cache. Running it at 240 resulted in a 9GB cache. Your results
137 will differ based on usage patterns and |repo| sizes.
138 will differ based on usage patterns and |repo| sizes.
138
139
139 Tweaking this value to run at a fairly constant memory load on your
140 Tweaking this value to run at a fairly constant memory load on your
140 server will help performance.
141 server will help performance.
141
142
142 To clear the cache completely, you can restart the VCS Server.
143 To clear the cache completely, you can restart the VCS Server.
143
144
144 .. important::
145 .. important::
145
146
146 While the VCS Server handles a restart gracefully on the web interface,
147 While the VCS Server handles a restart gracefully on the web interface,
147 it will drop connections during push/pull requests. So it is recommended
148 it will drop connections during push/pull requests. So it is recommended
148 you only perform this when there is very little traffic on the instance.
149 you only perform this when there is very little traffic on the instance.
149
150
150 Use the following example to restart your VCS Server,
151 Use the following example to restart your VCS Server,
151 for full details see the :ref:`RhodeCode Control CLI <control:rcc-cli>`.
152 for full details see the :ref:`RhodeCode Control CLI <control:rcc-cli>`.
152
153
153 .. code-block:: bash
154 .. code-block:: bash
154
155
155 $ rccontrol status
156 $ rccontrol status
156
157
157 .. code-block:: vim
158 .. code-block:: vim
158
159
159 - NAME: vcsserver-1
160 - NAME: vcsserver-1
160 - STATUS: RUNNING
161 - STATUS: RUNNING
161 - TYPE: VCSServer
162 - TYPE: VCSServer
162 - VERSION: 1.0.0
163 - VERSION: 1.0.0
163 - URL: http://127.0.0.1:10001
164 - URL: http://127.0.0.1:10001
164
165
165 $ rccontrol restart vcsserver-1
166 $ rccontrol restart vcsserver-1
166 Instance "vcsserver-1" successfully stopped.
167 Instance "vcsserver-1" successfully stopped.
167 Instance "vcsserver-1" successfully started.
168 Instance "vcsserver-1" successfully started.
168
169
169 .. _vcs-server-config-file:
170 .. _vcs-server-config-file:
170
171
171 VCS Server Configuration
172 VCS Server Configuration
172 ^^^^^^^^^^^^^^^^^^^^^^^^
173 ^^^^^^^^^^^^^^^^^^^^^^^^
173
174
174 You can configure settings for multiple VCS Servers on your
175 You can configure settings for multiple VCS Servers on your
175 system using their individual configuration files. Use the following
176 system using their individual configuration files. Use the following
176 properties inside the configuration file to set up your system. The default
177 properties inside the configuration file to set up your system. The default
177 location is :file:`home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`.
178 location is :file:`home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`.
178 For a more detailed explanation of the logger levers, see :ref:`debug-mode`.
179 For a more detailed explanation of the logger levers, see :ref:`debug-mode`.
179
180
180 .. rst-class:: dl-horizontal
181 .. rst-class:: dl-horizontal
181
182
182 \host <ip-address>
183 \host <ip-address>
183 Set the host on which the VCS Server will run.
184 Set the host on which the VCS Server will run.
184
185
185 \port <int>
186 \port <int>
186 Set the port number on which the VCS Server will be available.
187 Set the port number on which the VCS Server will be available.
187
188
188 \locale <locale_utf>
189 \locale <locale_utf>
189 Set the locale the VCS Server expects.
190 Set the locale the VCS Server expects.
190
191
191 \threadpool_size <int>
192 \threadpool_size <int>
192 Set the size of the threadpool used to communicate
193 Set the size of the threadpool used to communicate
193 with the WSGI workers. This should be at least 6 times the number of
194 with the WSGI workers. This should be at least 6 times the number of
194 WSGI worker processes.
195 WSGI worker processes.
195
196
196 \timeout <seconds>
197 \timeout <seconds>
197 Set the timeout for RPC communication in seconds.
198 Set the timeout for RPC communication in seconds.
198
199
199 .. note::
200 .. note::
200
201
201 After making changes, you need to restart your VCS Server to pick them up.
202 After making changes, you need to restart your VCS Server to pick them up.
202
203
203 .. code-block:: ini
204 .. code-block:: ini
204
205
205 ################################################################################
206 ################################################################################
206 # RhodeCode VCSServer - configuration #
207 # RhodeCode VCSServer - configuration #
207 # #
208 # #
208 ################################################################################
209 ################################################################################
209
210
210 [DEFAULT]
211 [DEFAULT]
211 host = 127.0.0.1
212 host = 127.0.0.1
212 port = 9900
213 port = 9900
213 locale = en_US.UTF-8
214 locale = en_US.UTF-8
214 # number of worker threads, this should be set based on a formula threadpool=N*6
215 # number of worker threads, this should be set based on a formula threadpool=N*6
215 # where N is number of RhodeCode Enterprise workers, eg. running 2 instances
216 # where N is number of RhodeCode Enterprise workers, eg. running 2 instances
216 # 8 gunicorn workers each would be 2 * 8 * 6 = 96, threadpool_size = 96
217 # 8 gunicorn workers each would be 2 * 8 * 6 = 96, threadpool_size = 96
217 threadpool_size = 16
218 threadpool_size = 16
218 timeout = 0
219 timeout = 0
219
220
220 # cache regions, please don't change
221 # cache regions, please don't change
221 beaker.cache.regions = repo_object
222 beaker.cache.regions = repo_object
222 beaker.cache.repo_object.type = memorylru
223 beaker.cache.repo_object.type = memorylru
223 beaker.cache.repo_object.max_items = 1000
224 beaker.cache.repo_object.max_items = 1000
224
225
225 # cache auto-expires after N seconds
226 # cache auto-expires after N seconds
226 beaker.cache.repo_object.expire = 10
227 beaker.cache.repo_object.expire = 10
227 beaker.cache.repo_object.enabled = true
228 beaker.cache.repo_object.enabled = true
228
229
229
230
230 ################################
231 ################################
231 ### LOGGING CONFIGURATION ####
232 ### LOGGING CONFIGURATION ####
232 ################################
233 ################################
233 [loggers]
234 [loggers]
234 keys = root, vcsserver, pyro4, beaker
235 keys = root, vcsserver, pyro4, beaker
235
236
236 [handlers]
237 [handlers]
237 keys = console
238 keys = console
238
239
239 [formatters]
240 [formatters]
240 keys = generic
241 keys = generic
241
242
242 #############
243 #############
243 ## LOGGERS ##
244 ## LOGGERS ##
244 #############
245 #############
245 [logger_root]
246 [logger_root]
246 level = NOTSET
247 level = NOTSET
247 handlers = console
248 handlers = console
248
249
249 [logger_vcsserver]
250 [logger_vcsserver]
250 level = DEBUG
251 level = DEBUG
251 handlers =
252 handlers =
252 qualname = vcsserver
253 qualname = vcsserver
253 propagate = 1
254 propagate = 1
254
255
255 [logger_beaker]
256 [logger_beaker]
256 level = DEBUG
257 level = DEBUG
257 handlers =
258 handlers =
258 qualname = beaker
259 qualname = beaker
259 propagate = 1
260 propagate = 1
260
261
261 [logger_pyro4]
262 [logger_pyro4]
262 level = DEBUG
263 level = DEBUG
263 handlers =
264 handlers =
264 qualname = Pyro4
265 qualname = Pyro4
265 propagate = 1
266 propagate = 1
266
267
267
268
268 ##############
269 ##############
269 ## HANDLERS ##
270 ## HANDLERS ##
270 ##############
271 ##############
271
272
272 [handler_console]
273 [handler_console]
273 class = StreamHandler
274 class = StreamHandler
274 args = (sys.stderr,)
275 args = (sys.stderr,)
275 level = DEBUG
276 level = DEBUG
276 formatter = generic
277 formatter = generic
277
278
278 [handler_file]
279 [handler_file]
279 class = FileHandler
280 class = FileHandler
280 args = ('vcsserver.log', 'a',)
281 args = ('vcsserver.log', 'a',)
281 level = DEBUG
282 level = DEBUG
282 formatter = generic
283 formatter = generic
283
284
284 [handler_file_rotating]
285 [handler_file_rotating]
285 class = logging.handlers.TimedRotatingFileHandler
286 class = logging.handlers.TimedRotatingFileHandler
286 # 'D', 5 - rotate every 5days
287 # 'D', 5 - rotate every 5days
287 # you can set 'h', 'midnight'
288 # you can set 'h', 'midnight'
288 args = ('vcsserver.log', 'D', 5, 10,)
289 args = ('vcsserver.log', 'D', 5, 10,)
289 level = DEBUG
290 level = DEBUG
290 formatter = generic
291 formatter = generic
291
292
292 ################
293 ################
293 ## FORMATTERS ##
294 ## FORMATTERS ##
294 ################
295 ################
295
296
296 [formatter_generic]
297 [formatter_generic]
297 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
298 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
298 datefmt = %Y-%m-%d %H:%M:%S
299 datefmt = %Y-%m-%d %H:%M:%S
299
300
301 .. _svn-http:
300
302
301 .. _Ask Ubuntu: http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue
303 |svn| With Write Over HTTP
304 ^^^^^^^^^^^^^^^^^^^^^^^^^^
305
306 To use |svn| with read/write support over the |svn| HTTP protocol, you have to
307 configure the HTTP |svn| backend.
308
309 Prerequisites
310 =============
311
312 - Enable HTTP support inside the admin VCS settings on your |RCE| instance
313 - You need to install the following tools on the machine that is running an
314 instance of |RCE|:
315 ``Apache HTTP Server`` and
316 ``mod_dav_svn``.
317
318
319 Using Ubuntu Distribution as an example you can run:
320
321 .. code-block:: bash
322
323 $ sudo apt-get install apache2 libapache2-mod-svn
324
325 Once installed you need to enable ``dav_svn``:
326
327 .. code-block:: bash
328
329 $ sudo a2enmod dav_svn
330
331 Configuring Apache Setup
332 ========================
333
334 .. tip::
335
336 It is recommended to run Apache on a port other than 80, due to possible
337 conflicts with other HTTP servers like nginx. To do this, set the
338 ``Listen`` parameter in the ``/etc/apache2/ports.conf`` file, for example
339 ``Listen 8090``.
340
341
342 .. warning::
343
344 Make sure your Apache instance which runs the mod_dav_svn module is
345 only accessible by RhodeCode. Otherwise everyone is able to browse
346 the repositories or run subversion operations (checkout/commit/etc.).
347
348 It is also recommended to run apache as the same user as |RCE|, otherwise
349 permission issues could occur. To do this edit the ``/etc/apache2/envvars``
350
351 .. code-block:: apache
352
353 export APACHE_RUN_USER=rhodecode
354 export APACHE_RUN_GROUP=rhodecode
355
356 1. To configure Apache, create and edit a virtual hosts file, for example
357 :file:`/etc/apache2/sites-available/default.conf`. Below is an example
358 how to use one with auto-generated config ```mod_dav_svn.conf```
359 from configured |RCE| instance.
360
361 .. code-block:: apache
362
363 <VirtualHost *:8080>
364 ServerAdmin rhodecode-admin@localhost
365 DocumentRoot /var/www/html
366 ErrorLog ${'${APACHE_LOG_DIR}'}/error.log
367 CustomLog ${'${APACHE_LOG_DIR}'}/access.log combined
368 Include /home/user/.rccontrol/enterprise-1/mod_dav_svn.conf
369 </VirtualHost>
370
371
372 2. Go to the :menuselection:`Admin --> Settings --> VCS` page, and
373 enable :guilabel:`Proxy Subversion HTTP requests`, and specify the
374 :guilabel:`Subversion HTTP Server URL`.
375
376 3. Open the |RCE| configuration file,
377 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
378
379 4. Add the following configuration option in the ``[app:main]``
380 section if you don't have it yet.
381
382 This enables mapping of the created |RCE| repo groups into special |svn| paths.
383 Each time a new repository group is created, the system will update
384 the template file and create new mapping. Apache web server needs to be
385 reloaded to pick up the changes on this file.
386 It's recommended to add reload into a crontab so the changes can be picked
387 automatically once someone creates a repository group inside RhodeCode.
388
389
390 .. code-block:: ini
391
392 ##############################################
393 ### Subversion proxy support (mod_dav_svn) ###
394 ##############################################
395 ## Enable or disable the config file generation.
396 svn.proxy.generate_config = true
397 ## Generate config file with `SVNListParentPath` set to `On`.
398 svn.proxy.list_parent_path = true
399 ## Set location and file name of generated config file.
400 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
401 ## File system path to the directory containing the repositories served by
402 ## RhodeCode.
403 svn.proxy.parent_path_root = /path/to/repo_store
404 ## Used as a prefix to the <Location> block in the generated config file. In
405 ## most cases it should be set to `/`.
406 svn.proxy.location_root = /
407
408
409 This would create a special template file called ```mod_dav_svn.conf```. We
410 used that file path in the apache config above inside the Include statement.
411
412
413 Using |svn|
414 ===========
415
416 Once |svn| has been enabled on your instance, you can use it with the
417 following examples. For more |svn| information, see the `Subversion Red Book`_
418
419 .. code-block:: bash
420
421 # To clone a repository
422 svn checkout http://my-svn-server.example.com/my-svn-repo
423
424 # svn commit
425 svn commit
426
427 .. _Subversion Red Book: http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.ref.svn
428
429
430 .. _Ask Ubuntu: http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue No newline at end of file
@@ -1,20 +1,21 b''
1 .. _contributing:
1 .. _contributing:
2
2
3 Contributing to RhodeCode
3 Contributing to RhodeCode
4 =========================
4 =========================
5
5
6
6
7
7
8 Welcome to the contribution guides and development docs of RhodeCode.
8 Welcome to the contribution guides and development docs of RhodeCode.
9
9
10
10
11
11
12 .. toctree::
12 .. toctree::
13 :maxdepth: 1
13 :maxdepth: 1
14
14
15 overview
15 overview
16 testing/index
16 testing/index
17 dev-setup
17 dev-setup
18 db-schema
18 db-schema
19 dev-settings
19 dev-settings
20 api
20 api
21 dependencies
@@ -1,157 +1,160 b''
1 .. _dev-setup:
1 .. _dev-setup:
2
2
3 ===================
3 ===================
4 Development setup
4 Development setup
5 ===================
5 ===================
6
6
7
7
8 RhodeCode Enterprise runs inside a Nix managed environment. This ensures build
8 RhodeCode Enterprise runs inside a Nix managed environment. This ensures build
9 environment dependencies are correctly declared and installed during setup.
9 environment dependencies are correctly declared and installed during setup.
10 It also enables atomic upgrades, rollbacks, and multiple instances of RhodeCode
10 It also enables atomic upgrades, rollbacks, and multiple instances of RhodeCode
11 Enterprise running with isolation.
11 Enterprise running with isolation.
12
12
13 To set up RhodeCode Enterprise inside the Nix environment, use the following steps:
13 To set up RhodeCode Enterprise inside the Nix environment, use the following steps:
14
14
15
15
16
16
17 Setup Nix Package Manager
17 Setup Nix Package Manager
18 -------------------------
18 -------------------------
19
19
20 To install the Nix Package Manager, please run::
20 To install the Nix Package Manager, please run::
21
21
22 $ curl https://nixos.org/nix/install | sh
22 $ curl https://nixos.org/nix/install | sh
23
23
24 or go to https://nixos.org/nix/ and follow the installation instructions.
24 or go to https://nixos.org/nix/ and follow the installation instructions.
25 Once this is correctly set up on your system, you should be able to use the
25 Once this is correctly set up on your system, you should be able to use the
26 following commands:
26 following commands:
27
27
28 * `nix-env`
28 * `nix-env`
29
29
30 * `nix-shell`
30 * `nix-shell`
31
31
32
32
33 .. tip::
33 .. tip::
34
34
35 Update your channels frequently by running ``nix-channel --upgrade``.
35 Update your channels frequently by running ``nix-channel --upgrade``.
36
36
37
37
38 Switch nix to the latest STABLE channel
38 Switch nix to the latest STABLE channel
39 ---------------------------------------
39 ---------------------------------------
40
40
41 run::
41 run::
42
42
43 nix-channel --add https://nixos.org/channels/nixos-16.03 nixpkgs
43 nix-channel --add https://nixos.org/channels/nixos-16.03 nixpkgs
44
44
45 Followed by::
45 Followed by::
46
46
47 nix-channel --update
47 nix-channel --update
48
48
49
49
50 Clone the required repositories
50 Clone the required repositories
51 -------------------------------
51 -------------------------------
52
52
53 After Nix is set up, clone the RhodeCode Enterprise Community Edition and
53 After Nix is set up, clone the RhodeCode Enterprise Community Edition and
54 RhodeCode VCSServer repositories into the same directory.
54 RhodeCode VCSServer repositories into the same directory.
55 To do this, use the following example::
55 To do this, use the following example::
56
56
57 mkdir rhodecode-develop && cd rhodecode-develop
57 mkdir rhodecode-develop && cd rhodecode-develop
58 hg clone https://code.rhodecode.com/rhodecode-enterprise-ce
58 hg clone https://code.rhodecode.com/rhodecode-enterprise-ce
59 hg clone https://code.rhodecode.com/rhodecode-vcsserver
59 hg clone https://code.rhodecode.com/rhodecode-vcsserver
60
60
61 .. note::
61 .. note::
62
62
63 If you cannot clone the repository, please request read permissions
63 If you cannot clone the repository, please request read permissions
64 via support@rhodecode.com
64 via support@rhodecode.com
65
65
66
66
67
67
68 Enter the Development Shell
68 Enter the Development Shell
69 ---------------------------
69 ---------------------------
70
70
71 The final step is to start the development shell. To do this, run the
71 The final step is to start the development shell. To do this, run the
72 following command from inside the cloned repository::
72 following command from inside the cloned repository::
73
73
74 cd ~/rhodecode-enterprise-ce
74 cd ~/rhodecode-enterprise-ce
75 nix-shell
75 nix-shell
76
76
77 .. note::
77 .. note::
78
78
79 On the first run, this will take a while to download and optionally compile
79 On the first run, this will take a while to download and optionally compile
80 a few things. The following runs will be faster. The development shell works
80 a few things. The following runs will be faster. The development shell works
81 fine on both MacOS and Linux platforms.
81 fine on both MacOS and Linux platforms.
82
82
83
83
84
84
85 Creating a Development Configuration
85 Creating a Development Configuration
86 ------------------------------------
86 ------------------------------------
87
87
88 To create a development environment for RhodeCode Enterprise,
88 To create a development environment for RhodeCode Enterprise,
89 use the following steps:
89 use the following steps:
90
90
91 1. Create a copy of `~/rhodecode-enterprise-ce/configs/development.ini`
91 1. Create a copy of `~/rhodecode-enterprise-ce/configs/development.ini`
92 2. Adjust the configuration settings to your needs
92 2. Adjust the configuration settings to your needs
93
93
94 .. note::
94 .. note::
95
95
96 It is recommended to use the name `dev.ini`.
96 It is recommended to use the name `dev.ini`.
97
97
98
98
99 Setup the Development Database
99 Setup the Development Database
100 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
100 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
101
101
102 To create a development database, use the following example. This is a one
102 To create a development database, use the following example. This is a one
103 time operation::
103 time operation::
104
104
105 paster setup-rhodecode dev.ini \
105 paster setup-rhodecode dev.ini \
106 --user=admin --password=secret \
106 --user=admin --password=secret \
107 --email=admin@example.com \
107 --email=admin@example.com \
108 --repos=~/my_dev_repos
108 --repos=~/my_dev_repos
109
109
110
110
111 Compile CSS and JavaScript
111 Compile CSS and JavaScript
112 ^^^^^^^^^^^^^^^^^^^^^^^^^^
112 ^^^^^^^^^^^^^^^^^^^^^^^^^^
113
113
114 To use the application's frontend, you will need to compile the CSS and
114 To use the application's frontend and prepare it for production deployment,
115 JavaScript with Grunt. This is easily done from within the nix-shell using the
115 you will need to compile the CSS and JavaScript with Grunt.
116 following command::
116 This is easily done from within the nix-shell using the following command::
117
118 grunt
117
119
118 make web-build
120 When developing new features you will need to recompile following any
121 changes made to the CSS or JavaScript files when developing the code::
119
122
120 You will need to recompile following any changes made to the CSS or JavaScript
123 grunt watch
121 files.
122
124
125 This prepares the development (with comments/whitespace) versions of files.
123
126
124 Start the Development Server
127 Start the Development Server
125 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
128 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
126
129
127 From the rhodecode-vcsserver directory, start the development server in another
130 From the rhodecode-vcsserver directory, start the development server in another
128 nix-shell, using the following command::
131 nix-shell, using the following command::
129
132
130 pserve configs/development.ini http_port=9900
133 pserve configs/development.ini http_port=9900
131
134
132 In the adjacent nix-shell which you created for your development server, you may
135 In the adjacent nix-shell which you created for your development server, you may
133 now start CE with the following command::
136 now start CE with the following command::
134
137
135
138
136 rcserver dev.ini
139 rcserver dev.ini
137
140
138 .. note::
141 .. note::
139
142
140 To automatically refresh - and recompile the frontend assets - when changes
143 To automatically refresh - and recompile the frontend assets - when changes
141 are made in the source code, you can use the option `--reload`.
144 are made in the source code, you can use the option `--reload`.
142
145
143
146
144 Run the Environment Tests
147 Run the Environment Tests
145 ^^^^^^^^^^^^^^^^^^^^^^^^^
148 ^^^^^^^^^^^^^^^^^^^^^^^^^
146
149
147 Please make sure that the tests are passing to verify that your environment is
150 Please make sure that the tests are passing to verify that your environment is
148 set up correctly. RhodeCode uses py.test to run tests.
151 set up correctly. RhodeCode uses py.test to run tests.
149 While your instance is running, start a new nix-shell and simply run
152 While your instance is running, start a new nix-shell and simply run
150 ``make test`` to run the basic test suite.
153 ``make test`` to run the basic test suite.
151
154
152
155
153 Need Help?
156 Need Help?
154 ^^^^^^^^^^
157 ^^^^^^^^^^
155
158
156 Join us on Slack via https://rhodecode.com/join or post questions in our
159 Join us on Slack via https://rhodecode.com/join or post questions in our
157 Community Portal at https://community.rhodecode.com
160 Community Portal at https://community.rhodecode.com
@@ -1,177 +1,182 b''
1
1
2 ======================
2 ======================
3 Contribution Standards
3 Contribution Standards
4 ======================
4 ======================
5
5
6 Standards help to improve the quality of our product and its development. Herein
6 Standards help to improve the quality of our product and its development. Herein
7 we define our standards for processes and development to maintain consistency
7 we define our standards for processes and development to maintain consistency
8 and function well as a community. It is a work in progress; modifications to this
8 and function well as a community. It is a work in progress; modifications to this
9 document should be discussed and agreed upon by the community.
9 document should be discussed and agreed upon by the community.
10
10
11
11
12 --------------------------------------------------------------------------------
12 --------------------------------------------------------------------------------
13
13
14 Code
14 Code
15 ====
15 ====
16
16
17 This provides an outline for standards we use in our codebase to keep our code
17 This provides an outline for standards we use in our codebase to keep our code
18 easy to read and easy to maintain. Much of our code guidelines are based on the
18 easy to read and easy to maintain. Much of our code guidelines are based on the
19 book `Clean Code <http://www.pearsonhighered.com/educator/product/Clean-Code-A-Handbook-of-Agile-Software-Craftsmanship/9780132350884.page>`_
19 book `Clean Code <http://www.pearsonhighered.com/educator/product/Clean-Code-A-Handbook-of-Agile-Software-Craftsmanship/9780132350884.page>`_
20 by Robert Martin.
20 by Robert Martin.
21
21
22 We maintain a Tech Glossary to provide consistency in terms and symbolic names
22 We maintain a Tech Glossary to provide consistency in terms and symbolic names
23 used for items and concepts within the application. This is found in the CE
23 used for items and concepts within the application. This is found in the CE
24 project in /docs-internal/glossary.rst
24 project in /docs-internal/glossary.rst
25
25
26
26
27 Refactoring
27 Refactoring
28 -----------
28 -----------
29 Make it better than you found it!
29 Make it better than you found it!
30
30
31 Our codebase can always use improvement and often benefits from refactoring.
31 Our codebase can always use improvement and often benefits from refactoring.
32 New code should be refactored as it is being written, and old code should be
32 New code should be refactored as it is being written, and old code should be
33 treated with the same care as if it was new. Before doing any refactoring,
33 treated with the same care as if it was new. Before doing any refactoring,
34 ensure that there is test coverage on the affected code; this will help
34 ensure that there is test coverage on the affected code; this will help
35 minimize issues.
35 minimize issues.
36
36
37
37
38 Python
38 Python
39 ------
39 ------
40 For Python, we use `PEP8 <https://www.python.org/dev/peps/pep-0008/>`_.
40 For Python, we use `PEP8 <https://www.python.org/dev/peps/pep-0008/>`_.
41 We adjust lines of code to under 80 characters and use 4 spaces for indentation.
41 We adjust lines of code to under 80 characters and use 4 spaces for indentation.
42
42
43
43
44 JavaScript
44 JavaScript
45 ----------
45 ----------
46 This currently remains undefined. Suggestions welcome!
46 This currently remains undefined. Suggestions welcome!
47
47
48 However, we have decided to go forward with W3C standards and picked
49 WebComponents as the foundation of user interface. New functionality should
50 be implemented as components using the
51 `Polymer Project` <https://www.polymer-project.org>`_ library
52 and should avoid external dependencies like `jquery`.
48
53
49 HTML
54 HTML
50 ----
55 ----
51 Unfortunately, we currently have no strict HTML standards, but there are a few
56 Unfortunately, we currently have no strict HTML standards, but there are a few
52 guidelines we do follow. Templates must work in all modern browsers. HTML should
57 guidelines we do follow. Templates must work in all modern browsers. HTML should
53 be clean and easy to read, and additionally should be free of inline CSS or
58 be clean and easy to read, and additionally should be free of inline CSS or
54 JavaScript. It is recommended to use data attributes for JS actions where
59 JavaScript. It is recommended to use data attributes for JS actions where
55 possible in order to separate it from styling and prevent unintentional changes.
60 possible in order to separate it from styling and prevent unintentional changes.
56
61
57
62
58 LESS/CSS
63 LESS/CSS
59 --------
64 --------
60 We use LESS for our CSS; see :doc:`frontend` for structure and formatting
65 We use LESS for our CSS; see :doc:`frontend` for structure and formatting
61 guidelines.
66 guidelines.
62
67
63
68
64 Linters
69 Linters
65 -------
70 -------
66 Currently, we have a linter for pull requests which checks code against PEP8.
71 Currently, we have a linter for pull requests which checks code against PEP8.
67 We intend to add more in the future as we clarify standards.
72 We intend to add more in the future as we clarify standards.
68
73
69
74
70 --------------------------------------------------------------------------------
75 --------------------------------------------------------------------------------
71
76
72 Naming Conventions
77 Naming Conventions
73 ==================
78 ==================
74
79
75 These still need to be defined for naming everything from Python variables to
80 These still need to be defined for naming everything from Python variables to
76 HTML classes to files and folders.
81 HTML classes to files and folders.
77
82
78
83
79 --------------------------------------------------------------------------------
84 --------------------------------------------------------------------------------
80
85
81 Testing
86 Testing
82 =======
87 =======
83
88
84 Testing is a very important aspect of our process, especially as we are our own
89 Testing is a very important aspect of our process, especially as we are our own
85 quality control team. While it is of course unrealistic to hit every potential
90 quality control team. While it is of course unrealistic to hit every potential
86 combination, our goal is to cover every line of Python code with a test.
91 combination, our goal is to cover every line of Python code with a test.
87
92
88 The following is a brief introduction to our test suite. Our tests are primarily
93 The following is a brief introduction to our test suite. Our tests are primarily
89 written using `py.test <http://pytest.org/>`_
94 written using `py.test <http://pytest.org/>`_
90
95
91
96
92 Acceptance Tests
97 Acceptance Tests
93 ----------------
98 ----------------
94 Also known as "ac tests", these test from the user and business perspective to
99 Also known as "ac tests", these test from the user and business perspective to
95 check if the requirements of a feature are met. Scenarios are created at a
100 check if the requirements of a feature are met. Scenarios are created at a
96 feature's inception and help to define its value.
101 feature's inception and help to define its value.
97
102
98 py.test is used for ac tests; they are located in a repo separate from the
103 py.test is used for ac tests; they are located in a repo separate from the
99 other tests which follow. Each feature has a .feature file which contains a
104 other tests which follow. Each feature has a .feature file which contains a
100 brief description and the scenarios to be tested.
105 brief description and the scenarios to be tested.
101
106
102
107
103 Functional Tests
108 Functional Tests
104 ----------------
109 ----------------
105 These test specific functionality in the application which checks through the
110 These test specific functionality in the application which checks through the
106 entire stack. Typically these are user actions or permissions which go through
111 entire stack. Typically these are user actions or permissions which go through
107 the web browser. They are located in rhodecode/tests.
112 the web browser. They are located in rhodecode/tests.
108
113
109
114
110 Unit Tests
115 Unit Tests
111 ----------
116 ----------
112 These test isolated, individual modules to ensure that they function correctly.
117 These test isolated, individual modules to ensure that they function correctly.
113 They are located in rhodecode/tests.
118 They are located in rhodecode/tests.
114
119
115
120
116 Integration Tests
121 Integration Tests
117 -----------------
122 -----------------
118 These are used for testing performance of larger systems than the unit tests.
123 These are used for testing performance of larger systems than the unit tests.
119 They are located in rhodecode/tests.
124 They are located in rhodecode/tests.
120
125
121
126
122 JavaScript Testing
127 JavaScript Testing
123 ------------------
128 ------------------
124 Currently, we have not defined how to test our JavaScript code.
129 Currently, we have not defined how to test our JavaScript code.
125
130
126
131
127 --------------------------------------------------------------------------------
132 --------------------------------------------------------------------------------
128
133
129 Pull Requests
134 Pull Requests
130 =============
135 =============
131
136
132 Pull requests should generally contain only one thing: a single feature, one bug
137 Pull requests should generally contain only one thing: a single feature, one bug
133 fix, etc.. The commit history should be concise and clean, and the pull request
138 fix, etc.. The commit history should be concise and clean, and the pull request
134 should contain the ticket number (also a good idea for the commits themselves)
139 should contain the ticket number (also a good idea for the commits themselves)
135 to provide context for the reviewer.
140 to provide context for the reviewer.
136
141
137 See also: :doc:`checklist-pull-request`
142 See also: :doc:`checklist-pull-request`
138
143
139
144
140 Reviewers
145 Reviewers
141 ---------
146 ---------
142 Each pull request must be approved by at least one member of the RhodeCode
147 Each pull request must be approved by at least one member of the RhodeCode
143 team. Assignments may be based on expertise or familiarity with a particular
148 team. Assignments may be based on expertise or familiarity with a particular
144 area of code, or simply availability. Switching up or adding extra community
149 area of code, or simply availability. Switching up or adding extra community
145 members for different pull requests helps to share knowledge as well as provide
150 members for different pull requests helps to share knowledge as well as provide
146 other perspectives.
151 other perspectives.
147
152
148
153
149 Responsibility
154 Responsibility
150 --------------
155 --------------
151 The community is responsible for maintaining features and this must be taken
156 The community is responsible for maintaining features and this must be taken
152 into consideration. External contributions must be held to the same standards
157 into consideration. External contributions must be held to the same standards
153 as internal contributions.
158 as internal contributions.
154
159
155
160
156 Feature Switch
161 Feature Switch
157 --------------
162 --------------
158 Experimental and work-in-progress features can be hidden behind one of two
163 Experimental and work-in-progress features can be hidden behind one of two
159 switches:
164 switches:
160
165
161 * A setting can be added to the Labs page in the Admin section which may allow
166 * A setting can be added to the Labs page in the Admin section which may allow
162 customers to access and toggle additional features.
167 customers to access and toggle additional features.
163 * For work-in-progress or other features where customer access is not desired,
168 * For work-in-progress or other features where customer access is not desired,
164 use a custom setting in the .ini file as a trigger.
169 use a custom setting in the .ini file as a trigger.
165
170
166
171
167 --------------------------------------------------------------------------------
172 --------------------------------------------------------------------------------
168
173
169 Tickets
174 Tickets
170 =======
175 =======
171
176
172 Redmine tickets are a crucial part of our development process. Any code added or
177 Redmine tickets are a crucial part of our development process. Any code added or
173 changed in our codebase should have a corresponding ticket to document it. With
178 changed in our codebase should have a corresponding ticket to document it. With
174 this in mind, it is important that tickets be as clear and concise as possible,
179 this in mind, it is important that tickets be as clear and concise as possible,
175 including what the expected outcome is.
180 including what the expected outcome is.
176
181
177 See also: :doc:`checklist-tickets`
182 See also: :doc:`checklist-tickets`
@@ -1,61 +1,66 b''
1
1
2 .. _test-unit-and-functional:
2 .. _test-unit-and-functional:
3
3
4 ===========================
4 ===========================
5 Unit and Functional Tests
5 Unit and Functional Tests
6 ===========================
6 ===========================
7
7
8
8
9
9
10 py.test based test suite
10 py.test based test suite
11 ========================
11 ========================
12
12
13
13
14 The test suite is in the folder :file:`rhodecode/tests/` and should be run with
14 The test suite is in the folder :file:`rhodecode/tests/` and should be run with
15 the test runner `py.test` inside of your `nix-shell` environment::
15 the test runner `py.test` inside of your `nix-shell` environment::
16
16
17 # In case you need the cythonized version
18 CYTHONIZE=1 python setup.py develop --prefix=$tmp_path
19
20 py.test rhodecode
17 py.test rhodecode
21
18
22
19
23
20
24 py.test integration
21 py.test integration
25 -------------------
22 -------------------
26
23
27 The integration with the test runner is based on the following three parts:
24 The integration with the test runner is based on the following three parts:
28
25
29 - `pytest_pylons` is a py.test plugin which does the integration with the
26 - :file:`rhodecode/tests/pylons_plugin.py` is a py.test plugin which does the
30 Pylons web framework. It sets up the Pylons environment based on the given ini
27 integration with the Pylons web framework. It sets up the Pylons environment
31 file.
28 based on the given ini file.
32
29
33 Tests which depend on the Pylons environment to be set up must request the
30 Tests which depend on the Pylons environment to be set up must request the
34 fixture `pylonsapp`.
31 fixture `pylonsapp`.
35
32
36 - :file:`rhodecode/tests/plugin.py` contains the integration of py.test with
33 - :file:`rhodecode/tests/plugin.py` contains the integration of py.test with
37 RhodeCode Enterprise itself.
34 RhodeCode Enterprise itself and it takes care of setting up the needed parts
35 of the Pyramid framework.
38
36
39 - :file:`conftest.py` plugins are used to provide a special integration for
37 - :file:`conftest.py` plugins are used to provide a special integration for
40 certain groups of tests based on the directory location.
38 certain groups of tests based on the directory location.
41
39
42
40
41 .. note::
42
43 We are migrating from Pylons to its successor Pyramid. Eventually the role of
44 the file `pylons_plugin.py` will change to provide only a Pyramid
45 integration.
46
47
43
48
44 VCS backend selection
49 VCS backend selection
45 ---------------------
50 ---------------------
46
51
47 The py.test integration provides a parameter `--backends`. It will skip all
52 The py.test integration provides a parameter `--backends`. It will skip all
48 tests which are marked for other backends.
53 tests which are marked for other backends.
49
54
50 To run only Subversion tests::
55 To run only Subversion tests::
51
56
52 py.test rhodecode --backends=svn
57 py.test rhodecode --backends=svn
53
58
54
59
55
60
56 Frontend / Styling support
61 Frontend / Styling support
57 ==========================
62 ==========================
58
63
59 All relevant style components have an example inside of the "Style" section
64 All relevant style components have an example inside of the "Style" section
60 within the application. Enable the setting `debug_style` to make this section
65 within the application. Enable the setting `debug_style` to make this section
61 visible in your local instance of the application.
66 visible in your local instance of the application.
@@ -1,109 +1,110 b''
1 .. _quick-start:
1 .. _quick-start:
2
2
3 Quick Start Installation Guide
3 Quick Start Installation Guide
4 ==============================
4 ==============================
5
5
6 .. important::
6 .. important::
7
7
8 These are quick start instructions. To optimize your |RCE|,
8 These are quick start instructions. To optimize your |RCE|,
9 |RCC|, and |RCT| usage, read the more detailed instructions in our guides.
9 |RCC|, and |RCT| usage, read the more detailed instructions in our guides.
10 For detailed installation instructions, see
10 For detailed installation instructions, see
11 :ref:`RhodeCode Control Documentation <control:rcc>`
11 :ref:`RhodeCode Control Documentation <control:rcc>`
12
12
13 .. tip::
13 .. tip::
14
14
15 If using a non-SQLite database, install and configure the database, create
15 If using a non-SQLite database, install and configure the database, create
16 a new user, and grant permissions. You will be prompted for this user's
16 a new user, and grant permissions. You will be prompted for this user's
17 credentials during |RCE| installation. See the relevant database
17 credentials during |RCE| installation. See the relevant database
18 documentation for more details.
18 documentation for more details.
19
19
20 To get |RCE| up and running, run through the below steps:
20 To get |RCE| up and running, run through the below steps:
21
21
22 1. Download the latest |RCC| installer from your `rhodecode.com`_ profile
22 1. Download the latest |RCC| installer from `rhodecode.com/download`_.
23 or main page.
24 If you don't have an account, sign up at `rhodecode.com/register`_.
23 If you don't have an account, sign up at `rhodecode.com/register`_.
25
24
26 2. Run the |RCC| installer and accept the End User Licence using the
25 2. Run the |RCC| installer and accept the End User Licence using the
27 following example:
26 following example:
28
27
29 .. code-block:: bash
28 .. code-block:: bash
30
29
31 $ chmod 755 RhodeCode-installer-linux-*
30 $ chmod 755 RhodeCode-installer-linux-*
32 $ ./RhodeCode-installer-linux-*
31 $ ./RhodeCode-installer-linux-*
33
32
34 3. Install a VCS Server, and configure it to start at boot.
33 3. Install a VCS Server, and configure it to start at boot.
35
34
36 .. code-block:: bash
35 .. code-block:: bash
37
36
38 $ rccontrol install VCSServer
37 $ rccontrol install VCSServer
39
38
40 Agree to the licence agreement? [y/N]: y
39 Agree to the licence agreement? [y/N]: y
41 IP to start the server on [127.0.0.1]:
40 IP to start the server on [127.0.0.1]:
42 Port for the server to start [10005]:
41 Port for the server to start [10005]:
43 Creating new instance: vcsserver-1
42 Creating new instance: vcsserver-1
44 Installing RhodeCode VCSServer
43 Installing RhodeCode VCSServer
45 Configuring RhodeCode VCS Server ...
44 Configuring RhodeCode VCS Server ...
46 Supervisord state is: RUNNING
45 Supervisord state is: RUNNING
47 Added process group vcsserver-1
46 Added process group vcsserver-1
48
47
49
48
50 4. Install |RCEE| or |RCCE|. If using MySQL or PostgreSQL, during
49 4. Install |RCEE| or |RCCE|. If using MySQL or PostgreSQL, during
51 installation you'll be asked for your database credentials, so have them at hand.
50 installation you'll be asked for your database credentials, so have them at hand.
52 Mysql or Postgres needs to be running and a new database needs to be created.
51 Mysql or Postgres needs to be running and a new database needs to be created.
53 You don't need any credentials or to create a database for SQLite.
52 You don't need any credentials or to create a database for SQLite.
54
53
55 .. code-block:: bash
54 .. code-block:: bash
56 :emphasize-lines: 11-16
55 :emphasize-lines: 11-16
57
56
58 $ rccontrol install Community
57 $ rccontrol install Community
59
58
60 or
59 or
61
60
62 $ rccontrol install Enterprise
61 $ rccontrol install Enterprise
63
62
64 Username [admin]: username
63 Username [admin]: username
65 Password (min 6 chars):
64 Password (min 6 chars):
66 Repeat for confirmation:
65 Repeat for confirmation:
67 Email: your@mail.com
66 Email: your@mail.com
68 Respositories location [/home/brian/repos]:
67 Respositories location [/home/brian/repos]:
69 IP to start the Enterprise server on [127.0.0.1]:
68 IP to start the Enterprise server on [127.0.0.1]:
70 Port for the Enterprise server to use [10004]:
69 Port for the Enterprise server to use [10004]:
71 Database type - [s]qlite, [m]ysql, [p]ostresql:
70 Database type - [s]qlite, [m]ysql, [p]ostresql:
72 PostgreSQL selected
71 PostgreSQL selected
73 Database host [127.0.0.1]:
72 Database host [127.0.0.1]:
74 Database port [5432]:
73 Database port [5432]:
75 Database username: db-user-name
74 Database username: db-user-name
76 Database password: somepassword
75 Database password: somepassword
77 Database name: example-db-name
76 Database name: example-db-name
78
77
79 5. Check the status of your installation. You |RCEE|/|RCCE| instance runs
78 5. Check the status of your installation. You |RCEE|/|RCCE| instance runs
80 on the URL displayed in the status message.
79 on the URL displayed in the status message.
81
80
82 .. code-block:: bash
81 .. code-block:: bash
83
82
84 $ rccontrol status
83 $ rccontrol status
85
84
86 - NAME: enterprise-1
85 - NAME: enterprise-1
87 - STATUS: RUNNING
86 - STATUS: RUNNING
88 - TYPE: Enterprise
87 - TYPE: Enterprise
89 - VERSION: 4.1.0
88 - VERSION: 4.1.0
90 - URL: http://127.0.0.1:10003
89 - URL: http://127.0.0.1:10003
91
90
92 - NAME: vcsserver-1
91 - NAME: vcsserver-1
93 - STATUS: RUNNING
92 - STATUS: RUNNING
94 - TYPE: VCSServer
93 - TYPE: VCSServer
95 - VERSION: 4.1.0
94 - VERSION: 4.1.0
96 - URL: http://127.0.0.1:10001
95 - URL: http://127.0.0.1:10001
97
96
98 .. note::
97 .. note::
99
98
100 Recommended post quick start install instructions:
99 Recommended post quick start install instructions:
101
100
102 * Read the documentation
101 * Read the documentation
103 * Carry out the :ref:`rhodecode-post-instal-ref`
102 * Carry out the :ref:`rhodecode-post-instal-ref`
104 * Set up :ref:`indexing-ref`
103 * Set up :ref:`indexing-ref`
105 * Familiarise yourself with the :ref:`rhodecode-admin-ref` section.
104 * Familiarise yourself with the :ref:`rhodecode-admin-ref` section.
106
105
107 .. _rhodecode.com/download/: https://rhodecode.com/download/
106 .. _rhodecode.com/download/: https://rhodecode.com/download/
108 .. _rhodecode.com: https://rhodecode.com/
107 .. _rhodecode.com: https://rhodecode.com/
109 .. _rhodecode.com/register: https://rhodecode.com/register/
108 .. _rhodecode.com/register: https://rhodecode.com/register/
109 .. _rhodecode.com/download: https://rhodecode.com/download/
110
@@ -1,24 +1,24 b''
1 .. _install-postgresql-database:
1 .. _install-postgresql-database:
2
2
3 PostgreSQL
3 PostgreSQL
4 ----------
4 ----------
5
5
6 To use a PostgreSQL database you should install and configurevthe database
6 To use a PostgreSQL database, you should install and configure the database
7 before installing |RCV|. This is becausevduring |RCV| installation you will
7 before installing |RCV|. This is because during |RCV| installation you will
8 setup a connection to your PostgreSQL database. To work with PostgreSQL,
8 setup the connection to your PostgreSQL database. To work with PostgreSQL,
9 use the following steps:
9 use the following steps:
10
10
11 1. Depending on your |os|, install avPostgreSQL database following the
11 1. Depending on your |os|, install a PostgreSQL database following the
12 appropriate instructions from the `PostgreSQL website`_.
12 appropriate instructions from the `PostgreSQL website`_.
13 2. Configure the database with a username and password which you will use
13 2. Configure the database with a username and password, which you will use
14 with |RCV|.
14 with |RCV|.
15 3. Install |RCV|, and during installation select PostgreSQL as your database.
15 3. Install |RCV|, and during installation select PostgreSQL as your database.
16 4. Enter the following information to during the database setup:
16 4. Enter the following information during the database setup:
17
17
18 * Your network IP Address
18 * Your network IP Address
19 * The port number for MySQL access. The default MySQL port is ``5434``
19 * The port number for PostgreSQL access; the default port is ``5434``
20 * Your database username
20 * Your database username
21 * Your database password
21 * Your database password
22 * A new database name
22 * A new database name
23
23
24 .. _PostgreSQL website: http://www.postgresql.org/
24 .. _PostgreSQL website: http://www.postgresql.org/
@@ -1,86 +1,87 b''
1 .. _rhodecode-release-notes-ref:
1 .. _rhodecode-release-notes-ref:
2
2
3 Release Notes
3 Release Notes
4 =============
4 =============
5
5
6 |RCE| 4.x Versions
6 |RCE| 4.x Versions
7 ------------------
7 ------------------
8
8
9 .. toctree::
9 .. toctree::
10 :maxdepth: 1
10 :maxdepth: 1
11
11
12 release-notes-4.4.0.rst
12 release-notes-4.3.1.rst
13 release-notes-4.3.1.rst
13 release-notes-4.3.0.rst
14 release-notes-4.3.0.rst
14 release-notes-4.2.1.rst
15 release-notes-4.2.1.rst
15 release-notes-4.2.0.rst
16 release-notes-4.2.0.rst
16 release-notes-4.1.2.rst
17 release-notes-4.1.2.rst
17 release-notes-4.1.1.rst
18 release-notes-4.1.1.rst
18 release-notes-4.1.0.rst
19 release-notes-4.1.0.rst
19 release-notes-4.0.1.rst
20 release-notes-4.0.1.rst
20 release-notes-4.0.0.rst
21 release-notes-4.0.0.rst
21
22
22 |RCE| 3.x Versions
23 |RCE| 3.x Versions
23 ------------------
24 ------------------
24
25
25 .. toctree::
26 .. toctree::
26 :maxdepth: 1
27 :maxdepth: 1
27
28
28 release-notes-3.8.4.rst
29 release-notes-3.8.4.rst
29 release-notes-3.8.3.rst
30 release-notes-3.8.3.rst
30 release-notes-3.8.2.rst
31 release-notes-3.8.2.rst
31 release-notes-3.8.1.rst
32 release-notes-3.8.1.rst
32 release-notes-3.8.0.rst
33 release-notes-3.8.0.rst
33 release-notes-3.7.1.rst
34 release-notes-3.7.1.rst
34 release-notes-3.7.0.rst
35 release-notes-3.7.0.rst
35 release-notes-3.6.1.rst
36 release-notes-3.6.1.rst
36 release-notes-3.6.0.rst
37 release-notes-3.6.0.rst
37 release-notes-3.5.2.rst
38 release-notes-3.5.2.rst
38 release-notes-3.5.1.rst
39 release-notes-3.5.1.rst
39 release-notes-3.5.0.rst
40 release-notes-3.5.0.rst
40 release-notes-3.4.1.rst
41 release-notes-3.4.1.rst
41 release-notes-3.4.0.rst
42 release-notes-3.4.0.rst
42 release-notes-3.3.4.rst
43 release-notes-3.3.4.rst
43 release-notes-3.3.3.rst
44 release-notes-3.3.3.rst
44 release-notes-3.3.2.rst
45 release-notes-3.3.2.rst
45 release-notes-3.3.1.rst
46 release-notes-3.3.1.rst
46 release-notes-3.3.0.rst
47 release-notes-3.3.0.rst
47 release-notes-3.2.3.rst
48 release-notes-3.2.3.rst
48 release-notes-3.2.2.rst
49 release-notes-3.2.2.rst
49 release-notes-3.2.1.rst
50 release-notes-3.2.1.rst
50 release-notes-3.2.0.rst
51 release-notes-3.2.0.rst
51 release-notes-3.1.1.rst
52 release-notes-3.1.1.rst
52 release-notes-3.1.0.rst
53 release-notes-3.1.0.rst
53 release-notes-3.0.2.rst
54 release-notes-3.0.2.rst
54 release-notes-3.0.1.rst
55 release-notes-3.0.1.rst
55 release-notes-3.0.0.rst
56 release-notes-3.0.0.rst
56
57
57 |RCE| 2.x Versions
58 |RCE| 2.x Versions
58 ------------------
59 ------------------
59
60
60 .. toctree::
61 .. toctree::
61 :maxdepth: 1
62 :maxdepth: 1
62
63
63 release-notes-2.2.8.rst
64 release-notes-2.2.8.rst
64 release-notes-2.2.7.rst
65 release-notes-2.2.7.rst
65 release-notes-2.2.6.rst
66 release-notes-2.2.6.rst
66 release-notes-2.2.5.rst
67 release-notes-2.2.5.rst
67 release-notes-2.2.4.rst
68 release-notes-2.2.4.rst
68 release-notes-2.2.3.rst
69 release-notes-2.2.3.rst
69 release-notes-2.2.2.rst
70 release-notes-2.2.2.rst
70 release-notes-2.2.1.rst
71 release-notes-2.2.1.rst
71 release-notes-2.2.0.rst
72 release-notes-2.2.0.rst
72 release-notes-2.1.0.rst
73 release-notes-2.1.0.rst
73 release-notes-2.0.2.rst
74 release-notes-2.0.2.rst
74 release-notes-2.0.1.rst
75 release-notes-2.0.1.rst
75 release-notes-2.0.0.rst
76 release-notes-2.0.0.rst
76
77
77 |RCE| 1.x Versions
78 |RCE| 1.x Versions
78 ------------------
79 ------------------
79
80
80 .. toctree::
81 .. toctree::
81 :maxdepth: 1
82 :maxdepth: 1
82
83
83 release-notes-1.7.2.rst
84 release-notes-1.7.2.rst
84 release-notes-1.7.1.rst
85 release-notes-1.7.1.rst
85 release-notes-1.7.0.rst
86 release-notes-1.7.0.rst
86 release-notes-1.6.0.rst
87 release-notes-1.6.0.rst
@@ -1,12 +1,18 b''
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "0.0.1",
3 "version": "0.0.1",
4 "devDependencies": {
4 "devDependencies": {
5 "grunt": "^0.4.5",
5 "grunt": "^0.4.5",
6 "grunt-contrib-copy": "^1.0.0",
6 "grunt-contrib-concat": "^0.5.1",
7 "grunt-contrib-concat": "^0.5.1",
7 "grunt-contrib-jshint": "^0.12.0",
8 "grunt-contrib-jshint": "^0.12.0",
8 "grunt-contrib-less": "^1.1.0",
9 "grunt-contrib-less": "^1.1.0",
9 "grunt-contrib-watch": "^0.6.1",
10 "grunt-contrib-watch": "^0.6.1",
10 "jshint": "^2.9.1-rc3"
11 "crisper": "^2.0.2",
12 "vulcanize": "^1.14.8",
13 "grunt-crisper": "^1.0.1",
14 "grunt-vulcanize": "^1.0.0",
15 "jshint": "^2.9.1-rc3",
16 "bower": "^1.7.9"
11 }
17 }
12 }
18 }
This diff has been collapsed as it changes many lines, (5566 lines changed) Show them Hide them
@@ -1,3341 +1,2337 b''
1 { self, fetchurl, fetchgit ? null, lib }:
1 # This file has been generated by node2nix 1.0.0. Do not edit!
2
3 {nodeEnv, fetchurl, fetchgit}:
2
4
3 {
5 let
4 by-spec."abbrev"."1" =
6 sources = {
5 self.by-version."abbrev"."1.0.7";
7 "grunt-0.4.5" = {
6 by-version."abbrev"."1.0.7" = lib.makeOverridable self.buildNodePackage {
8 name = "grunt";
7 name = "abbrev-1.0.7";
9 packageName = "grunt";
8 bin = false;
10 version = "0.4.5";
9 src = [
11 src = fetchurl {
10 (fetchurl {
12 url = "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz";
11 url = "http://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz";
13 sha1 = "56937cd5194324adff6d207631832a9d6ba4e7f0";
12 name = "abbrev-1.0.7.tgz";
14 };
13 sha1 = "5b6035b2ee9d4fb5cf859f08a9be81b208491843";
15 };
14 })
16 "grunt-contrib-copy-1.0.0" = {
15 ];
17 name = "grunt-contrib-copy";
16 buildInputs =
18 packageName = "grunt-contrib-copy";
17 (self.nativeDeps."abbrev" or []);
19 version = "1.0.0";
18 deps = {
20 src = fetchurl {
19 };
21 url = "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz";
20 peerDependencies = [
22 sha1 = "7060c6581e904b8ab0d00f076e0a8f6e3e7c3573";
21 ];
23 };
22 passthru.names = [ "abbrev" ];
24 };
23 };
25 "grunt-contrib-concat-0.5.1" = {
24 by-spec."amdefine".">=0.0.4" =
26 name = "grunt-contrib-concat";
25 self.by-version."amdefine"."1.0.0";
27 packageName = "grunt-contrib-concat";
26 by-version."amdefine"."1.0.0" = lib.makeOverridable self.buildNodePackage {
28 version = "0.5.1";
27 name = "amdefine-1.0.0";
29 src = fetchurl {
28 bin = false;
30 url = "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz";
29 src = [
31 sha1 = "953c6efdfdfd2c107ab9c85077f2d4b24d31cd49";
30 (fetchurl {
32 };
31 url = "http://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
33 };
32 name = "amdefine-1.0.0.tgz";
34 "grunt-contrib-jshint-0.12.0" = {
33 sha1 = "fd17474700cb5cc9c2b709f0be9d23ce3c198c33";
35 name = "grunt-contrib-jshint";
34 })
36 packageName = "grunt-contrib-jshint";
35 ];
37 version = "0.12.0";
36 buildInputs =
38 src = fetchurl {
37 (self.nativeDeps."amdefine" or []);
39 url = "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.12.0.tgz";
38 deps = {
40 sha1 = "f6b2f06fc715264837a7ab6c69a1ce1a689c2c29";
39 };
41 };
40 peerDependencies = [
42 };
41 ];
43 "grunt-contrib-less-1.4.0" = {
42 passthru.names = [ "amdefine" ];
44 name = "grunt-contrib-less";
43 };
45 packageName = "grunt-contrib-less";
44 by-spec."ansi-regex"."^0.2.0" =
46 version = "1.4.0";
45 self.by-version."ansi-regex"."0.2.1";
47 src = fetchurl {
46 by-version."ansi-regex"."0.2.1" = lib.makeOverridable self.buildNodePackage {
48 url = "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.0.tgz";
47 name = "ansi-regex-0.2.1";
49 sha1 = "17ee79cad21c9720ee07b3a991fab5103b513514";
48 bin = false;
50 };
49 src = [
51 };
50 (fetchurl {
52 "grunt-contrib-watch-0.6.1" = {
51 url = "http://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
53 name = "grunt-contrib-watch";
52 name = "ansi-regex-0.2.1.tgz";
54 packageName = "grunt-contrib-watch";
53 sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
55 version = "0.6.1";
54 })
56 src = fetchurl {
55 ];
57 url = "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz";
56 buildInputs =
58 sha1 = "64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15";
57 (self.nativeDeps."ansi-regex" or []);
59 };
58 deps = {
60 };
59 };
61 "crisper-2.0.2" = {
60 peerDependencies = [
62 name = "crisper";
61 ];
63 packageName = "crisper";
62 passthru.names = [ "ansi-regex" ];
64 version = "2.0.2";
63 };
65 src = fetchurl {
64 by-spec."ansi-regex"."^0.2.1" =
66 url = "https://registry.npmjs.org/crisper/-/crisper-2.0.2.tgz";
65 self.by-version."ansi-regex"."0.2.1";
67 sha1 = "188a7da3d00dcf0c64eff7f253d23dacffba7197";
66 by-spec."ansi-regex"."^2.0.0" =
68 };
67 self.by-version."ansi-regex"."2.0.0";
69 };
68 by-version."ansi-regex"."2.0.0" = lib.makeOverridable self.buildNodePackage {
70 "vulcanize-1.14.8" = {
69 name = "ansi-regex-2.0.0";
71 name = "vulcanize";
70 bin = false;
72 packageName = "vulcanize";
71 src = [
73 version = "1.14.8";
72 (fetchurl {
74 src = fetchurl {
73 url = "http://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
75 url = "https://registry.npmjs.org/vulcanize/-/vulcanize-1.14.8.tgz";
74 name = "ansi-regex-2.0.0.tgz";
76 sha1 = "3cdd6f81d9baf2c5796ddd6d2d289e45975086f7";
75 sha1 = "c5061b6e0ef8a81775e50f5d66151bf6bf371107";
77 };
76 })
78 };
77 ];
79 "grunt-crisper-1.0.1" = {
78 buildInputs =
80 name = "grunt-crisper";
79 (self.nativeDeps."ansi-regex" or []);
81 packageName = "grunt-crisper";
80 deps = {
82 version = "1.0.1";
81 };
83 src = fetchurl {
82 peerDependencies = [
84 url = "https://registry.npmjs.org/grunt-crisper/-/grunt-crisper-1.0.1.tgz";
83 ];
85 sha1 = "e7c091dcaff10deb0091e3035ca7e54008991fe7";
84 passthru.names = [ "ansi-regex" ];
86 };
85 };
87 };
86 by-spec."ansi-styles"."^1.1.0" =
88 "grunt-vulcanize-1.0.0" = {
87 self.by-version."ansi-styles"."1.1.0";
89 name = "grunt-vulcanize";
88 by-version."ansi-styles"."1.1.0" = lib.makeOverridable self.buildNodePackage {
90 packageName = "grunt-vulcanize";
89 name = "ansi-styles-1.1.0";
91 version = "1.0.0";
90 bin = false;
92 src = fetchurl {
91 src = [
93 url = "https://registry.npmjs.org/grunt-vulcanize/-/grunt-vulcanize-1.0.0.tgz";
92 (fetchurl {
94 sha1 = "f4d6cfef274f8216c06f6c290e7dbb3b9e9e3b0f";
93 url = "http://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
95 };
94 name = "ansi-styles-1.1.0.tgz";
96 };
95 sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
97 "jshint-2.9.3" = {
96 })
98 name = "jshint";
97 ];
99 packageName = "jshint";
98 buildInputs =
100 version = "2.9.3";
99 (self.nativeDeps."ansi-styles" or []);
101 src = fetchurl {
100 deps = {
102 url = "https://registry.npmjs.org/jshint/-/jshint-2.9.3.tgz";
101 };
103 sha1 = "a2e14ff85c2d6bf8c8080e5aa55129ebc6a2d320";
102 peerDependencies = [
104 };
103 ];
105 };
104 passthru.names = [ "ansi-styles" ];
106 "async-0.1.22" = {
105 };
107 name = "async";
106 by-spec."ansi-styles"."^2.1.0" =
108 packageName = "async";
107 self.by-version."ansi-styles"."2.1.0";
109 version = "0.1.22";
108 by-version."ansi-styles"."2.1.0" = lib.makeOverridable self.buildNodePackage {
110 src = fetchurl {
109 name = "ansi-styles-2.1.0";
111 url = "https://registry.npmjs.org/async/-/async-0.1.22.tgz";
110 bin = false;
112 sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
111 src = [
113 };
112 (fetchurl {
114 };
113 url = "http://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz";
115 "coffee-script-1.3.3" = {
114 name = "ansi-styles-2.1.0.tgz";
116 name = "coffee-script";
115 sha1 = "990f747146927b559a932bf92959163d60c0d0e2";
117 packageName = "coffee-script";
116 })
118 version = "1.3.3";
117 ];
119 src = fetchurl {
118 buildInputs =
120 url = "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz";
119 (self.nativeDeps."ansi-styles" or []);
121 sha1 = "150d6b4cb522894369efed6a2101c20bc7f4a4f4";
120 deps = {
122 };
121 };
123 };
122 peerDependencies = [
124 "colors-0.6.2" = {
123 ];
125 name = "colors";
124 passthru.names = [ "ansi-styles" ];
126 packageName = "colors";
125 };
127 version = "0.6.2";
126 by-spec."argparse"."~ 0.1.11" =
128 src = fetchurl {
127 self.by-version."argparse"."0.1.16";
129 url = "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
128 by-version."argparse"."0.1.16" = lib.makeOverridable self.buildNodePackage {
130 sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
129 name = "argparse-0.1.16";
131 };
130 bin = false;
132 };
131 src = [
133 "dateformat-1.0.2-1.2.3" = {
132 (fetchurl {
134 name = "dateformat";
133 url = "http://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
135 packageName = "dateformat";
134 name = "argparse-0.1.16.tgz";
136 version = "1.0.2-1.2.3";
137 src = fetchurl {
138 url = "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz";
139 sha1 = "b0220c02de98617433b72851cf47de3df2cdbee9";
140 };
141 };
142 "eventemitter2-0.4.14" = {
143 name = "eventemitter2";
144 packageName = "eventemitter2";
145 version = "0.4.14";
146 src = fetchurl {
147 url = "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
148 sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
149 };
150 };
151 "findup-sync-0.1.3" = {
152 name = "findup-sync";
153 packageName = "findup-sync";
154 version = "0.1.3";
155 src = fetchurl {
156 url = "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
157 sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
158 };
159 };
160 "glob-3.1.21" = {
161 name = "glob";
162 packageName = "glob";
163 version = "3.1.21";
164 src = fetchurl {
165 url = "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
166 sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
167 };
168 };
169 "hooker-0.2.3" = {
170 name = "hooker";
171 packageName = "hooker";
172 version = "0.2.3";
173 src = fetchurl {
174 url = "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
175 sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
176 };
177 };
178 "iconv-lite-0.2.11" = {
179 name = "iconv-lite";
180 packageName = "iconv-lite";
181 version = "0.2.11";
182 src = fetchurl {
183 url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz";
184 sha1 = "1ce60a3a57864a292d1321ff4609ca4bb965adc8";
185 };
186 };
187 "minimatch-0.2.14" = {
188 name = "minimatch";
189 packageName = "minimatch";
190 version = "0.2.14";
191 src = fetchurl {
192 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
193 sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
194 };
195 };
196 "nopt-1.0.10" = {
197 name = "nopt";
198 packageName = "nopt";
199 version = "1.0.10";
200 src = fetchurl {
201 url = "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
202 sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee";
203 };
204 };
205 "rimraf-2.2.8" = {
206 name = "rimraf";
207 packageName = "rimraf";
208 version = "2.2.8";
209 src = fetchurl {
210 url = "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
211 sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
212 };
213 };
214 "lodash-0.9.2" = {
215 name = "lodash";
216 packageName = "lodash";
217 version = "0.9.2";
218 src = fetchurl {
219 url = "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz";
220 sha1 = "8f3499c5245d346d682e5b0d3b40767e09f1a92c";
221 };
222 };
223 "underscore.string-2.2.1" = {
224 name = "underscore.string";
225 packageName = "underscore.string";
226 version = "2.2.1";
227 src = fetchurl {
228 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz";
229 sha1 = "d7c0fa2af5d5a1a67f4253daee98132e733f0f19";
230 };
231 };
232 "which-1.0.9" = {
233 name = "which";
234 packageName = "which";
235 version = "1.0.9";
236 src = fetchurl {
237 url = "https://registry.npmjs.org/which/-/which-1.0.9.tgz";
238 sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
239 };
240 };
241 "js-yaml-2.0.5" = {
242 name = "js-yaml";
243 packageName = "js-yaml";
244 version = "2.0.5";
245 src = fetchurl {
246 url = "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz";
247 sha1 = "a25ae6509999e97df278c6719da11bd0687743a8";
248 };
249 };
250 "exit-0.1.2" = {
251 name = "exit";
252 packageName = "exit";
253 version = "0.1.2";
254 src = fetchurl {
255 url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
256 sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
257 };
258 };
259 "getobject-0.1.0" = {
260 name = "getobject";
261 packageName = "getobject";
262 version = "0.1.0";
263 src = fetchurl {
264 url = "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz";
265 sha1 = "047a449789fa160d018f5486ed91320b6ec7885c";
266 };
267 };
268 "grunt-legacy-util-0.2.0" = {
269 name = "grunt-legacy-util";
270 packageName = "grunt-legacy-util";
271 version = "0.2.0";
272 src = fetchurl {
273 url = "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz";
274 sha1 = "93324884dbf7e37a9ff7c026dff451d94a9e554b";
275 };
276 };
277 "grunt-legacy-log-0.1.3" = {
278 name = "grunt-legacy-log";
279 packageName = "grunt-legacy-log";
280 version = "0.1.3";
281 src = fetchurl {
282 url = "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz";
283 sha1 = "ec29426e803021af59029f87d2f9cd7335a05531";
284 };
285 };
286 "glob-3.2.11" = {
287 name = "glob";
288 packageName = "glob";
289 version = "3.2.11";
290 src = fetchurl {
291 url = "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
292 sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
293 };
294 };
295 "lodash-2.4.2" = {
296 name = "lodash";
297 packageName = "lodash";
298 version = "2.4.2";
299 src = fetchurl {
300 url = "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
301 sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
302 };
303 };
304 "inherits-2.0.1" = {
305 name = "inherits";
306 packageName = "inherits";
307 version = "2.0.1";
308 src = fetchurl {
309 url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
310 sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
311 };
312 };
313 "minimatch-0.3.0" = {
314 name = "minimatch";
315 packageName = "minimatch";
316 version = "0.3.0";
317 src = fetchurl {
318 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
319 sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
320 };
321 };
322 "lru-cache-2.7.3" = {
323 name = "lru-cache";
324 packageName = "lru-cache";
325 version = "2.7.3";
326 src = fetchurl {
327 url = "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
328 sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
329 };
330 };
331 "sigmund-1.0.1" = {
332 name = "sigmund";
333 packageName = "sigmund";
334 version = "1.0.1";
335 src = fetchurl {
336 url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
337 sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
338 };
339 };
340 "graceful-fs-1.2.3" = {
341 name = "graceful-fs";
342 packageName = "graceful-fs";
343 version = "1.2.3";
344 src = fetchurl {
345 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
346 sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
347 };
348 };
349 "inherits-1.0.2" = {
350 name = "inherits";
351 packageName = "inherits";
352 version = "1.0.2";
353 src = fetchurl {
354 url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
355 sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
356 };
357 };
358 "abbrev-1.0.9" = {
359 name = "abbrev";
360 packageName = "abbrev";
361 version = "1.0.9";
362 src = fetchurl {
363 url = "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz";
364 sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135";
365 };
366 };
367 "argparse-0.1.16" = {
368 name = "argparse";
369 packageName = "argparse";
370 version = "0.1.16";
371 src = fetchurl {
372 url = "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
135 sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
373 sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
136 })
374 };
137 ];
375 };
138 buildInputs =
376 "esprima-1.0.4" = {
139 (self.nativeDeps."argparse" or []);
377 name = "esprima";
140 deps = {
378 packageName = "esprima";
141 "underscore-1.7.0" = self.by-version."underscore"."1.7.0";
379 version = "1.0.4";
142 "underscore.string-2.4.0" = self.by-version."underscore.string"."2.4.0";
380 src = fetchurl {
143 };
381 url = "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
144 peerDependencies = [
382 sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
145 ];
383 };
146 passthru.names = [ "argparse" ];
384 };
147 };
385 "underscore-1.7.0" = {
148 by-spec."asap"."~1.0.0" =
386 name = "underscore";
149 self.by-version."asap"."1.0.0";
387 packageName = "underscore";
150 by-version."asap"."1.0.0" = lib.makeOverridable self.buildNodePackage {
388 version = "1.7.0";
151 name = "asap-1.0.0";
389 src = fetchurl {
152 bin = false;
390 url = "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
153 src = [
391 sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
154 (fetchurl {
392 };
155 url = "http://registry.npmjs.org/asap/-/asap-1.0.0.tgz";
393 };
156 name = "asap-1.0.0.tgz";
394 "underscore.string-2.4.0" = {
157 sha1 = "b2a45da5fdfa20b0496fc3768cc27c12fa916a7d";
395 name = "underscore.string";
158 })
396 packageName = "underscore.string";
159 ];
397 version = "2.4.0";
160 buildInputs =
398 src = fetchurl {
161 (self.nativeDeps."asap" or []);
399 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
162 deps = {
400 sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
163 };
401 };
164 peerDependencies = [
402 };
165 ];
403 "grunt-legacy-log-utils-0.1.1" = {
166 passthru.names = [ "asap" ];
404 name = "grunt-legacy-log-utils";
167 };
405 packageName = "grunt-legacy-log-utils";
168 by-spec."asn1".">=0.2.3 <0.3.0" =
406 version = "0.1.1";
169 self.by-version."asn1"."0.2.3";
407 src = fetchurl {
170 by-version."asn1"."0.2.3" = lib.makeOverridable self.buildNodePackage {
408 url = "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz";
171 name = "asn1-0.2.3";
409 sha1 = "c0706b9dd9064e116f36f23fe4e6b048672c0f7e";
172 bin = false;
410 };
173 src = [
411 };
174 (fetchurl {
412 "underscore.string-2.3.3" = {
175 url = "http://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz";
413 name = "underscore.string";
176 name = "asn1-0.2.3.tgz";
414 packageName = "underscore.string";
177 sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86";
415 version = "2.3.3";
178 })
416 src = fetchurl {
179 ];
417 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz";
180 buildInputs =
418 sha1 = "71c08bf6b428b1133f37e78fa3a21c82f7329b0d";
181 (self.nativeDeps."asn1" or []);
419 };
182 deps = {
420 };
183 };
421 "chalk-1.1.3" = {
184 peerDependencies = [
422 name = "chalk";
185 ];
423 packageName = "chalk";
186 passthru.names = [ "asn1" ];
424 version = "1.1.3";
187 };
425 src = fetchurl {
188 by-spec."assert-plus".">=0.2.0 <0.3.0" =
426 url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
189 self.by-version."assert-plus"."0.2.0";
427 sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
190 by-version."assert-plus"."0.2.0" = lib.makeOverridable self.buildNodePackage {
428 };
191 name = "assert-plus-0.2.0";
429 };
192 bin = false;
430 "file-sync-cmp-0.1.1" = {
193 src = [
431 name = "file-sync-cmp";
194 (fetchurl {
432 packageName = "file-sync-cmp";
195 url = "http://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz";
433 version = "0.1.1";
196 name = "assert-plus-0.2.0.tgz";
434 src = fetchurl {
197 sha1 = "d74e1b87e7affc0db8aadb7021f3fe48101ab234";
435 url = "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz";
198 })
436 sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b";
199 ];
437 };
200 buildInputs =
438 };
201 (self.nativeDeps."assert-plus" or []);
439 "ansi-styles-2.2.1" = {
202 deps = {
440 name = "ansi-styles";
203 };
441 packageName = "ansi-styles";
204 peerDependencies = [
442 version = "2.2.1";
205 ];
443 src = fetchurl {
206 passthru.names = [ "assert-plus" ];
444 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
207 };
445 sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
208 by-spec."assert-plus"."^0.1.5" =
446 };
209 self.by-version."assert-plus"."0.1.5";
447 };
210 by-version."assert-plus"."0.1.5" = lib.makeOverridable self.buildNodePackage {
448 "escape-string-regexp-1.0.5" = {
211 name = "assert-plus-0.1.5";
449 name = "escape-string-regexp";
212 bin = false;
450 packageName = "escape-string-regexp";
213 src = [
451 version = "1.0.5";
214 (fetchurl {
452 src = fetchurl {
215 url = "http://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz";
453 url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
216 name = "assert-plus-0.1.5.tgz";
454 sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
217 sha1 = "ee74009413002d84cec7219c6ac811812e723160";
455 };
218 })
456 };
219 ];
457 "has-ansi-2.0.0" = {
220 buildInputs =
458 name = "has-ansi";
221 (self.nativeDeps."assert-plus" or []);
459 packageName = "has-ansi";
222 deps = {
460 version = "2.0.0";
223 };
461 src = fetchurl {
224 peerDependencies = [
462 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
225 ];
463 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
226 passthru.names = [ "assert-plus" ];
464 };
227 };
465 };
228 by-spec."assert-plus"."^0.2.0" =
466 "strip-ansi-3.0.1" = {
229 self.by-version."assert-plus"."0.2.0";
467 name = "strip-ansi";
230 by-spec."async"."^0.9.0" =
468 packageName = "strip-ansi";
231 self.by-version."async"."0.9.2";
469 version = "3.0.1";
232 by-version."async"."0.9.2" = lib.makeOverridable self.buildNodePackage {
470 src = fetchurl {
233 name = "async-0.9.2";
471 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
234 bin = false;
472 sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
235 src = [
473 };
236 (fetchurl {
474 };
237 url = "http://registry.npmjs.org/async/-/async-0.9.2.tgz";
475 "supports-color-2.0.0" = {
238 name = "async-0.9.2.tgz";
476 name = "supports-color";
239 sha1 = "aea74d5e61c1f899613bf64bda66d4c78f2fd17d";
477 packageName = "supports-color";
240 })
478 version = "2.0.0";
241 ];
479 src = fetchurl {
242 buildInputs =
480 url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
243 (self.nativeDeps."async" or []);
481 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
244 deps = {
482 };
245 };
483 };
246 peerDependencies = [
484 "ansi-regex-2.0.0" = {
247 ];
485 name = "ansi-regex";
248 passthru.names = [ "async" ];
486 packageName = "ansi-regex";
249 };
487 version = "2.0.0";
250 by-spec."async"."^1.4.0" =
488 src = fetchurl {
251 self.by-version."async"."1.5.2";
489 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
252 by-version."async"."1.5.2" = lib.makeOverridable self.buildNodePackage {
490 sha1 = "c5061b6e0ef8a81775e50f5d66151bf6bf371107";
253 name = "async-1.5.2";
491 };
254 bin = false;
492 };
255 src = [
493 "chalk-0.5.1" = {
256 (fetchurl {
494 name = "chalk";
257 url = "http://registry.npmjs.org/async/-/async-1.5.2.tgz";
495 packageName = "chalk";
258 name = "async-1.5.2.tgz";
496 version = "0.5.1";
259 sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a";
497 src = fetchurl {
260 })
498 url = "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
261 ];
499 sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
262 buildInputs =
500 };
263 (self.nativeDeps."async" or []);
501 };
264 deps = {
502 "source-map-0.3.0" = {
265 };
503 name = "source-map";
266 peerDependencies = [
504 packageName = "source-map";
267 ];
505 version = "0.3.0";
268 passthru.names = [ "async" ];
506 src = fetchurl {
269 };
507 url = "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz";
270 by-spec."async"."~0.1.22" =
508 sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9";
271 self.by-version."async"."0.1.22";
509 };
272 by-version."async"."0.1.22" = lib.makeOverridable self.buildNodePackage {
510 };
273 name = "async-0.1.22";
511 "ansi-styles-1.1.0" = {
274 bin = false;
512 name = "ansi-styles";
275 src = [
513 packageName = "ansi-styles";
276 (fetchurl {
514 version = "1.1.0";
277 url = "http://registry.npmjs.org/async/-/async-0.1.22.tgz";
515 src = fetchurl {
278 name = "async-0.1.22.tgz";
516 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
279 sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
517 sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
280 })
518 };
281 ];
519 };
282 buildInputs =
520 "has-ansi-0.1.0" = {
283 (self.nativeDeps."async" or []);
521 name = "has-ansi";
284 deps = {
522 packageName = "has-ansi";
285 };
523 version = "0.1.0";
286 peerDependencies = [
524 src = fetchurl {
287 ];
525 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
288 passthru.names = [ "async" ];
526 sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
289 };
527 };
290 by-spec."async"."~0.2.9" =
528 };
291 self.by-version."async"."0.2.10";
529 "strip-ansi-0.3.0" = {
292 by-version."async"."0.2.10" = lib.makeOverridable self.buildNodePackage {
530 name = "strip-ansi";
293 name = "async-0.2.10";
531 packageName = "strip-ansi";
294 bin = false;
532 version = "0.3.0";
295 src = [
533 src = fetchurl {
296 (fetchurl {
534 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
297 url = "http://registry.npmjs.org/async/-/async-0.2.10.tgz";
535 sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
298 name = "async-0.2.10.tgz";
536 };
537 };
538 "supports-color-0.2.0" = {
539 name = "supports-color";
540 packageName = "supports-color";
541 version = "0.2.0";
542 src = fetchurl {
543 url = "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
544 sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
545 };
546 };
547 "ansi-regex-0.2.1" = {
548 name = "ansi-regex";
549 packageName = "ansi-regex";
550 version = "0.2.1";
551 src = fetchurl {
552 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
553 sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
554 };
555 };
556 "amdefine-1.0.0" = {
557 name = "amdefine";
558 packageName = "amdefine";
559 version = "1.0.0";
560 src = fetchurl {
561 url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
562 sha1 = "fd17474700cb5cc9c2b709f0be9d23ce3c198c33";
563 };
564 };
565 "async-2.0.1" = {
566 name = "async";
567 packageName = "async";
568 version = "2.0.1";
569 src = fetchurl {
570 url = "https://registry.npmjs.org/async/-/async-2.0.1.tgz";
571 sha1 = "b709cc0280a9c36f09f4536be823c838a9049e25";
572 };
573 };
574 "less-2.7.1" = {
575 name = "less";
576 packageName = "less";
577 version = "2.7.1";
578 src = fetchurl {
579 url = "https://registry.npmjs.org/less/-/less-2.7.1.tgz";
580 sha1 = "6cbfea22b3b830304e9a5fb371d54fa480c9d7cf";
581 };
582 };
583 "lodash-4.15.0" = {
584 name = "lodash";
585 packageName = "lodash";
586 version = "4.15.0";
587 src = fetchurl {
588 url = "https://registry.npmjs.org/lodash/-/lodash-4.15.0.tgz";
589 sha1 = "3162391d8f0140aa22cf8f6b3c34d6b7f63d3aa9";
590 };
591 };
592 "errno-0.1.4" = {
593 name = "errno";
594 packageName = "errno";
595 version = "0.1.4";
596 src = fetchurl {
597 url = "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz";
598 sha1 = "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d";
599 };
600 };
601 "graceful-fs-4.1.6" = {
602 name = "graceful-fs";
603 packageName = "graceful-fs";
604 version = "4.1.6";
605 src = fetchurl {
606 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.6.tgz";
607 sha1 = "514c38772b31bee2e08bedc21a0aeb3abf54c19e";
608 };
609 };
610 "image-size-0.5.0" = {
611 name = "image-size";
612 packageName = "image-size";
613 version = "0.5.0";
614 src = fetchurl {
615 url = "https://registry.npmjs.org/image-size/-/image-size-0.5.0.tgz";
616 sha1 = "be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651";
617 };
618 };
619 "mime-1.3.4" = {
620 name = "mime";
621 packageName = "mime";
622 version = "1.3.4";
623 src = fetchurl {
624 url = "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
625 sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
626 };
627 };
628 "mkdirp-0.5.1" = {
629 name = "mkdirp";
630 packageName = "mkdirp";
631 version = "0.5.1";
632 src = fetchurl {
633 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
634 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
635 };
636 };
637 "promise-7.1.1" = {
638 name = "promise";
639 packageName = "promise";
640 version = "7.1.1";
641 src = fetchurl {
642 url = "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz";
643 sha1 = "489654c692616b8aa55b0724fa809bb7db49c5bf";
644 };
645 };
646 "source-map-0.5.6" = {
647 name = "source-map";
648 packageName = "source-map";
649 version = "0.5.6";
650 src = fetchurl {
651 url = "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz";
652 sha1 = "75ce38f52bf0733c5a7f0c118d81334a2bb5f412";
653 };
654 };
655 "prr-0.0.0" = {
656 name = "prr";
657 packageName = "prr";
658 version = "0.0.0";
659 src = fetchurl {
660 url = "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz";
661 sha1 = "1a84b85908325501411853d0081ee3fa86e2926a";
662 };
663 };
664 "minimist-0.0.8" = {
665 name = "minimist";
666 packageName = "minimist";
667 version = "0.0.8";
668 src = fetchurl {
669 url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
670 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
671 };
672 };
673 "asap-2.0.4" = {
674 name = "asap";
675 packageName = "asap";
676 version = "2.0.4";
677 src = fetchurl {
678 url = "https://registry.npmjs.org/asap/-/asap-2.0.4.tgz";
679 sha1 = "b391bf7f6bfbc65706022fec8f49c4b07fecf589";
680 };
681 };
682 "gaze-0.5.2" = {
683 name = "gaze";
684 packageName = "gaze";
685 version = "0.5.2";
686 src = fetchurl {
687 url = "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
688 sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
689 };
690 };
691 "tiny-lr-fork-0.0.5" = {
692 name = "tiny-lr-fork";
693 packageName = "tiny-lr-fork";
694 version = "0.0.5";
695 src = fetchurl {
696 url = "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz";
697 sha1 = "1e99e1e2a8469b736ab97d97eefa98c71f76ed0a";
698 };
699 };
700 "async-0.2.10" = {
701 name = "async";
702 packageName = "async";
703 version = "0.2.10";
704 src = fetchurl {
705 url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
299 sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
706 sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
300 })
707 };
301 ];
708 };
302 buildInputs =
709 "globule-0.1.0" = {
303 (self.nativeDeps."async" or []);
710 name = "globule";
304 deps = {
711 packageName = "globule";
305 };
712 version = "0.1.0";
306 peerDependencies = [
713 src = fetchurl {
307 ];
714 url = "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
308 passthru.names = [ "async" ];
715 sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
309 };
716 };
310 by-spec."aws-sign2"."~0.6.0" =
717 };
311 self.by-version."aws-sign2"."0.6.0";
718 "lodash-1.0.2" = {
312 by-version."aws-sign2"."0.6.0" = lib.makeOverridable self.buildNodePackage {
719 name = "lodash";
313 name = "aws-sign2-0.6.0";
720 packageName = "lodash";
314 bin = false;
721 version = "1.0.2";
315 src = [
722 src = fetchurl {
316 (fetchurl {
723 url = "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
317 url = "http://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz";
724 sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
318 name = "aws-sign2-0.6.0.tgz";
725 };
319 sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f";
726 };
320 })
727 "qs-0.5.6" = {
321 ];
728 name = "qs";
322 buildInputs =
729 packageName = "qs";
323 (self.nativeDeps."aws-sign2" or []);
730 version = "0.5.6";
324 deps = {
731 src = fetchurl {
325 };
732 url = "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz";
326 peerDependencies = [
733 sha1 = "31b1ad058567651c526921506b9a8793911a0384";
327 ];
734 };
328 passthru.names = [ "aws-sign2" ];
735 };
329 };
736 "faye-websocket-0.4.4" = {
330 by-spec."balanced-match"."^0.3.0" =
737 name = "faye-websocket";
331 self.by-version."balanced-match"."0.3.0";
738 packageName = "faye-websocket";
332 by-version."balanced-match"."0.3.0" = lib.makeOverridable self.buildNodePackage {
739 version = "0.4.4";
333 name = "balanced-match-0.3.0";
740 src = fetchurl {
334 bin = false;
741 url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz";
335 src = [
742 sha1 = "c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc";
336 (fetchurl {
743 };
337 url = "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz";
744 };
338 name = "balanced-match-0.3.0.tgz";
745 "noptify-0.0.3" = {
339 sha1 = "a91cdd1ebef1a86659e70ff4def01625fc2d6756";
746 name = "noptify";
340 })
747 packageName = "noptify";
341 ];
748 version = "0.0.3";
342 buildInputs =
749 src = fetchurl {
343 (self.nativeDeps."balanced-match" or []);
750 url = "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz";
344 deps = {
751 sha1 = "58f654a73d9753df0c51d9686dc92104a67f4bbb";
345 };
752 };
346 peerDependencies = [
753 };
347 ];
754 "debug-0.7.4" = {
348 passthru.names = [ "balanced-match" ];
755 name = "debug";
349 };
756 packageName = "debug";
350 by-spec."bl"."~1.0.0" =
757 version = "0.7.4";
351 self.by-version."bl"."1.0.1";
758 src = fetchurl {
352 by-version."bl"."1.0.1" = lib.makeOverridable self.buildNodePackage {
759 url = "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
353 name = "bl-1.0.1";
760 sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
354 bin = false;
761 };
355 src = [
762 };
356 (fetchurl {
763 "nopt-2.0.0" = {
357 url = "http://registry.npmjs.org/bl/-/bl-1.0.1.tgz";
764 name = "nopt";
358 name = "bl-1.0.1.tgz";
765 packageName = "nopt";
359 sha1 = "0e6df7330308c46515751676cafa7334dc9852fd";
766 version = "2.0.0";
360 })
767 src = fetchurl {
361 ];
768 url = "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz";
362 buildInputs =
769 sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d";
363 (self.nativeDeps."bl" or []);
770 };
364 deps = {
771 };
365 "readable-stream-2.0.5" = self.by-version."readable-stream"."2.0.5";
772 "command-line-args-2.1.6" = {
366 };
773 name = "command-line-args";
367 peerDependencies = [
774 packageName = "command-line-args";
368 ];
775 version = "2.1.6";
369 passthru.names = [ "bl" ];
776 src = fetchurl {
370 };
777 url = "https://registry.npmjs.org/command-line-args/-/command-line-args-2.1.6.tgz";
371 by-spec."boom"."2.x.x" =
778 sha1 = "f197d6eaff34c9085577484b2864375b294f5697";
372 self.by-version."boom"."2.10.1";
779 };
373 by-version."boom"."2.10.1" = lib.makeOverridable self.buildNodePackage {
780 };
374 name = "boom-2.10.1";
781 "dom5-1.3.3" = {
375 bin = false;
782 name = "dom5";
376 src = [
783 packageName = "dom5";
377 (fetchurl {
784 version = "1.3.3";
378 url = "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz";
785 src = fetchurl {
379 name = "boom-2.10.1.tgz";
786 url = "https://registry.npmjs.org/dom5/-/dom5-1.3.3.tgz";
380 sha1 = "39c8918ceff5799f83f9492a848f625add0c766f";
787 sha1 = "07e514522c245c7aa8512aa3f9118e8bcab9f909";
381 })
788 };
382 ];
789 };
383 buildInputs =
790 "array-back-1.0.3" = {
384 (self.nativeDeps."boom" or []);
791 name = "array-back";
385 deps = {
792 packageName = "array-back";
386 "hoek-2.16.3" = self.by-version."hoek"."2.16.3";
793 version = "1.0.3";
387 };
794 src = fetchurl {
388 peerDependencies = [
795 url = "https://registry.npmjs.org/array-back/-/array-back-1.0.3.tgz";
389 ];
796 sha1 = "f1128a5cf1b91c80bed4a218f8c5b635c8b10663";
390 passthru.names = [ "boom" ];
797 };
391 };
798 };
392 by-spec."brace-expansion"."^1.0.0" =
799 "command-line-usage-2.0.5" = {
393 self.by-version."brace-expansion"."1.1.2";
800 name = "command-line-usage";
394 by-version."brace-expansion"."1.1.2" = lib.makeOverridable self.buildNodePackage {
801 packageName = "command-line-usage";
395 name = "brace-expansion-1.1.2";
802 version = "2.0.5";
396 bin = false;
803 src = fetchurl {
397 src = [
804 url = "https://registry.npmjs.org/command-line-usage/-/command-line-usage-2.0.5.tgz";
398 (fetchurl {
805 sha1 = "f80c35ca5e8624841923ea3be3b9bfbf4f7be27b";
399 url = "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz";
806 };
400 name = "brace-expansion-1.1.2.tgz";
807 };
401 sha1 = "f21445d0488b658e2771efd870eff51df29f04ef";
808 "core-js-2.4.1" = {
402 })
809 name = "core-js";
403 ];
810 packageName = "core-js";
404 buildInputs =
811 version = "2.4.1";
405 (self.nativeDeps."brace-expansion" or []);
812 src = fetchurl {
406 deps = {
813 url = "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz";
407 "balanced-match-0.3.0" = self.by-version."balanced-match"."0.3.0";
814 sha1 = "4de911e667b0eae9124e34254b53aea6fc618d3e";
408 "concat-map-0.0.1" = self.by-version."concat-map"."0.0.1";
815 };
409 };
816 };
410 peerDependencies = [
817 "feature-detect-es6-1.3.1" = {
411 ];
818 name = "feature-detect-es6";
412 passthru.names = [ "brace-expansion" ];
819 packageName = "feature-detect-es6";
413 };
820 version = "1.3.1";
414 by-spec."caseless"."~0.11.0" =
821 src = fetchurl {
415 self.by-version."caseless"."0.11.0";
822 url = "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz";
416 by-version."caseless"."0.11.0" = lib.makeOverridable self.buildNodePackage {
823 sha1 = "f888736af9cb0c91f55663bfa4762eb96ee7047f";
417 name = "caseless-0.11.0";
824 };
418 bin = false;
825 };
419 src = [
826 "find-replace-1.0.2" = {
420 (fetchurl {
827 name = "find-replace";
421 url = "http://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz";
828 packageName = "find-replace";
422 name = "caseless-0.11.0.tgz";
829 version = "1.0.2";
423 sha1 = "715b96ea9841593cc33067923f5ec60ebda4f7d7";
830 src = fetchurl {
424 })
831 url = "https://registry.npmjs.org/find-replace/-/find-replace-1.0.2.tgz";
425 ];
832 sha1 = "a2d6ce740d15f0d92b1b26763e2ce9c0e361fd98";
426 buildInputs =
833 };
427 (self.nativeDeps."caseless" or []);
834 };
428 deps = {
835 "typical-2.5.0" = {
429 };
836 name = "typical";
430 peerDependencies = [
837 packageName = "typical";
431 ];
838 version = "2.5.0";
432 passthru.names = [ "caseless" ];
839 src = fetchurl {
433 };
840 url = "https://registry.npmjs.org/typical/-/typical-2.5.0.tgz";
434 by-spec."chalk"."^0.5.1" =
841 sha1 = "81244918aa28180c9e602aa457173404be0604f1";
435 self.by-version."chalk"."0.5.1";
842 };
436 by-version."chalk"."0.5.1" = lib.makeOverridable self.buildNodePackage {
843 };
437 name = "chalk-0.5.1";
844 "ansi-escape-sequences-2.2.2" = {
438 bin = false;
845 name = "ansi-escape-sequences";
439 src = [
846 packageName = "ansi-escape-sequences";
440 (fetchurl {
847 version = "2.2.2";
441 url = "http://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
848 src = fetchurl {
442 name = "chalk-0.5.1.tgz";
849 url = "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-2.2.2.tgz";
443 sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
850 sha1 = "174c78d6f8b7de75f8957ae81c7f72210c701635";
444 })
851 };
445 ];
852 };
446 buildInputs =
853 "column-layout-2.1.4" = {
447 (self.nativeDeps."chalk" or []);
854 name = "column-layout";
448 deps = {
855 packageName = "column-layout";
449 "ansi-styles-1.1.0" = self.by-version."ansi-styles"."1.1.0";
856 version = "2.1.4";
450 "escape-string-regexp-1.0.4" = self.by-version."escape-string-regexp"."1.0.4";
857 src = fetchurl {
451 "has-ansi-0.1.0" = self.by-version."has-ansi"."0.1.0";
858 url = "https://registry.npmjs.org/column-layout/-/column-layout-2.1.4.tgz";
452 "strip-ansi-0.3.0" = self.by-version."strip-ansi"."0.3.0";
859 sha1 = "ed2857092ccf8338026fe538379d9672d70b3641";
453 "supports-color-0.2.0" = self.by-version."supports-color"."0.2.0";
860 };
454 };
861 };
455 peerDependencies = [
862 "wordwrapjs-1.2.1" = {
456 ];
863 name = "wordwrapjs";
457 passthru.names = [ "chalk" ];
864 packageName = "wordwrapjs";
458 };
865 version = "1.2.1";
459 by-spec."chalk"."^1.0.0" =
866 src = fetchurl {
460 self.by-version."chalk"."1.1.1";
867 url = "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-1.2.1.tgz";
461 by-version."chalk"."1.1.1" = lib.makeOverridable self.buildNodePackage {
868 sha1 = "754a5ea0664cfbff50540dc32d67bda3289fc34b";
462 name = "chalk-1.1.1";
869 };
463 bin = false;
870 };
464 src = [
871 "collect-all-0.2.1" = {
465 (fetchurl {
872 name = "collect-all";
466 url = "http://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz";
873 packageName = "collect-all";
467 name = "chalk-1.1.1.tgz";
874 version = "0.2.1";
468 sha1 = "509afb67066e7499f7eb3535c77445772ae2d019";
875 src = fetchurl {
469 })
876 url = "https://registry.npmjs.org/collect-all/-/collect-all-0.2.1.tgz";
470 ];
877 sha1 = "7225fb4585c22d4ffac886f0abaf5abc563a1a6a";
471 buildInputs =
878 };
472 (self.nativeDeps."chalk" or []);
879 };
473 deps = {
880 "stream-connect-1.0.2" = {
474 "ansi-styles-2.1.0" = self.by-version."ansi-styles"."2.1.0";
881 name = "stream-connect";
475 "escape-string-regexp-1.0.4" = self.by-version."escape-string-regexp"."1.0.4";
882 packageName = "stream-connect";
476 "has-ansi-2.0.0" = self.by-version."has-ansi"."2.0.0";
883 version = "1.0.2";
477 "strip-ansi-3.0.0" = self.by-version."strip-ansi"."3.0.0";
884 src = fetchurl {
478 "supports-color-2.0.0" = self.by-version."supports-color"."2.0.0";
885 url = "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz";
479 };
886 sha1 = "18bc81f2edb35b8b5d9a8009200a985314428a97";
480 peerDependencies = [
887 };
481 ];
888 };
482 passthru.names = [ "chalk" ];
889 "stream-via-0.1.1" = {
483 };
890 name = "stream-via";
484 by-spec."chalk"."^1.1.1" =
891 packageName = "stream-via";
485 self.by-version."chalk"."1.1.1";
892 version = "0.1.1";
486 by-spec."cli"."0.6.x" =
893 src = fetchurl {
487 self.by-version."cli"."0.6.6";
894 url = "https://registry.npmjs.org/stream-via/-/stream-via-0.1.1.tgz";
488 by-version."cli"."0.6.6" = lib.makeOverridable self.buildNodePackage {
895 sha1 = "0cee5df9c959fb1d3f4eda4819f289d5f9205afc";
489 name = "cli-0.6.6";
896 };
490 bin = false;
897 };
491 src = [
898 "collect-json-1.0.8" = {
492 (fetchurl {
899 name = "collect-json";
493 url = "http://registry.npmjs.org/cli/-/cli-0.6.6.tgz";
900 packageName = "collect-json";
494 name = "cli-0.6.6.tgz";
901 version = "1.0.8";
495 sha1 = "02ad44a380abf27adac5e6f0cdd7b043d74c53e3";
902 src = fetchurl {
496 })
903 url = "https://registry.npmjs.org/collect-json/-/collect-json-1.0.8.tgz";
497 ];
904 sha1 = "aa2fa52b4d1d9444ce690f07a1e3617ab74bb827";
498 buildInputs =
905 };
499 (self.nativeDeps."cli" or []);
906 };
500 deps = {
907 "deep-extend-0.4.1" = {
501 "glob-3.2.11" = self.by-version."glob"."3.2.11";
908 name = "deep-extend";
502 "exit-0.1.2" = self.by-version."exit"."0.1.2";
909 packageName = "deep-extend";
503 };
910 version = "0.4.1";
504 peerDependencies = [
911 src = fetchurl {
505 ];
912 url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz";
506 passthru.names = [ "cli" ];
913 sha1 = "efe4113d08085f4e6f9687759810f807469e2253";
507 };
914 };
508 by-spec."coffee-script"."~1.3.3" =
915 };
509 self.by-version."coffee-script"."1.3.3";
916 "object-tools-2.0.6" = {
510 by-version."coffee-script"."1.3.3" = lib.makeOverridable self.buildNodePackage {
917 name = "object-tools";
511 name = "coffee-script-1.3.3";
918 packageName = "object-tools";
512 bin = true;
919 version = "2.0.6";
513 src = [
920 src = fetchurl {
514 (fetchurl {
921 url = "https://registry.npmjs.org/object-tools/-/object-tools-2.0.6.tgz";
515 url = "http://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz";
922 sha1 = "f3fe1c350cda4a6f5d99d9646dc4892a02476ddd";
516 name = "coffee-script-1.3.3.tgz";
923 };
517 sha1 = "150d6b4cb522894369efed6a2101c20bc7f4a4f4";
924 };
518 })
925 "collect-all-1.0.2" = {
519 ];
926 name = "collect-all";
520 buildInputs =
927 packageName = "collect-all";
521 (self.nativeDeps."coffee-script" or []);
928 version = "1.0.2";
522 deps = {
929 src = fetchurl {
523 };
930 url = "https://registry.npmjs.org/collect-all/-/collect-all-1.0.2.tgz";
524 peerDependencies = [
931 sha1 = "39450f1e7aa6086570a006bce93ccf1218a77ea1";
525 ];
932 };
526 passthru.names = [ "coffee-script" ];
933 };
527 };
934 "stream-via-1.0.3" = {
528 by-spec."colors"."~0.6.2" =
935 name = "stream-via";
529 self.by-version."colors"."0.6.2";
936 packageName = "stream-via";
530 by-version."colors"."0.6.2" = lib.makeOverridable self.buildNodePackage {
937 version = "1.0.3";
531 name = "colors-0.6.2";
938 src = fetchurl {
532 bin = false;
939 url = "https://registry.npmjs.org/stream-via/-/stream-via-1.0.3.tgz";
533 src = [
940 sha1 = "cebd32a5a59d74b3b68e3404942e867184ad4ac9";
534 (fetchurl {
941 };
535 url = "http://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
942 };
536 name = "colors-0.6.2.tgz";
943 "object-get-2.1.0" = {
537 sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
944 name = "object-get";
538 })
945 packageName = "object-get";
539 ];
946 version = "2.1.0";
540 buildInputs =
947 src = fetchurl {
541 (self.nativeDeps."colors" or []);
948 url = "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz";
542 deps = {
949 sha1 = "722bbdb60039efa47cad3c6dc2ce51a85c02c5ae";
543 };
950 };
544 peerDependencies = [
951 };
545 ];
952 "test-value-1.1.0" = {
546 passthru.names = [ "colors" ];
953 name = "test-value";
547 };
954 packageName = "test-value";
548 by-spec."combined-stream"."^1.0.5" =
955 version = "1.1.0";
549 self.by-version."combined-stream"."1.0.5";
956 src = fetchurl {
550 by-version."combined-stream"."1.0.5" = lib.makeOverridable self.buildNodePackage {
957 url = "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz";
551 name = "combined-stream-1.0.5";
958 sha1 = "a09136f72ec043d27c893707c2b159bfad7de93f";
552 bin = false;
959 };
553 src = [
960 };
554 (fetchurl {
961 "test-value-2.0.0" = {
555 url = "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz";
962 name = "test-value";
556 name = "combined-stream-1.0.5.tgz";
963 packageName = "test-value";
557 sha1 = "938370a57b4a51dea2c77c15d5c5fdf895164009";
964 version = "2.0.0";
558 })
965 src = fetchurl {
559 ];
966 url = "https://registry.npmjs.org/test-value/-/test-value-2.0.0.tgz";
560 buildInputs =
967 sha1 = "0d65c45ee0b48a757c4507a5e98ec2680a9db137";
561 (self.nativeDeps."combined-stream" or []);
968 };
562 deps = {
969 };
563 "delayed-stream-1.0.0" = self.by-version."delayed-stream"."1.0.0";
970 "@types/clone-0.1.29" = {
564 };
971 name = "@types/clone";
565 peerDependencies = [
972 packageName = "@types/clone";
566 ];
973 version = "0.1.29";
567 passthru.names = [ "combined-stream" ];
974 src = fetchurl {
568 };
975 url = "https://registry.npmjs.org/@types/clone/-/clone-0.1.29.tgz";
569 by-spec."combined-stream"."~1.0.5" =
976 sha1 = "65a0be88189ffddcd373e450aa6b68c9c83218b7";
570 self.by-version."combined-stream"."1.0.5";
977 };
571 by-spec."commander"."^2.9.0" =
978 };
572 self.by-version."commander"."2.9.0";
979 "@types/node-4.0.30" = {
573 by-version."commander"."2.9.0" = lib.makeOverridable self.buildNodePackage {
980 name = "@types/node";
574 name = "commander-2.9.0";
981 packageName = "@types/node";
575 bin = false;
982 version = "4.0.30";
576 src = [
983 src = fetchurl {
577 (fetchurl {
984 url = "https://registry.npmjs.org/@types/node/-/node-4.0.30.tgz";
578 url = "http://registry.npmjs.org/commander/-/commander-2.9.0.tgz";
985 sha1 = "553f490ed3030311620f88003e7abfc0edcb301e";
579 name = "commander-2.9.0.tgz";
986 };
580 sha1 = "9c99094176e12240cb22d6c5146098400fe0f7d4";
987 };
581 })
988 "@types/parse5-0.0.28" = {
582 ];
989 name = "@types/parse5";
583 buildInputs =
990 packageName = "@types/parse5";
584 (self.nativeDeps."commander" or []);
991 version = "0.0.28";
585 deps = {
992 src = fetchurl {
586 "graceful-readlink-1.0.1" = self.by-version."graceful-readlink"."1.0.1";
993 url = "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.28.tgz";
587 };
994 sha1 = "2a38cb7145bb157688d4ad2c46944c6dffae3cc6";
588 peerDependencies = [
995 };
589 ];
996 };
590 passthru.names = [ "commander" ];
997 "clone-1.0.2" = {
591 };
998 name = "clone";
592 by-spec."concat-map"."0.0.1" =
999 packageName = "clone";
593 self.by-version."concat-map"."0.0.1";
1000 version = "1.0.2";
594 by-version."concat-map"."0.0.1" = lib.makeOverridable self.buildNodePackage {
1001 src = fetchurl {
595 name = "concat-map-0.0.1";
1002 url = "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz";
596 bin = false;
1003 sha1 = "260b7a99ebb1edfe247538175f783243cb19d149";
597 src = [
1004 };
598 (fetchurl {
1005 };
599 url = "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
1006 "parse5-1.5.1" = {
600 name = "concat-map-0.0.1.tgz";
1007 name = "parse5";
1008 packageName = "parse5";
1009 version = "1.5.1";
1010 src = fetchurl {
1011 url = "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";
1012 sha1 = "9b7f3b0de32be78dc2401b17573ccaf0f6f59d94";
1013 };
1014 };
1015 "@types/node-6.0.37" = {
1016 name = "@types/node";
1017 packageName = "@types/node";
1018 version = "6.0.37";
1019 src = fetchurl {
1020 url = "https://registry.npmjs.org/@types/node/-/node-6.0.37.tgz";
1021 sha1 = "a1e081f2ec60074113d3a1fbf11f35d304f30e39";
1022 };
1023 };
1024 "es6-promise-2.3.0" = {
1025 name = "es6-promise";
1026 packageName = "es6-promise";
1027 version = "2.3.0";
1028 src = fetchurl {
1029 url = "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz";
1030 sha1 = "96edb9f2fdb01995822b263dd8aadab6748181bc";
1031 };
1032 };
1033 "hydrolysis-1.24.1" = {
1034 name = "hydrolysis";
1035 packageName = "hydrolysis";
1036 version = "1.24.1";
1037 src = fetchurl {
1038 url = "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.24.1.tgz";
1039 sha1 = "0f94f055d1065ac0d81ff40b762d143fef07eff4";
1040 };
1041 };
1042 "nopt-3.0.6" = {
1043 name = "nopt";
1044 packageName = "nopt";
1045 version = "3.0.6";
1046 src = fetchurl {
1047 url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
1048 sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
1049 };
1050 };
1051 "path-posix-1.0.0" = {
1052 name = "path-posix";
1053 packageName = "path-posix";
1054 version = "1.0.0";
1055 src = fetchurl {
1056 url = "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz";
1057 sha1 = "06b26113f56beab042545a23bfa88003ccac260f";
1058 };
1059 };
1060 "update-notifier-0.6.3" = {
1061 name = "update-notifier";
1062 packageName = "update-notifier";
1063 version = "0.6.3";
1064 src = fetchurl {
1065 url = "https://registry.npmjs.org/update-notifier/-/update-notifier-0.6.3.tgz";
1066 sha1 = "776dec8daa13e962a341e8a1d98354306b67ae08";
1067 };
1068 };
1069 "babel-polyfill-6.13.0" = {
1070 name = "babel-polyfill";
1071 packageName = "babel-polyfill";
1072 version = "6.13.0";
1073 src = fetchurl {
1074 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.13.0.tgz";
1075 sha1 = "5978215c25d49a697eb78afc54e63c9d3a73d5ec";
1076 };
1077 };
1078 "doctrine-0.7.2" = {
1079 name = "doctrine";
1080 packageName = "doctrine";
1081 version = "0.7.2";
1082 src = fetchurl {
1083 url = "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz";
1084 sha1 = "7cb860359ba3be90e040b26b729ce4bfa654c523";
1085 };
1086 };
1087 "escodegen-1.8.1" = {
1088 name = "escodegen";
1089 packageName = "escodegen";
1090 version = "1.8.1";
1091 src = fetchurl {
1092 url = "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz";
1093 sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018";
1094 };
1095 };
1096 "espree-3.1.7" = {
1097 name = "espree";
1098 packageName = "espree";
1099 version = "3.1.7";
1100 src = fetchurl {
1101 url = "https://registry.npmjs.org/espree/-/espree-3.1.7.tgz";
1102 sha1 = "fd5deec76a97a5120a9cd3a7cb1177a0923b11d2";
1103 };
1104 };
1105 "estraverse-3.1.0" = {
1106 name = "estraverse";
1107 packageName = "estraverse";
1108 version = "3.1.0";
1109 src = fetchurl {
1110 url = "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz";
1111 sha1 = "15e28a446b8b82bc700ccc8b96c78af4da0d6cba";
1112 };
1113 };
1114 "path-is-absolute-1.0.0" = {
1115 name = "path-is-absolute";
1116 packageName = "path-is-absolute";
1117 version = "1.0.0";
1118 src = fetchurl {
1119 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";
1120 sha1 = "263dada66ab3f2fb10bf7f9d24dd8f3e570ef912";
1121 };
1122 };
1123 "babel-runtime-6.11.6" = {
1124 name = "babel-runtime";
1125 packageName = "babel-runtime";
1126 version = "6.11.6";
1127 src = fetchurl {
1128 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.11.6.tgz";
1129 sha1 = "6db707fef2d49c49bfa3cb64efdb436b518b8222";
1130 };
1131 };
1132 "regenerator-runtime-0.9.5" = {
1133 name = "regenerator-runtime";
1134 packageName = "regenerator-runtime";
1135 version = "0.9.5";
1136 src = fetchurl {
1137 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz";
1138 sha1 = "403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc";
1139 };
1140 };
1141 "esutils-1.1.6" = {
1142 name = "esutils";
1143 packageName = "esutils";
1144 version = "1.1.6";
1145 src = fetchurl {
1146 url = "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz";
1147 sha1 = "c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375";
1148 };
1149 };
1150 "isarray-0.0.1" = {
1151 name = "isarray";
1152 packageName = "isarray";
1153 version = "0.0.1";
1154 src = fetchurl {
1155 url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
1156 sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
1157 };
1158 };
1159 "estraverse-1.9.3" = {
1160 name = "estraverse";
1161 packageName = "estraverse";
1162 version = "1.9.3";
1163 src = fetchurl {
1164 url = "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz";
1165 sha1 = "af67f2dc922582415950926091a4005d29c9bb44";
1166 };
1167 };
1168 "esutils-2.0.2" = {
1169 name = "esutils";
1170 packageName = "esutils";
1171 version = "2.0.2";
1172 src = fetchurl {
1173 url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
1174 sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
1175 };
1176 };
1177 "esprima-2.7.3" = {
1178 name = "esprima";
1179 packageName = "esprima";
1180 version = "2.7.3";
1181 src = fetchurl {
1182 url = "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz";
1183 sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581";
1184 };
1185 };
1186 "optionator-0.8.1" = {
1187 name = "optionator";
1188 packageName = "optionator";
1189 version = "0.8.1";
1190 src = fetchurl {
1191 url = "https://registry.npmjs.org/optionator/-/optionator-0.8.1.tgz";
1192 sha1 = "e31b4932cdd5fb862a8b0d10bc63d3ee1ec7d78b";
1193 };
1194 };
1195 "source-map-0.2.0" = {
1196 name = "source-map";
1197 packageName = "source-map";
1198 version = "0.2.0";
1199 src = fetchurl {
1200 url = "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz";
1201 sha1 = "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d";
1202 };
1203 };
1204 "prelude-ls-1.1.2" = {
1205 name = "prelude-ls";
1206 packageName = "prelude-ls";
1207 version = "1.1.2";
1208 src = fetchurl {
1209 url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
1210 sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
1211 };
1212 };
1213 "deep-is-0.1.3" = {
1214 name = "deep-is";
1215 packageName = "deep-is";
1216 version = "0.1.3";
1217 src = fetchurl {
1218 url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
1219 sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
1220 };
1221 };
1222 "wordwrap-1.0.0" = {
1223 name = "wordwrap";
1224 packageName = "wordwrap";
1225 version = "1.0.0";
1226 src = fetchurl {
1227 url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
1228 sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
1229 };
1230 };
1231 "type-check-0.3.2" = {
1232 name = "type-check";
1233 packageName = "type-check";
1234 version = "0.3.2";
1235 src = fetchurl {
1236 url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
1237 sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
1238 };
1239 };
1240 "levn-0.3.0" = {
1241 name = "levn";
1242 packageName = "levn";
1243 version = "0.3.0";
1244 src = fetchurl {
1245 url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
1246 sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
1247 };
1248 };
1249 "fast-levenshtein-1.1.4" = {
1250 name = "fast-levenshtein";
1251 packageName = "fast-levenshtein";
1252 version = "1.1.4";
1253 src = fetchurl {
1254 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz";
1255 sha1 = "e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9";
1256 };
1257 };
1258 "acorn-3.3.0" = {
1259 name = "acorn";
1260 packageName = "acorn";
1261 version = "3.3.0";
1262 src = fetchurl {
1263 url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
1264 sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
1265 };
1266 };
1267 "acorn-jsx-3.0.1" = {
1268 name = "acorn-jsx";
1269 packageName = "acorn-jsx";
1270 version = "3.0.1";
1271 src = fetchurl {
1272 url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
1273 sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
1274 };
1275 };
1276 "boxen-0.3.1" = {
1277 name = "boxen";
1278 packageName = "boxen";
1279 version = "0.3.1";
1280 src = fetchurl {
1281 url = "https://registry.npmjs.org/boxen/-/boxen-0.3.1.tgz";
1282 sha1 = "a7d898243ae622f7abb6bb604d740a76c6a5461b";
1283 };
1284 };
1285 "configstore-2.0.0" = {
1286 name = "configstore";
1287 packageName = "configstore";
1288 version = "2.0.0";
1289 src = fetchurl {
1290 url = "https://registry.npmjs.org/configstore/-/configstore-2.0.0.tgz";
1291 sha1 = "8d81e9cdfa73ebd0e06bc985147856b2f1c4e764";
1292 };
1293 };
1294 "is-npm-1.0.0" = {
1295 name = "is-npm";
1296 packageName = "is-npm";
1297 version = "1.0.0";
1298 src = fetchurl {
1299 url = "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz";
1300 sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4";
1301 };
1302 };
1303 "latest-version-2.0.0" = {
1304 name = "latest-version";
1305 packageName = "latest-version";
1306 version = "2.0.0";
1307 src = fetchurl {
1308 url = "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz";
1309 sha1 = "56f8d6139620847b8017f8f1f4d78e211324168b";
1310 };
1311 };
1312 "semver-diff-2.1.0" = {
1313 name = "semver-diff";
1314 packageName = "semver-diff";
1315 version = "2.1.0";
1316 src = fetchurl {
1317 url = "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz";
1318 sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36";
1319 };
1320 };
1321 "filled-array-1.1.0" = {
1322 name = "filled-array";
1323 packageName = "filled-array";
1324 version = "1.1.0";
1325 src = fetchurl {
1326 url = "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz";
1327 sha1 = "c3c4f6c663b923459a9aa29912d2d031f1507f84";
1328 };
1329 };
1330 "object-assign-4.1.0" = {
1331 name = "object-assign";
1332 packageName = "object-assign";
1333 version = "4.1.0";
1334 src = fetchurl {
1335 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz";
1336 sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0";
1337 };
1338 };
1339 "repeating-2.0.1" = {
1340 name = "repeating";
1341 packageName = "repeating";
1342 version = "2.0.1";
1343 src = fetchurl {
1344 url = "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz";
1345 sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
1346 };
1347 };
1348 "string-width-1.0.2" = {
1349 name = "string-width";
1350 packageName = "string-width";
1351 version = "1.0.2";
1352 src = fetchurl {
1353 url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
1354 sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
1355 };
1356 };
1357 "widest-line-1.0.0" = {
1358 name = "widest-line";
1359 packageName = "widest-line";
1360 version = "1.0.0";
1361 src = fetchurl {
1362 url = "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz";
1363 sha1 = "0c09c85c2a94683d0d7eaf8ee097d564bf0e105c";
1364 };
1365 };
1366 "is-finite-1.0.1" = {
1367 name = "is-finite";
1368 packageName = "is-finite";
1369 version = "1.0.1";
1370 src = fetchurl {
1371 url = "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz";
1372 sha1 = "6438603eaebe2793948ff4a4262ec8db3d62597b";
1373 };
1374 };
1375 "number-is-nan-1.0.0" = {
1376 name = "number-is-nan";
1377 packageName = "number-is-nan";
1378 version = "1.0.0";
1379 src = fetchurl {
1380 url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";
1381 sha1 = "c020f529c5282adfdd233d91d4b181c3d686dc4b";
1382 };
1383 };
1384 "code-point-at-1.0.0" = {
1385 name = "code-point-at";
1386 packageName = "code-point-at";
1387 version = "1.0.0";
1388 src = fetchurl {
1389 url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.0.tgz";
1390 sha1 = "f69b192d3f7d91e382e4b71bddb77878619ab0c6";
1391 };
1392 };
1393 "is-fullwidth-code-point-1.0.0" = {
1394 name = "is-fullwidth-code-point";
1395 packageName = "is-fullwidth-code-point";
1396 version = "1.0.0";
1397 src = fetchurl {
1398 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
1399 sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
1400 };
1401 };
1402 "dot-prop-2.4.0" = {
1403 name = "dot-prop";
1404 packageName = "dot-prop";
1405 version = "2.4.0";
1406 src = fetchurl {
1407 url = "https://registry.npmjs.org/dot-prop/-/dot-prop-2.4.0.tgz";
1408 sha1 = "848e28f7f1d50740c6747ab3cb07670462b6f89c";
1409 };
1410 };
1411 "os-tmpdir-1.0.1" = {
1412 name = "os-tmpdir";
1413 packageName = "os-tmpdir";
1414 version = "1.0.1";
1415 src = fetchurl {
1416 url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz";
1417 sha1 = "e9b423a1edaf479882562e92ed71d7743a071b6e";
1418 };
1419 };
1420 "osenv-0.1.3" = {
1421 name = "osenv";
1422 packageName = "osenv";
1423 version = "0.1.3";
1424 src = fetchurl {
1425 url = "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz";
1426 sha1 = "83cf05c6d6458fc4d5ac6362ea325d92f2754217";
1427 };
1428 };
1429 "uuid-2.0.2" = {
1430 name = "uuid";
1431 packageName = "uuid";
1432 version = "2.0.2";
1433 src = fetchurl {
1434 url = "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz";
1435 sha1 = "48bd5698f0677e3c7901a1c46ef15b1643794726";
1436 };
1437 };
1438 "write-file-atomic-1.2.0" = {
1439 name = "write-file-atomic";
1440 packageName = "write-file-atomic";
1441 version = "1.2.0";
1442 src = fetchurl {
1443 url = "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.2.0.tgz";
1444 sha1 = "14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab";
1445 };
1446 };
1447 "xdg-basedir-2.0.0" = {
1448 name = "xdg-basedir";
1449 packageName = "xdg-basedir";
1450 version = "2.0.0";
1451 src = fetchurl {
1452 url = "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz";
1453 sha1 = "edbc903cc385fc04523d966a335504b5504d1bd2";
1454 };
1455 };
1456 "is-obj-1.0.1" = {
1457 name = "is-obj";
1458 packageName = "is-obj";
1459 version = "1.0.1";
1460 src = fetchurl {
1461 url = "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz";
1462 sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
1463 };
1464 };
1465 "os-homedir-1.0.1" = {
1466 name = "os-homedir";
1467 packageName = "os-homedir";
1468 version = "1.0.1";
1469 src = fetchurl {
1470 url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz";
1471 sha1 = "0d62bdf44b916fd3bbdcf2cab191948fb094f007";
1472 };
1473 };
1474 "imurmurhash-0.1.4" = {
1475 name = "imurmurhash";
1476 packageName = "imurmurhash";
1477 version = "0.1.4";
1478 src = fetchurl {
1479 url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
1480 sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
1481 };
1482 };
1483 "slide-1.1.6" = {
1484 name = "slide";
1485 packageName = "slide";
1486 version = "1.1.6";
1487 src = fetchurl {
1488 url = "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz";
1489 sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
1490 };
1491 };
1492 "package-json-2.3.3" = {
1493 name = "package-json";
1494 packageName = "package-json";
1495 version = "2.3.3";
1496 src = fetchurl {
1497 url = "https://registry.npmjs.org/package-json/-/package-json-2.3.3.tgz";
1498 sha1 = "14895311a963d18edf8801e06b67ea87795d15b9";
1499 };
1500 };
1501 "got-5.6.0" = {
1502 name = "got";
1503 packageName = "got";
1504 version = "5.6.0";
1505 src = fetchurl {
1506 url = "https://registry.npmjs.org/got/-/got-5.6.0.tgz";
1507 sha1 = "bb1d7ee163b78082bbc8eb836f3f395004ea6fbf";
1508 };
1509 };
1510 "rc-1.1.6" = {
1511 name = "rc";
1512 packageName = "rc";
1513 version = "1.1.6";
1514 src = fetchurl {
1515 url = "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz";
1516 sha1 = "43651b76b6ae53b5c802f1151fa3fc3b059969c9";
1517 };
1518 };
1519 "registry-url-3.1.0" = {
1520 name = "registry-url";
1521 packageName = "registry-url";
1522 version = "3.1.0";
1523 src = fetchurl {
1524 url = "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz";
1525 sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942";
1526 };
1527 };
1528 "semver-5.3.0" = {
1529 name = "semver";
1530 packageName = "semver";
1531 version = "5.3.0";
1532 src = fetchurl {
1533 url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
1534 sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
1535 };
1536 };
1537 "create-error-class-3.0.2" = {
1538 name = "create-error-class";
1539 packageName = "create-error-class";
1540 version = "3.0.2";
1541 src = fetchurl {
1542 url = "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz";
1543 sha1 = "06be7abef947a3f14a30fd610671d401bca8b7b6";
1544 };
1545 };
1546 "duplexer2-0.1.4" = {
1547 name = "duplexer2";
1548 packageName = "duplexer2";
1549 version = "0.1.4";
1550 src = fetchurl {
1551 url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz";
1552 sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1";
1553 };
1554 };
1555 "is-plain-obj-1.1.0" = {
1556 name = "is-plain-obj";
1557 packageName = "is-plain-obj";
1558 version = "1.1.0";
1559 src = fetchurl {
1560 url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
1561 sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
1562 };
1563 };
1564 "is-redirect-1.0.0" = {
1565 name = "is-redirect";
1566 packageName = "is-redirect";
1567 version = "1.0.0";
1568 src = fetchurl {
1569 url = "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz";
1570 sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24";
1571 };
1572 };
1573 "is-retry-allowed-1.1.0" = {
1574 name = "is-retry-allowed";
1575 packageName = "is-retry-allowed";
1576 version = "1.1.0";
1577 src = fetchurl {
1578 url = "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz";
1579 sha1 = "11a060568b67339444033d0125a61a20d564fb34";
1580 };
1581 };
1582 "is-stream-1.1.0" = {
1583 name = "is-stream";
1584 packageName = "is-stream";
1585 version = "1.1.0";
1586 src = fetchurl {
1587 url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
1588 sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
1589 };
1590 };
1591 "lowercase-keys-1.0.0" = {
1592 name = "lowercase-keys";
1593 packageName = "lowercase-keys";
1594 version = "1.0.0";
1595 src = fetchurl {
1596 url = "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz";
1597 sha1 = "4e3366b39e7f5457e35f1324bdf6f88d0bfc7306";
1598 };
1599 };
1600 "node-status-codes-1.0.0" = {
1601 name = "node-status-codes";
1602 packageName = "node-status-codes";
1603 version = "1.0.0";
1604 src = fetchurl {
1605 url = "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz";
1606 sha1 = "5ae5541d024645d32a58fcddc9ceecea7ae3ac2f";
1607 };
1608 };
1609 "parse-json-2.2.0" = {
1610 name = "parse-json";
1611 packageName = "parse-json";
1612 version = "2.2.0";
1613 src = fetchurl {
1614 url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
1615 sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
1616 };
1617 };
1618 "pinkie-promise-2.0.1" = {
1619 name = "pinkie-promise";
1620 packageName = "pinkie-promise";
1621 version = "2.0.1";
1622 src = fetchurl {
1623 url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
1624 sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
1625 };
1626 };
1627 "read-all-stream-3.1.0" = {
1628 name = "read-all-stream";
1629 packageName = "read-all-stream";
1630 version = "3.1.0";
1631 src = fetchurl {
1632 url = "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz";
1633 sha1 = "35c3e177f2078ef789ee4bfafa4373074eaef4fa";
1634 };
1635 };
1636 "readable-stream-2.1.5" = {
1637 name = "readable-stream";
1638 packageName = "readable-stream";
1639 version = "2.1.5";
1640 src = fetchurl {
1641 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz";
1642 sha1 = "66fa8b720e1438b364681f2ad1a63c618448c9d0";
1643 };
1644 };
1645 "timed-out-2.0.0" = {
1646 name = "timed-out";
1647 packageName = "timed-out";
1648 version = "2.0.0";
1649 src = fetchurl {
1650 url = "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz";
1651 sha1 = "f38b0ae81d3747d628001f41dafc652ace671c0a";
1652 };
1653 };
1654 "unzip-response-1.0.0" = {
1655 name = "unzip-response";
1656 packageName = "unzip-response";
1657 version = "1.0.0";
1658 src = fetchurl {
1659 url = "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.0.tgz";
1660 sha1 = "bfda54eeec658f00c2df4d4494b9dca0ca00f3e4";
1661 };
1662 };
1663 "url-parse-lax-1.0.0" = {
1664 name = "url-parse-lax";
1665 packageName = "url-parse-lax";
1666 version = "1.0.0";
1667 src = fetchurl {
1668 url = "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz";
1669 sha1 = "7af8f303645e9bd79a272e7a14ac68bc0609da73";
1670 };
1671 };
1672 "capture-stack-trace-1.0.0" = {
1673 name = "capture-stack-trace";
1674 packageName = "capture-stack-trace";
1675 version = "1.0.0";
1676 src = fetchurl {
1677 url = "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz";
1678 sha1 = "4a6fa07399c26bba47f0b2496b4d0fb408c5550d";
1679 };
1680 };
1681 "error-ex-1.3.0" = {
1682 name = "error-ex";
1683 packageName = "error-ex";
1684 version = "1.3.0";
1685 src = fetchurl {
1686 url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz";
1687 sha1 = "e67b43f3e82c96ea3a584ffee0b9fc3325d802d9";
1688 };
1689 };
1690 "is-arrayish-0.2.1" = {
1691 name = "is-arrayish";
1692 packageName = "is-arrayish";
1693 version = "0.2.1";
1694 src = fetchurl {
1695 url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
1696 sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
1697 };
1698 };
1699 "pinkie-2.0.4" = {
1700 name = "pinkie";
1701 packageName = "pinkie";
1702 version = "2.0.4";
1703 src = fetchurl {
1704 url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
1705 sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
1706 };
1707 };
1708 "buffer-shims-1.0.0" = {
1709 name = "buffer-shims";
1710 packageName = "buffer-shims";
1711 version = "1.0.0";
1712 src = fetchurl {
1713 url = "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz";
1714 sha1 = "9978ce317388c649ad8793028c3477ef044a8b51";
1715 };
1716 };
1717 "core-util-is-1.0.2" = {
1718 name = "core-util-is";
1719 packageName = "core-util-is";
1720 version = "1.0.2";
1721 src = fetchurl {
1722 url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
1723 sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
1724 };
1725 };
1726 "isarray-1.0.0" = {
1727 name = "isarray";
1728 packageName = "isarray";
1729 version = "1.0.0";
1730 src = fetchurl {
1731 url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
1732 sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
1733 };
1734 };
1735 "process-nextick-args-1.0.7" = {
1736 name = "process-nextick-args";
1737 packageName = "process-nextick-args";
1738 version = "1.0.7";
1739 src = fetchurl {
1740 url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
1741 sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
1742 };
1743 };
1744 "string_decoder-0.10.31" = {
1745 name = "string_decoder";
1746 packageName = "string_decoder";
1747 version = "0.10.31";
1748 src = fetchurl {
1749 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
1750 sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
1751 };
1752 };
1753 "util-deprecate-1.0.2" = {
1754 name = "util-deprecate";
1755 packageName = "util-deprecate";
1756 version = "1.0.2";
1757 src = fetchurl {
1758 url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
1759 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
1760 };
1761 };
1762 "prepend-http-1.0.4" = {
1763 name = "prepend-http";
1764 packageName = "prepend-http";
1765 version = "1.0.4";
1766 src = fetchurl {
1767 url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
1768 sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
1769 };
1770 };
1771 "ini-1.3.4" = {
1772 name = "ini";
1773 packageName = "ini";
1774 version = "1.3.4";
1775 src = fetchurl {
1776 url = "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz";
1777 sha1 = "0537cb79daf59b59a1a517dff706c86ec039162e";
1778 };
1779 };
1780 "minimist-1.2.0" = {
1781 name = "minimist";
1782 packageName = "minimist";
1783 version = "1.2.0";
1784 src = fetchurl {
1785 url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
1786 sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
1787 };
1788 };
1789 "strip-json-comments-1.0.4" = {
1790 name = "strip-json-comments";
1791 packageName = "strip-json-comments";
1792 version = "1.0.4";
1793 src = fetchurl {
1794 url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
1795 sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
1796 };
1797 };
1798 "crisper-1.2.0" = {
1799 name = "crisper";
1800 packageName = "crisper";
1801 version = "1.2.0";
1802 src = fetchurl {
1803 url = "https://registry.npmjs.org/crisper/-/crisper-1.2.0.tgz";
1804 sha1 = "9a91f597d71f6110294e076ad44dbb3408568e46";
1805 };
1806 };
1807 "cli-1.0.0" = {
1808 name = "cli";
1809 packageName = "cli";
1810 version = "1.0.0";
1811 src = fetchurl {
1812 url = "https://registry.npmjs.org/cli/-/cli-1.0.0.tgz";
1813 sha1 = "ee07dfc1390e3f2e6a9957cf88e1d4bfa777719d";
1814 };
1815 };
1816 "console-browserify-1.1.0" = {
1817 name = "console-browserify";
1818 packageName = "console-browserify";
1819 version = "1.1.0";
1820 src = fetchurl {
1821 url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
1822 sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
1823 };
1824 };
1825 "htmlparser2-3.8.3" = {
1826 name = "htmlparser2";
1827 packageName = "htmlparser2";
1828 version = "3.8.3";
1829 src = fetchurl {
1830 url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
1831 sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
1832 };
1833 };
1834 "minimatch-3.0.3" = {
1835 name = "minimatch";
1836 packageName = "minimatch";
1837 version = "3.0.3";
1838 src = fetchurl {
1839 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz";
1840 sha1 = "2a4e4090b96b2db06a9d7df01055a62a77c9b774";
1841 };
1842 };
1843 "shelljs-0.3.0" = {
1844 name = "shelljs";
1845 packageName = "shelljs";
1846 version = "0.3.0";
1847 src = fetchurl {
1848 url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
1849 sha1 = "3596e6307a781544f591f37da618360f31db57b1";
1850 };
1851 };
1852 "lodash-3.7.0" = {
1853 name = "lodash";
1854 packageName = "lodash";
1855 version = "3.7.0";
1856 src = fetchurl {
1857 url = "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz";
1858 sha1 = "3678bd8ab995057c07ade836ed2ef087da811d45";
1859 };
1860 };
1861 "glob-7.0.6" = {
1862 name = "glob";
1863 packageName = "glob";
1864 version = "7.0.6";
1865 src = fetchurl {
1866 url = "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz";
1867 sha1 = "211bafaf49e525b8cd93260d14ab136152b3f57a";
1868 };
1869 };
1870 "fs.realpath-1.0.0" = {
1871 name = "fs.realpath";
1872 packageName = "fs.realpath";
1873 version = "1.0.0";
1874 src = fetchurl {
1875 url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
1876 sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
1877 };
1878 };
1879 "inflight-1.0.5" = {
1880 name = "inflight";
1881 packageName = "inflight";
1882 version = "1.0.5";
1883 src = fetchurl {
1884 url = "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz";
1885 sha1 = "db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a";
1886 };
1887 };
1888 "once-1.3.3" = {
1889 name = "once";
1890 packageName = "once";
1891 version = "1.3.3";
1892 src = fetchurl {
1893 url = "https://registry.npmjs.org/once/-/once-1.3.3.tgz";
1894 sha1 = "b2e261557ce4c314ec8304f3fa82663e4297ca20";
1895 };
1896 };
1897 "wrappy-1.0.2" = {
1898 name = "wrappy";
1899 packageName = "wrappy";
1900 version = "1.0.2";
1901 src = fetchurl {
1902 url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
1903 sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
1904 };
1905 };
1906 "brace-expansion-1.1.6" = {
1907 name = "brace-expansion";
1908 packageName = "brace-expansion";
1909 version = "1.1.6";
1910 src = fetchurl {
1911 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz";
1912 sha1 = "7197d7eaa9b87e648390ea61fc66c84427420df9";
1913 };
1914 };
1915 "balanced-match-0.4.2" = {
1916 name = "balanced-match";
1917 packageName = "balanced-match";
1918 version = "0.4.2";
1919 src = fetchurl {
1920 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz";
1921 sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838";
1922 };
1923 };
1924 "concat-map-0.0.1" = {
1925 name = "concat-map";
1926 packageName = "concat-map";
1927 version = "0.0.1";
1928 src = fetchurl {
1929 url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
601 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
1930 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
602 })
1931 };
603 ];
1932 };
604 buildInputs =
1933 "date-now-0.1.4" = {
605 (self.nativeDeps."concat-map" or []);
1934 name = "date-now";
606 deps = {
1935 packageName = "date-now";
607 };
1936 version = "0.1.4";
608 peerDependencies = [
1937 src = fetchurl {
609 ];
1938 url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
610 passthru.names = [ "concat-map" ];
611 };
612 by-spec."console-browserify"."1.1.x" =
613 self.by-version."console-browserify"."1.1.0";
614 by-version."console-browserify"."1.1.0" = lib.makeOverridable self.buildNodePackage {
615 name = "console-browserify-1.1.0";
616 bin = false;
617 src = [
618 (fetchurl {
619 url = "http://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
620 name = "console-browserify-1.1.0.tgz";
621 sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
622 })
623 ];
624 buildInputs =
625 (self.nativeDeps."console-browserify" or []);
626 deps = {
627 "date-now-0.1.4" = self.by-version."date-now"."0.1.4";
628 };
629 peerDependencies = [
630 ];
631 passthru.names = [ "console-browserify" ];
632 };
633 by-spec."core-util-is"."~1.0.0" =
634 self.by-version."core-util-is"."1.0.2";
635 by-version."core-util-is"."1.0.2" = lib.makeOverridable self.buildNodePackage {
636 name = "core-util-is-1.0.2";
637 bin = false;
638 src = [
639 (fetchurl {
640 url = "http://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
641 name = "core-util-is-1.0.2.tgz";
642 sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
643 })
644 ];
645 buildInputs =
646 (self.nativeDeps."core-util-is" or []);
647 deps = {
648 };
649 peerDependencies = [
650 ];
651 passthru.names = [ "core-util-is" ];
652 };
653 by-spec."cryptiles"."2.x.x" =
654 self.by-version."cryptiles"."2.0.5";
655 by-version."cryptiles"."2.0.5" = lib.makeOverridable self.buildNodePackage {
656 name = "cryptiles-2.0.5";
657 bin = false;
658 src = [
659 (fetchurl {
660 url = "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz";
661 name = "cryptiles-2.0.5.tgz";
662 sha1 = "3bdfecdc608147c1c67202fa291e7dca59eaa3b8";
663 })
664 ];
665 buildInputs =
666 (self.nativeDeps."cryptiles" or []);
667 deps = {
668 "boom-2.10.1" = self.by-version."boom"."2.10.1";
669 };
670 peerDependencies = [
671 ];
672 passthru.names = [ "cryptiles" ];
673 };
674 by-spec."dashdash".">=1.10.1 <2.0.0" =
675 self.by-version."dashdash"."1.12.2";
676 by-version."dashdash"."1.12.2" = lib.makeOverridable self.buildNodePackage {
677 name = "dashdash-1.12.2";
678 bin = false;
679 src = [
680 (fetchurl {
681 url = "http://registry.npmjs.org/dashdash/-/dashdash-1.12.2.tgz";
682 name = "dashdash-1.12.2.tgz";
683 sha1 = "1c6f70588498d047b8cd5777b32ba85a5e25be36";
684 })
685 ];
686 buildInputs =
687 (self.nativeDeps."dashdash" or []);
688 deps = {
689 "assert-plus-0.2.0" = self.by-version."assert-plus"."0.2.0";
690 };
691 peerDependencies = [
692 ];
693 passthru.names = [ "dashdash" ];
694 };
695 by-spec."date-now"."^0.1.4" =
696 self.by-version."date-now"."0.1.4";
697 by-version."date-now"."0.1.4" = lib.makeOverridable self.buildNodePackage {
698 name = "date-now-0.1.4";
699 bin = false;
700 src = [
701 (fetchurl {
702 url = "http://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
703 name = "date-now-0.1.4.tgz";
704 sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
1939 sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
705 })
1940 };
706 ];
1941 };
707 buildInputs =
1942 "domhandler-2.3.0" = {
708 (self.nativeDeps."date-now" or []);
1943 name = "domhandler";
709 deps = {
1944 packageName = "domhandler";
710 };
1945 version = "2.3.0";
711 peerDependencies = [
1946 src = fetchurl {
712 ];
1947 url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
713 passthru.names = [ "date-now" ];
1948 sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
714 };
1949 };
715 by-spec."dateformat"."1.0.2-1.2.3" =
1950 };
716 self.by-version."dateformat"."1.0.2-1.2.3";
1951 "domutils-1.5.1" = {
717 by-version."dateformat"."1.0.2-1.2.3" = lib.makeOverridable self.buildNodePackage {
1952 name = "domutils";
718 name = "dateformat-1.0.2-1.2.3";
1953 packageName = "domutils";
719 bin = false;
1954 version = "1.5.1";
720 src = [
1955 src = fetchurl {
721 (fetchurl {
1956 url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
722 url = "http://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz";
1957 sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
723 name = "dateformat-1.0.2-1.2.3.tgz";
1958 };
724 sha1 = "b0220c02de98617433b72851cf47de3df2cdbee9";
1959 };
725 })
1960 "domelementtype-1.3.0" = {
726 ];
1961 name = "domelementtype";
727 buildInputs =
1962 packageName = "domelementtype";
728 (self.nativeDeps."dateformat" or []);
1963 version = "1.3.0";
729 deps = {
1964 src = fetchurl {
730 };
1965 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
731 peerDependencies = [
1966 sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
732 ];
1967 };
733 passthru.names = [ "dateformat" ];
1968 };
734 };
1969 "readable-stream-1.1.14" = {
735 by-spec."debug"."~0.7.0" =
1970 name = "readable-stream";
736 self.by-version."debug"."0.7.4";
1971 packageName = "readable-stream";
737 by-version."debug"."0.7.4" = lib.makeOverridable self.buildNodePackage {
1972 version = "1.1.14";
738 name = "debug-0.7.4";
1973 src = fetchurl {
739 bin = false;
1974 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
740 src = [
1975 sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
741 (fetchurl {
1976 };
742 url = "http://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
1977 };
743 name = "debug-0.7.4.tgz";
1978 "entities-1.0.0" = {
744 sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
1979 name = "entities";
745 })
1980 packageName = "entities";
746 ];
1981 version = "1.0.0";
747 buildInputs =
1982 src = fetchurl {
748 (self.nativeDeps."debug" or []);
1983 url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
749 deps = {
1984 sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
750 };
1985 };
751 peerDependencies = [
1986 };
752 ];
1987 "dom-serializer-0.1.0" = {
753 passthru.names = [ "debug" ];
1988 name = "dom-serializer";
754 };
1989 packageName = "dom-serializer";
755 by-spec."delayed-stream"."~1.0.0" =
1990 version = "0.1.0";
756 self.by-version."delayed-stream"."1.0.0";
1991 src = fetchurl {
757 by-version."delayed-stream"."1.0.0" = lib.makeOverridable self.buildNodePackage {
1992 url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
758 name = "delayed-stream-1.0.0";
759 bin = false;
760 src = [
761 (fetchurl {
762 url = "http://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
763 name = "delayed-stream-1.0.0.tgz";
764 sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
765 })
766 ];
767 buildInputs =
768 (self.nativeDeps."delayed-stream" or []);
769 deps = {
770 };
771 peerDependencies = [
772 ];
773 passthru.names = [ "delayed-stream" ];
774 };
775 by-spec."dom-serializer"."0" =
776 self.by-version."dom-serializer"."0.1.0";
777 by-version."dom-serializer"."0.1.0" = lib.makeOverridable self.buildNodePackage {
778 name = "dom-serializer-0.1.0";
779 bin = false;
780 src = [
781 (fetchurl {
782 url = "http://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
783 name = "dom-serializer-0.1.0.tgz";
784 sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
1993 sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
785 })
1994 };
786 ];
1995 };
787 buildInputs =
1996 "domelementtype-1.1.3" = {
788 (self.nativeDeps."dom-serializer" or []);
1997 name = "domelementtype";
789 deps = {
1998 packageName = "domelementtype";
790 "domelementtype-1.1.3" = self.by-version."domelementtype"."1.1.3";
1999 version = "1.1.3";
791 "entities-1.1.1" = self.by-version."entities"."1.1.1";
2000 src = fetchurl {
792 };
2001 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
793 peerDependencies = [
794 ];
795 passthru.names = [ "dom-serializer" ];
796 };
797 by-spec."domelementtype"."1" =
798 self.by-version."domelementtype"."1.3.0";
799 by-version."domelementtype"."1.3.0" = lib.makeOverridable self.buildNodePackage {
800 name = "domelementtype-1.3.0";
801 bin = false;
802 src = [
803 (fetchurl {
804 url = "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
805 name = "domelementtype-1.3.0.tgz";
806 sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
807 })
808 ];
809 buildInputs =
810 (self.nativeDeps."domelementtype" or []);
811 deps = {
812 };
813 peerDependencies = [
814 ];
815 passthru.names = [ "domelementtype" ];
816 };
817 by-spec."domelementtype"."~1.1.1" =
818 self.by-version."domelementtype"."1.1.3";
819 by-version."domelementtype"."1.1.3" = lib.makeOverridable self.buildNodePackage {
820 name = "domelementtype-1.1.3";
821 bin = false;
822 src = [
823 (fetchurl {
824 url = "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
825 name = "domelementtype-1.1.3.tgz";
826 sha1 = "bd28773e2642881aec51544924299c5cd822185b";
2002 sha1 = "bd28773e2642881aec51544924299c5cd822185b";
827 })
2003 };
2004 };
2005 "entities-1.1.1" = {
2006 name = "entities";
2007 packageName = "entities";
2008 version = "1.1.1";
2009 src = fetchurl {
2010 url = "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
2011 sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
2012 };
2013 };
2014 };
2015 args = {
2016 name = "rhodecode-enterprise";
2017 packageName = "rhodecode-enterprise";
2018 version = "0.0.1";
2019 src = ./.;
2020 dependencies = [
2021 sources."grunt-0.4.5"
2022 sources."grunt-contrib-copy-1.0.0"
2023 (sources."grunt-contrib-concat-0.5.1" // {
2024 dependencies = [
2025 sources."chalk-0.5.1"
2026 sources."ansi-styles-1.1.0"
2027 sources."has-ansi-0.1.0"
2028 sources."strip-ansi-0.3.0"
2029 sources."supports-color-0.2.0"
2030 sources."ansi-regex-0.2.1"
828 ];
2031 ];
829 buildInputs =
830 (self.nativeDeps."domelementtype" or []);
831 deps = {
832 };
833 peerDependencies = [
834 ];
835 passthru.names = [ "domelementtype" ];
836 };
837 by-spec."domhandler"."2.3" =
838 self.by-version."domhandler"."2.3.0";
839 by-version."domhandler"."2.3.0" = lib.makeOverridable self.buildNodePackage {
840 name = "domhandler-2.3.0";
841 bin = false;
842 src = [
843 (fetchurl {
844 url = "http://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
845 name = "domhandler-2.3.0.tgz";
846 sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
847 })
2032 })
2033 sources."grunt-contrib-jshint-0.12.0"
2034 (sources."grunt-contrib-less-1.4.0" // {
2035 dependencies = [
2036 sources."async-2.0.1"
2037 sources."lodash-4.15.0"
848 ];
2038 ];
849 buildInputs =
850 (self.nativeDeps."domhandler" or []);
851 deps = {
852 "domelementtype-1.3.0" = self.by-version."domelementtype"."1.3.0";
853 };
854 peerDependencies = [
855 ];
856 passthru.names = [ "domhandler" ];
857 };
858 by-spec."domutils"."1.5" =
859 self.by-version."domutils"."1.5.1";
860 by-version."domutils"."1.5.1" = lib.makeOverridable self.buildNodePackage {
861 name = "domutils-1.5.1";
862 bin = false;
863 src = [
864 (fetchurl {
865 url = "http://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
866 name = "domutils-1.5.1.tgz";
867 sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
868 })
2039 })
2040 (sources."grunt-contrib-watch-0.6.1" // {
2041 dependencies = [
2042 sources."lodash-2.4.2"
2043 sources."async-0.2.10"
869 ];
2044 ];
870 buildInputs =
871 (self.nativeDeps."domutils" or []);
872 deps = {
873 "dom-serializer-0.1.0" = self.by-version."dom-serializer"."0.1.0";
874 "domelementtype-1.3.0" = self.by-version."domelementtype"."1.3.0";
875 };
876 peerDependencies = [
877 ];
878 passthru.names = [ "domutils" ];
879 };
880 by-spec."ecc-jsbn".">=0.0.1 <1.0.0" =
881 self.by-version."ecc-jsbn"."0.1.1";
882 by-version."ecc-jsbn"."0.1.1" = lib.makeOverridable self.buildNodePackage {
883 name = "ecc-jsbn-0.1.1";
884 bin = false;
885 src = [
886 (fetchurl {
887 url = "http://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz";
888 name = "ecc-jsbn-0.1.1.tgz";
889 sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505";
890 })
2045 })
2046 sources."crisper-2.0.2"
2047 (sources."vulcanize-1.14.8" // {
2048 dependencies = [
2049 sources."nopt-3.0.6"
891 ];
2050 ];
892 buildInputs =
2051 })
893 (self.nativeDeps."ecc-jsbn" or []);
2052 sources."grunt-crisper-1.0.1"
894 deps = {
2053 (sources."grunt-vulcanize-1.0.0" // {
895 "jsbn-0.1.0" = self.by-version."jsbn"."0.1.0";
2054 dependencies = [
896 };
2055 sources."crisper-1.2.0"
897 peerDependencies = [
2056 sources."nopt-3.0.6"
898 ];
2057 ];
899 passthru.names = [ "ecc-jsbn" ];
900 };
901 by-spec."entities"."1.0" =
902 self.by-version."entities"."1.0.0";
903 by-version."entities"."1.0.0" = lib.makeOverridable self.buildNodePackage {
904 name = "entities-1.0.0";
905 bin = false;
906 src = [
907 (fetchurl {
908 url = "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
909 name = "entities-1.0.0.tgz";
910 sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
911 })
2058 })
912 ];
2059 (sources."jshint-2.9.3" // {
913 buildInputs =
2060 dependencies = [
914 (self.nativeDeps."entities" or []);
2061 sources."minimatch-3.0.3"
915 deps = {
2062 sources."lodash-3.7.0"
916 };
917 peerDependencies = [
918 ];
2063 ];
919 passthru.names = [ "entities" ];
920 };
921 by-spec."entities"."~1.1.1" =
922 self.by-version."entities"."1.1.1";
923 by-version."entities"."1.1.1" = lib.makeOverridable self.buildNodePackage {
924 name = "entities-1.1.1";
925 bin = false;
926 src = [
927 (fetchurl {
928 url = "http://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
929 name = "entities-1.1.1.tgz";
930 sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
931 })
2064 })
932 ];
2065 sources."async-0.1.22"
933 buildInputs =
2066 sources."coffee-script-1.3.3"
934 (self.nativeDeps."entities" or []);
2067 sources."colors-0.6.2"
935 deps = {
2068 sources."dateformat-1.0.2-1.2.3"
936 };
2069 sources."eventemitter2-0.4.14"
937 peerDependencies = [
2070 (sources."findup-sync-0.1.3" // {
2071 dependencies = [
2072 sources."glob-3.2.11"
2073 sources."lodash-2.4.2"
2074 sources."minimatch-0.3.0"
938 ];
2075 ];
939 passthru.names = [ "entities" ];
940 };
941 by-spec."errno"."^0.1.1" =
942 self.by-version."errno"."0.1.4";
943 by-version."errno"."0.1.4" = lib.makeOverridable self.buildNodePackage {
944 name = "errno-0.1.4";
945 bin = true;
946 src = [
947 (fetchurl {
948 url = "http://registry.npmjs.org/errno/-/errno-0.1.4.tgz";
949 name = "errno-0.1.4.tgz";
950 sha1 = "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d";
951 })
2076 })
952 ];
2077 (sources."glob-3.1.21" // {
953 buildInputs =
2078 dependencies = [
954 (self.nativeDeps."errno" or []);
2079 sources."inherits-1.0.2"
955 deps = {
956 "prr-0.0.0" = self.by-version."prr"."0.0.0";
957 };
958 peerDependencies = [
959 ];
2080 ];
960 passthru.names = [ "errno" ];
961 };
962 by-spec."escape-string-regexp"."^1.0.0" =
963 self.by-version."escape-string-regexp"."1.0.4";
964 by-version."escape-string-regexp"."1.0.4" = lib.makeOverridable self.buildNodePackage {
965 name = "escape-string-regexp-1.0.4";
966 bin = false;
967 src = [
968 (fetchurl {
969 url = "http://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.4.tgz";
970 name = "escape-string-regexp-1.0.4.tgz";
971 sha1 = "b85e679b46f72d03fbbe8a3bf7259d535c21b62f";
972 })
2081 })
973 ];
2082 sources."hooker-0.2.3"
974 buildInputs =
2083 sources."iconv-lite-0.2.11"
975 (self.nativeDeps."escape-string-regexp" or []);
2084 sources."minimatch-0.2.14"
976 deps = {
2085 sources."nopt-1.0.10"
977 };
2086 sources."rimraf-2.2.8"
978 peerDependencies = [
2087 sources."lodash-0.9.2"
979 ];
2088 sources."underscore.string-2.2.1"
980 passthru.names = [ "escape-string-regexp" ];
2089 sources."which-1.0.9"
981 };
2090 sources."js-yaml-2.0.5"
982 by-spec."escape-string-regexp"."^1.0.2" =
2091 sources."exit-0.1.2"
983 self.by-version."escape-string-regexp"."1.0.4";
2092 sources."getobject-0.1.0"
984 by-spec."esprima"."~ 1.0.2" =
2093 sources."grunt-legacy-util-0.2.0"
985 self.by-version."esprima"."1.0.4";
2094 (sources."grunt-legacy-log-0.1.3" // {
986 by-version."esprima"."1.0.4" = lib.makeOverridable self.buildNodePackage {
2095 dependencies = [
987 name = "esprima-1.0.4";
2096 sources."lodash-2.4.2"
988 bin = true;
2097 sources."underscore.string-2.3.3"
989 src = [
990 (fetchurl {
991 url = "http://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
992 name = "esprima-1.0.4.tgz";
993 sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
994 })
995 ];
996 buildInputs =
997 (self.nativeDeps."esprima" or []);
998 deps = {
999 };
1000 peerDependencies = [
1001 ];
1002 passthru.names = [ "esprima" ];
1003 };
1004 by-spec."eventemitter2"."~0.4.13" =
1005 self.by-version."eventemitter2"."0.4.14";
1006 by-version."eventemitter2"."0.4.14" = lib.makeOverridable self.buildNodePackage {
1007 name = "eventemitter2-0.4.14";
1008 bin = false;
1009 src = [
1010 (fetchurl {
1011 url = "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
1012 name = "eventemitter2-0.4.14.tgz";
1013 sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
1014 })
1015 ];
1016 buildInputs =
1017 (self.nativeDeps."eventemitter2" or []);
1018 deps = {
1019 };
1020 peerDependencies = [
1021 ];
2098 ];
1022 passthru.names = [ "eventemitter2" ];
1023 };
1024 by-spec."exit"."0.1.2" =
1025 self.by-version."exit"."0.1.2";
1026 by-version."exit"."0.1.2" = lib.makeOverridable self.buildNodePackage {
1027 name = "exit-0.1.2";
1028 bin = false;
1029 src = [
1030 (fetchurl {
1031 url = "http://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
1032 name = "exit-0.1.2.tgz";
1033 sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
1034 })
2099 })
1035 ];
2100 sources."inherits-2.0.1"
1036 buildInputs =
2101 sources."lru-cache-2.7.3"
1037 (self.nativeDeps."exit" or []);
2102 sources."sigmund-1.0.1"
1038 deps = {
2103 sources."graceful-fs-1.2.3"
1039 };
2104 sources."abbrev-1.0.9"
1040 peerDependencies = [
2105 (sources."argparse-0.1.16" // {
1041 ];
2106 dependencies = [
1042 passthru.names = [ "exit" ];
2107 sources."underscore.string-2.4.0"
1043 };
1044 by-spec."exit"."0.1.x" =
1045 self.by-version."exit"."0.1.2";
1046 by-spec."exit"."~0.1.1" =
1047 self.by-version."exit"."0.1.2";
1048 by-spec."extend"."~3.0.0" =
1049 self.by-version."extend"."3.0.0";
1050 by-version."extend"."3.0.0" = lib.makeOverridable self.buildNodePackage {
1051 name = "extend-3.0.0";
1052 bin = false;
1053 src = [
1054 (fetchurl {
1055 url = "http://registry.npmjs.org/extend/-/extend-3.0.0.tgz";
1056 name = "extend-3.0.0.tgz";
1057 sha1 = "5a474353b9f3353ddd8176dfd37b91c83a46f1d4";
1058 })
1059 ];
1060 buildInputs =
1061 (self.nativeDeps."extend" or []);
1062 deps = {
1063 };
1064 peerDependencies = [
1065 ];
2108 ];
1066 passthru.names = [ "extend" ];
1067 };
1068 by-spec."extsprintf"."1.0.2" =
1069 self.by-version."extsprintf"."1.0.2";
1070 by-version."extsprintf"."1.0.2" = lib.makeOverridable self.buildNodePackage {
1071 name = "extsprintf-1.0.2";
1072 bin = false;
1073 src = [
1074 (fetchurl {
1075 url = "http://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz";
1076 name = "extsprintf-1.0.2.tgz";
1077 sha1 = "e1080e0658e300b06294990cc70e1502235fd550";
1078 })
2109 })
1079 ];
2110 sources."esprima-1.0.4"
1080 buildInputs =
2111 sources."underscore-1.7.0"
1081 (self.nativeDeps."extsprintf" or []);
2112 (sources."grunt-legacy-log-utils-0.1.1" // {
1082 deps = {
2113 dependencies = [
1083 };
2114 sources."lodash-2.4.2"
1084 peerDependencies = [
2115 sources."underscore.string-2.3.3"
1085 ];
2116 ];
1086 passthru.names = [ "extsprintf" ];
1087 };
1088 by-spec."faye-websocket"."~0.4.3" =
1089 self.by-version."faye-websocket"."0.4.4";
1090 by-version."faye-websocket"."0.4.4" = lib.makeOverridable self.buildNodePackage {
1091 name = "faye-websocket-0.4.4";
1092 bin = false;
1093 src = [
1094 (fetchurl {
1095 url = "http://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz";
1096 name = "faye-websocket-0.4.4.tgz";
1097 sha1 = "c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc";
1098 })
2117 })
1099 ];
2118 sources."chalk-1.1.3"
1100 buildInputs =
2119 sources."file-sync-cmp-0.1.1"
1101 (self.nativeDeps."faye-websocket" or []);
2120 sources."ansi-styles-2.2.1"
1102 deps = {
2121 sources."escape-string-regexp-1.0.5"
1103 };
2122 sources."has-ansi-2.0.0"
1104 peerDependencies = [
2123 sources."strip-ansi-3.0.1"
1105 ];
2124 sources."supports-color-2.0.0"
1106 passthru.names = [ "faye-websocket" ];
2125 sources."ansi-regex-2.0.0"
1107 };
2126 sources."source-map-0.3.0"
1108 by-spec."findup-sync"."~0.1.2" =
2127 sources."amdefine-1.0.0"
1109 self.by-version."findup-sync"."0.1.3";
2128 (sources."less-2.7.1" // {
1110 by-version."findup-sync"."0.1.3" = lib.makeOverridable self.buildNodePackage {
2129 dependencies = [
1111 name = "findup-sync-0.1.3";
2130 sources."graceful-fs-4.1.6"
1112 bin = false;
2131 sources."source-map-0.5.6"
1113 src = [
1114 (fetchurl {
1115 url = "http://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
1116 name = "findup-sync-0.1.3.tgz";
1117 sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
1118 })
1119 ];
2132 ];
1120 buildInputs =
1121 (self.nativeDeps."findup-sync" or []);
1122 deps = {
1123 "glob-3.2.11" = self.by-version."glob"."3.2.11";
1124 "lodash-2.4.2" = self.by-version."lodash"."2.4.2";
1125 };
1126 peerDependencies = [
1127 ];
1128 passthru.names = [ "findup-sync" ];
1129 };
1130 by-spec."forever-agent"."~0.6.1" =
1131 self.by-version."forever-agent"."0.6.1";
1132 by-version."forever-agent"."0.6.1" = lib.makeOverridable self.buildNodePackage {
1133 name = "forever-agent-0.6.1";
1134 bin = false;
1135 src = [
1136 (fetchurl {
1137 url = "http://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
1138 name = "forever-agent-0.6.1.tgz";
1139 sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
1140 })
2133 })
1141 ];
2134 sources."errno-0.1.4"
1142 buildInputs =
2135 sources."image-size-0.5.0"
1143 (self.nativeDeps."forever-agent" or []);
2136 sources."mime-1.3.4"
1144 deps = {
2137 sources."mkdirp-0.5.1"
1145 };
2138 sources."promise-7.1.1"
1146 peerDependencies = [
2139 sources."prr-0.0.0"
1147 ];
2140 sources."minimist-0.0.8"
1148 passthru.names = [ "forever-agent" ];
2141 sources."asap-2.0.4"
1149 };
2142 sources."gaze-0.5.2"
1150 by-spec."form-data"."~1.0.0-rc3" =
2143 sources."tiny-lr-fork-0.0.5"
1151 self.by-version."form-data"."1.0.0-rc3";
2144 (sources."globule-0.1.0" // {
1152 by-version."form-data"."1.0.0-rc3" = lib.makeOverridable self.buildNodePackage {
2145 dependencies = [
1153 name = "form-data-1.0.0-rc3";
2146 sources."lodash-1.0.2"
1154 bin = false;
1155 src = [
1156 (fetchurl {
1157 url = "http://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz";
1158 name = "form-data-1.0.0-rc3.tgz";
1159 sha1 = "d35bc62e7fbc2937ae78f948aaa0d38d90607577";
1160 })
1161 ];
1162 buildInputs =
1163 (self.nativeDeps."form-data" or []);
1164 deps = {
1165 "async-1.5.2" = self.by-version."async"."1.5.2";
1166 "combined-stream-1.0.5" = self.by-version."combined-stream"."1.0.5";
1167 "mime-types-2.1.9" = self.by-version."mime-types"."2.1.9";
1168 };
1169 peerDependencies = [
1170 ];
2147 ];
1171 passthru.names = [ "form-data" ];
1172 };
1173 by-spec."gaze"."~0.5.1" =
1174 self.by-version."gaze"."0.5.2";
1175 by-version."gaze"."0.5.2" = lib.makeOverridable self.buildNodePackage {
1176 name = "gaze-0.5.2";
1177 bin = false;
1178 src = [
1179 (fetchurl {
1180 url = "http://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
1181 name = "gaze-0.5.2.tgz";
1182 sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
1183 })
2148 })
1184 ];
2149 sources."qs-0.5.6"
1185 buildInputs =
2150 sources."faye-websocket-0.4.4"
1186 (self.nativeDeps."gaze" or []);
2151 (sources."noptify-0.0.3" // {
1187 deps = {
2152 dependencies = [
1188 "globule-0.1.0" = self.by-version."globule"."0.1.0";
2153 sources."nopt-2.0.0"
1189 };
1190 peerDependencies = [
1191 ];
2154 ];
1192 passthru.names = [ "gaze" ];
1193 };
1194 by-spec."generate-function"."^2.0.0" =
1195 self.by-version."generate-function"."2.0.0";
1196 by-version."generate-function"."2.0.0" = lib.makeOverridable self.buildNodePackage {
1197 name = "generate-function-2.0.0";
1198 bin = false;
1199 src = [
1200 (fetchurl {
1201 url = "http://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz";
1202 name = "generate-function-2.0.0.tgz";
1203 sha1 = "6858fe7c0969b7d4e9093337647ac79f60dfbe74";
1204 })
2155 })
1205 ];
2156 sources."debug-0.7.4"
1206 buildInputs =
2157 sources."command-line-args-2.1.6"
1207 (self.nativeDeps."generate-function" or []);
2158 sources."dom5-1.3.3"
1208 deps = {
2159 sources."array-back-1.0.3"
1209 };
2160 sources."command-line-usage-2.0.5"
1210 peerDependencies = [
2161 sources."core-js-2.4.1"
1211 ];
2162 sources."feature-detect-es6-1.3.1"
1212 passthru.names = [ "generate-function" ];
2163 (sources."find-replace-1.0.2" // {
1213 };
2164 dependencies = [
1214 by-spec."generate-object-property"."^1.1.0" =
2165 sources."test-value-2.0.0"
1215 self.by-version."generate-object-property"."1.2.0";
1216 by-version."generate-object-property"."1.2.0" = lib.makeOverridable self.buildNodePackage {
1217 name = "generate-object-property-1.2.0";
1218 bin = false;
1219 src = [
1220 (fetchurl {
1221 url = "http://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz";
1222 name = "generate-object-property-1.2.0.tgz";
1223 sha1 = "9c0e1c40308ce804f4783618b937fa88f99d50d0";
1224 })
1225 ];
1226 buildInputs =
1227 (self.nativeDeps."generate-object-property" or []);
1228 deps = {
1229 "is-property-1.0.2" = self.by-version."is-property"."1.0.2";
1230 };
1231 peerDependencies = [
1232 ];
2166 ];
1233 passthru.names = [ "generate-object-property" ];
1234 };
1235 by-spec."getobject"."~0.1.0" =
1236 self.by-version."getobject"."0.1.0";
1237 by-version."getobject"."0.1.0" = lib.makeOverridable self.buildNodePackage {
1238 name = "getobject-0.1.0";
1239 bin = false;
1240 src = [
1241 (fetchurl {
1242 url = "http://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz";
1243 name = "getobject-0.1.0.tgz";
1244 sha1 = "047a449789fa160d018f5486ed91320b6ec7885c";
1245 })
2167 })
1246 ];
2168 sources."typical-2.5.0"
1247 buildInputs =
2169 sources."ansi-escape-sequences-2.2.2"
1248 (self.nativeDeps."getobject" or []);
2170 sources."column-layout-2.1.4"
1249 deps = {
2171 sources."wordwrapjs-1.2.1"
1250 };
2172 sources."collect-all-0.2.1"
1251 peerDependencies = [
2173 sources."stream-connect-1.0.2"
1252 ];
2174 sources."stream-via-0.1.1"
1253 passthru.names = [ "getobject" ];
2175 (sources."collect-json-1.0.8" // {
1254 };
2176 dependencies = [
1255 by-spec."glob"."~ 3.2.1" =
2177 sources."collect-all-1.0.2"
1256 self.by-version."glob"."3.2.11";
2178 sources."stream-via-1.0.3"
1257 by-version."glob"."3.2.11" = lib.makeOverridable self.buildNodePackage {
1258 name = "glob-3.2.11";
1259 bin = false;
1260 src = [
1261 (fetchurl {
1262 url = "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
1263 name = "glob-3.2.11.tgz";
1264 sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
1265 })
1266 ];
1267 buildInputs =
1268 (self.nativeDeps."glob" or []);
1269 deps = {
1270 "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
1271 "minimatch-0.3.0" = self.by-version."minimatch"."0.3.0";
1272 };
1273 peerDependencies = [
1274 ];
2179 ];
1275 passthru.names = [ "glob" ];
1276 };
1277 by-spec."glob"."~3.1.21" =
1278 self.by-version."glob"."3.1.21";
1279 by-version."glob"."3.1.21" = lib.makeOverridable self.buildNodePackage {
1280 name = "glob-3.1.21";
1281 bin = false;
1282 src = [
1283 (fetchurl {
1284 url = "http://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
1285 name = "glob-3.1.21.tgz";
1286 sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
1287 })
2180 })
1288 ];
2181 sources."deep-extend-0.4.1"
1289 buildInputs =
2182 sources."object-tools-2.0.6"
1290 (self.nativeDeps."glob" or []);
2183 sources."object-get-2.1.0"
1291 deps = {
2184 sources."test-value-1.1.0"
1292 "minimatch-0.2.14" = self.by-version."minimatch"."0.2.14";
2185 sources."@types/clone-0.1.29"
1293 "graceful-fs-1.2.3" = self.by-version."graceful-fs"."1.2.3";
2186 sources."@types/node-4.0.30"
1294 "inherits-1.0.2" = self.by-version."inherits"."1.0.2";
2187 (sources."@types/parse5-0.0.28" // {
1295 };
2188 dependencies = [
1296 peerDependencies = [
2189 sources."@types/node-6.0.37"
1297 ];
1298 passthru.names = [ "glob" ];
1299 };
1300 by-spec."glob"."~3.2.9" =
1301 self.by-version."glob"."3.2.11";
1302 by-spec."globule"."~0.1.0" =
1303 self.by-version."globule"."0.1.0";
1304 by-version."globule"."0.1.0" = lib.makeOverridable self.buildNodePackage {
1305 name = "globule-0.1.0";
1306 bin = false;
1307 src = [
1308 (fetchurl {
1309 url = "http://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
1310 name = "globule-0.1.0.tgz";
1311 sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
1312 })
1313 ];
1314 buildInputs =
1315 (self.nativeDeps."globule" or []);
1316 deps = {
1317 "lodash-1.0.2" = self.by-version."lodash"."1.0.2";
1318 "glob-3.1.21" = self.by-version."glob"."3.1.21";
1319 "minimatch-0.2.14" = self.by-version."minimatch"."0.2.14";
1320 };
1321 peerDependencies = [
1322 ];
1323 passthru.names = [ "globule" ];
1324 };
1325 by-spec."graceful-fs"."^3.0.5" =
1326 self.by-version."graceful-fs"."3.0.8";
1327 by-version."graceful-fs"."3.0.8" = lib.makeOverridable self.buildNodePackage {
1328 name = "graceful-fs-3.0.8";
1329 bin = false;
1330 src = [
1331 (fetchurl {
1332 url = "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.8.tgz";
1333 name = "graceful-fs-3.0.8.tgz";
1334 sha1 = "ce813e725fa82f7e6147d51c9a5ca68270551c22";
1335 })
1336 ];
2190 ];
1337 buildInputs =
1338 (self.nativeDeps."graceful-fs" or []);
1339 deps = {
1340 };
1341 peerDependencies = [
1342 ];
1343 passthru.names = [ "graceful-fs" ];
1344 };
1345 by-spec."graceful-fs"."~1.2.0" =
1346 self.by-version."graceful-fs"."1.2.3";
1347 by-version."graceful-fs"."1.2.3" = lib.makeOverridable self.buildNodePackage {
1348 name = "graceful-fs-1.2.3";
1349 bin = false;
1350 src = [
1351 (fetchurl {
1352 url = "http://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
1353 name = "graceful-fs-1.2.3.tgz";
1354 sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
1355 })
2191 })
1356 ];
2192 sources."clone-1.0.2"
1357 buildInputs =
2193 sources."parse5-1.5.1"
1358 (self.nativeDeps."graceful-fs" or []);
2194 sources."es6-promise-2.3.0"
1359 deps = {
2195 sources."hydrolysis-1.24.1"
1360 };
2196 sources."path-posix-1.0.0"
1361 peerDependencies = [
2197 sources."update-notifier-0.6.3"
1362 ];
2198 sources."babel-polyfill-6.13.0"
1363 passthru.names = [ "graceful-fs" ];
2199 sources."doctrine-0.7.2"
1364 };
2200 (sources."escodegen-1.8.1" // {
1365 by-spec."graceful-readlink".">= 1.0.0" =
2201 dependencies = [
1366 self.by-version."graceful-readlink"."1.0.1";
2202 sources."estraverse-1.9.3"
1367 by-version."graceful-readlink"."1.0.1" = lib.makeOverridable self.buildNodePackage {
2203 sources."esutils-2.0.2"
1368 name = "graceful-readlink-1.0.1";
2204 sources."esprima-2.7.3"
1369 bin = false;
2205 sources."source-map-0.2.0"
1370 src = [
1371 (fetchurl {
1372 url = "http://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz";
1373 name = "graceful-readlink-1.0.1.tgz";
1374 sha1 = "4cafad76bc62f02fa039b2f94e9a3dd3a391a725";
1375 })
1376 ];
1377 buildInputs =
1378 (self.nativeDeps."graceful-readlink" or []);
1379 deps = {
1380 };
1381 peerDependencies = [
1382 ];
2206 ];
1383 passthru.names = [ "graceful-readlink" ];
1384 };
1385 by-spec."grunt".">=0.4.0" =
1386 self.by-version."grunt"."0.4.5";
1387 by-version."grunt"."0.4.5" = lib.makeOverridable self.buildNodePackage {
1388 name = "grunt-0.4.5";
1389 bin = false;
1390 src = [
1391 (fetchurl {
1392 url = "http://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz";
1393 name = "grunt-0.4.5.tgz";
1394 sha1 = "56937cd5194324adff6d207631832a9d6ba4e7f0";
1395 })
2207 })
1396 ];
2208 sources."espree-3.1.7"
1397 buildInputs =
2209 sources."estraverse-3.1.0"
1398 (self.nativeDeps."grunt" or []);
2210 sources."path-is-absolute-1.0.0"
1399 deps = {
2211 sources."babel-runtime-6.11.6"
1400 "async-0.1.22" = self.by-version."async"."0.1.22";
2212 sources."regenerator-runtime-0.9.5"
1401 "coffee-script-1.3.3" = self.by-version."coffee-script"."1.3.3";
2213 sources."esutils-1.1.6"
1402 "colors-0.6.2" = self.by-version."colors"."0.6.2";
2214 sources."isarray-0.0.1"
1403 "dateformat-1.0.2-1.2.3" = self.by-version."dateformat"."1.0.2-1.2.3";
2215 sources."optionator-0.8.1"
1404 "eventemitter2-0.4.14" = self.by-version."eventemitter2"."0.4.14";
2216 sources."prelude-ls-1.1.2"
1405 "findup-sync-0.1.3" = self.by-version."findup-sync"."0.1.3";
2217 sources."deep-is-0.1.3"
1406 "glob-3.1.21" = self.by-version."glob"."3.1.21";
2218 sources."wordwrap-1.0.0"
1407 "hooker-0.2.3" = self.by-version."hooker"."0.2.3";
2219 sources."type-check-0.3.2"
1408 "iconv-lite-0.2.11" = self.by-version."iconv-lite"."0.2.11";
2220 sources."levn-0.3.0"
1409 "minimatch-0.2.14" = self.by-version."minimatch"."0.2.14";
2221 sources."fast-levenshtein-1.1.4"
1410 "nopt-1.0.10" = self.by-version."nopt"."1.0.10";
2222 sources."acorn-3.3.0"
1411 "rimraf-2.2.8" = self.by-version."rimraf"."2.2.8";
2223 sources."acorn-jsx-3.0.1"
1412 "lodash-0.9.2" = self.by-version."lodash"."0.9.2";
2224 sources."boxen-0.3.1"
1413 "underscore.string-2.2.1" = self.by-version."underscore.string"."2.2.1";
2225 (sources."configstore-2.0.0" // {
1414 "which-1.0.9" = self.by-version."which"."1.0.9";
2226 dependencies = [
1415 "js-yaml-2.0.5" = self.by-version."js-yaml"."2.0.5";
2227 sources."graceful-fs-4.1.6"
1416 "exit-0.1.2" = self.by-version."exit"."0.1.2";
1417 "getobject-0.1.0" = self.by-version."getobject"."0.1.0";
1418 "grunt-legacy-util-0.2.0" = self.by-version."grunt-legacy-util"."0.2.0";
1419 "grunt-legacy-log-0.1.3" = self.by-version."grunt-legacy-log"."0.1.3";
1420 };
1421 peerDependencies = [
1422 ];
1423 passthru.names = [ "grunt" ];
1424 };
1425 by-spec."grunt"."^0.4.5" =
1426 self.by-version."grunt"."0.4.5";
1427 "grunt" = self.by-version."grunt"."0.4.5";
1428 by-spec."grunt"."~0.4.0" =
1429 self.by-version."grunt"."0.4.5";
1430 by-spec."grunt-contrib-concat"."^0.5.1" =
1431 self.by-version."grunt-contrib-concat"."0.5.1";
1432 by-version."grunt-contrib-concat"."0.5.1" = lib.makeOverridable self.buildNodePackage {
1433 name = "grunt-contrib-concat-0.5.1";
1434 bin = false;
1435 src = [
1436 (fetchurl {
1437 url = "http://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz";
1438 name = "grunt-contrib-concat-0.5.1.tgz";
1439 sha1 = "953c6efdfdfd2c107ab9c85077f2d4b24d31cd49";
1440 })
1441 ];
2228 ];
1442 buildInputs =
1443 (self.nativeDeps."grunt-contrib-concat" or []);
1444 deps = {
1445 "chalk-0.5.1" = self.by-version."chalk"."0.5.1";
1446 "source-map-0.3.0" = self.by-version."source-map"."0.3.0";
1447 };
1448 peerDependencies = [
1449 self.by-version."grunt"."0.4.5"
1450 ];
1451 passthru.names = [ "grunt-contrib-concat" ];
1452 };
1453 "grunt-contrib-concat" = self.by-version."grunt-contrib-concat"."0.5.1";
1454 by-spec."grunt-contrib-jshint"."^0.12.0" =
1455 self.by-version."grunt-contrib-jshint"."0.12.0";
1456 by-version."grunt-contrib-jshint"."0.12.0" = lib.makeOverridable self.buildNodePackage {
1457 name = "grunt-contrib-jshint-0.12.0";
1458 bin = false;
1459 src = [
1460 (fetchurl {
1461 url = "http://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.12.0.tgz";
1462 name = "grunt-contrib-jshint-0.12.0.tgz";
1463 sha1 = "f6b2f06fc715264837a7ab6c69a1ce1a689c2c29";
1464 })
2229 })
1465 ];
2230 sources."is-npm-1.0.0"
1466 buildInputs =
2231 sources."latest-version-2.0.0"
1467 (self.nativeDeps."grunt-contrib-jshint" or []);
2232 sources."semver-diff-2.1.0"
1468 deps = {
2233 sources."filled-array-1.1.0"
1469 "hooker-0.2.3" = self.by-version."hooker"."0.2.3";
2234 sources."object-assign-4.1.0"
1470 "jshint-2.9.1" = self.by-version."jshint"."2.9.1";
2235 sources."repeating-2.0.1"
1471 };
2236 sources."string-width-1.0.2"
1472 peerDependencies = [
2237 sources."widest-line-1.0.0"
1473 self.by-version."grunt"."0.4.5"
2238 sources."is-finite-1.0.1"
1474 ];
2239 sources."number-is-nan-1.0.0"
1475 passthru.names = [ "grunt-contrib-jshint" ];
2240 sources."code-point-at-1.0.0"
1476 };
2241 sources."is-fullwidth-code-point-1.0.0"
1477 "grunt-contrib-jshint" = self.by-version."grunt-contrib-jshint"."0.12.0";
2242 sources."dot-prop-2.4.0"
1478 by-spec."grunt-contrib-less"."^1.1.0" =
2243 sources."os-tmpdir-1.0.1"
1479 self.by-version."grunt-contrib-less"."1.1.0";
2244 sources."osenv-0.1.3"
1480 by-version."grunt-contrib-less"."1.1.0" = lib.makeOverridable self.buildNodePackage {
2245 sources."uuid-2.0.2"
1481 name = "grunt-contrib-less-1.1.0";
2246 (sources."write-file-atomic-1.2.0" // {
1482 bin = false;
2247 dependencies = [
1483 src = [
2248 sources."graceful-fs-4.1.6"
1484 (fetchurl {
1485 url = "http://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.1.0.tgz";
1486 name = "grunt-contrib-less-1.1.0.tgz";
1487 sha1 = "44d5c5521ad76f3675a12374125d019b5dd03f51";
1488 })
1489 ];
2249 ];
1490 buildInputs =
1491 (self.nativeDeps."grunt-contrib-less" or []);
1492 deps = {
1493 "async-0.9.2" = self.by-version."async"."0.9.2";
1494 "chalk-1.1.1" = self.by-version."chalk"."1.1.1";
1495 "less-2.5.3" = self.by-version."less"."2.5.3";
1496 "lodash-3.10.1" = self.by-version."lodash"."3.10.1";
1497 };
1498 peerDependencies = [
1499 self.by-version."grunt"."0.4.5"
1500 ];
1501 passthru.names = [ "grunt-contrib-less" ];
1502 };
1503 "grunt-contrib-less" = self.by-version."grunt-contrib-less"."1.1.0";
1504 by-spec."grunt-contrib-watch"."^0.6.1" =
1505 self.by-version."grunt-contrib-watch"."0.6.1";
1506 by-version."grunt-contrib-watch"."0.6.1" = lib.makeOverridable self.buildNodePackage {
1507 name = "grunt-contrib-watch-0.6.1";
1508 bin = false;
1509 src = [
1510 (fetchurl {
1511 url = "http://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz";
1512 name = "grunt-contrib-watch-0.6.1.tgz";
1513 sha1 = "64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15";
1514 })
2250 })
1515 ];
2251 sources."xdg-basedir-2.0.0"
1516 buildInputs =
2252 sources."is-obj-1.0.1"
1517 (self.nativeDeps."grunt-contrib-watch" or []);
2253 sources."os-homedir-1.0.1"
1518 deps = {
2254 sources."imurmurhash-0.1.4"
1519 "gaze-0.5.2" = self.by-version."gaze"."0.5.2";
2255 sources."slide-1.1.6"
1520 "tiny-lr-fork-0.0.5" = self.by-version."tiny-lr-fork"."0.0.5";
2256 sources."package-json-2.3.3"
1521 "lodash-2.4.2" = self.by-version."lodash"."2.4.2";
2257 sources."got-5.6.0"
1522 "async-0.2.10" = self.by-version."async"."0.2.10";
2258 (sources."rc-1.1.6" // {
1523 };
2259 dependencies = [
1524 peerDependencies = [
2260 sources."minimist-1.2.0"
1525 self.by-version."grunt"."0.4.5"
1526 ];
1527 passthru.names = [ "grunt-contrib-watch" ];
1528 };
1529 "grunt-contrib-watch" = self.by-version."grunt-contrib-watch"."0.6.1";
1530 by-spec."grunt-legacy-log"."~0.1.0" =
1531 self.by-version."grunt-legacy-log"."0.1.3";
1532 by-version."grunt-legacy-log"."0.1.3" = lib.makeOverridable self.buildNodePackage {
1533 name = "grunt-legacy-log-0.1.3";
1534 bin = false;
1535 src = [
1536 (fetchurl {
1537 url = "http://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz";
1538 name = "grunt-legacy-log-0.1.3.tgz";
1539 sha1 = "ec29426e803021af59029f87d2f9cd7335a05531";
1540 })
1541 ];
2261 ];
1542 buildInputs =
1543 (self.nativeDeps."grunt-legacy-log" or []);
1544 deps = {
1545 "colors-0.6.2" = self.by-version."colors"."0.6.2";
1546 "grunt-legacy-log-utils-0.1.1" = self.by-version."grunt-legacy-log-utils"."0.1.1";
1547 "hooker-0.2.3" = self.by-version."hooker"."0.2.3";
1548 "lodash-2.4.2" = self.by-version."lodash"."2.4.2";
1549 "underscore.string-2.3.3" = self.by-version."underscore.string"."2.3.3";
1550 };
1551 peerDependencies = [
1552 ];
1553 passthru.names = [ "grunt-legacy-log" ];
1554 };
1555 by-spec."grunt-legacy-log-utils"."~0.1.1" =
1556 self.by-version."grunt-legacy-log-utils"."0.1.1";
1557 by-version."grunt-legacy-log-utils"."0.1.1" = lib.makeOverridable self.buildNodePackage {
1558 name = "grunt-legacy-log-utils-0.1.1";
1559 bin = false;
1560 src = [
1561 (fetchurl {
1562 url = "http://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz";
1563 name = "grunt-legacy-log-utils-0.1.1.tgz";
1564 sha1 = "c0706b9dd9064e116f36f23fe4e6b048672c0f7e";
1565 })
2262 })
1566 ];
2263 sources."registry-url-3.1.0"
1567 buildInputs =
2264 sources."semver-5.3.0"
1568 (self.nativeDeps."grunt-legacy-log-utils" or []);
2265 sources."create-error-class-3.0.2"
1569 deps = {
2266 sources."duplexer2-0.1.4"
1570 "lodash-2.4.2" = self.by-version."lodash"."2.4.2";
2267 sources."is-plain-obj-1.1.0"
1571 "underscore.string-2.3.3" = self.by-version."underscore.string"."2.3.3";
2268 sources."is-redirect-1.0.0"
1572 "colors-0.6.2" = self.by-version."colors"."0.6.2";
2269 sources."is-retry-allowed-1.1.0"
1573 };
2270 sources."is-stream-1.1.0"
1574 peerDependencies = [
2271 sources."lowercase-keys-1.0.0"
1575 ];
2272 sources."node-status-codes-1.0.0"
1576 passthru.names = [ "grunt-legacy-log-utils" ];
2273 sources."parse-json-2.2.0"
1577 };
2274 sources."pinkie-promise-2.0.1"
1578 by-spec."grunt-legacy-util"."~0.2.0" =
2275 sources."read-all-stream-3.1.0"
1579 self.by-version."grunt-legacy-util"."0.2.0";
2276 (sources."readable-stream-2.1.5" // {
1580 by-version."grunt-legacy-util"."0.2.0" = lib.makeOverridable self.buildNodePackage {
2277 dependencies = [
1581 name = "grunt-legacy-util-0.2.0";
2278 sources."isarray-1.0.0"
1582 bin = false;
1583 src = [
1584 (fetchurl {
1585 url = "http://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz";
1586 name = "grunt-legacy-util-0.2.0.tgz";
1587 sha1 = "93324884dbf7e37a9ff7c026dff451d94a9e554b";
1588 })
1589 ];
2279 ];
1590 buildInputs =
1591 (self.nativeDeps."grunt-legacy-util" or []);
1592 deps = {
1593 "hooker-0.2.3" = self.by-version."hooker"."0.2.3";
1594 "async-0.1.22" = self.by-version."async"."0.1.22";
1595 "lodash-0.9.2" = self.by-version."lodash"."0.9.2";
1596 "exit-0.1.2" = self.by-version."exit"."0.1.2";
1597 "underscore.string-2.2.1" = self.by-version."underscore.string"."2.2.1";
1598 "getobject-0.1.0" = self.by-version."getobject"."0.1.0";
1599 "which-1.0.9" = self.by-version."which"."1.0.9";
1600 };
1601 peerDependencies = [
1602 ];
1603 passthru.names = [ "grunt-legacy-util" ];
1604 };
1605 by-spec."har-validator"."~2.0.2" =
1606 self.by-version."har-validator"."2.0.6";
1607 by-version."har-validator"."2.0.6" = lib.makeOverridable self.buildNodePackage {
1608 name = "har-validator-2.0.6";
1609 bin = true;
1610 src = [
1611 (fetchurl {
1612 url = "http://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz";
1613 name = "har-validator-2.0.6.tgz";
1614 sha1 = "cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d";
1615 })
2280 })
2281 sources."timed-out-2.0.0"
2282 sources."unzip-response-1.0.0"
2283 sources."url-parse-lax-1.0.0"
2284 sources."capture-stack-trace-1.0.0"
2285 sources."error-ex-1.3.0"
2286 sources."is-arrayish-0.2.1"
2287 sources."pinkie-2.0.4"
2288 sources."buffer-shims-1.0.0"
2289 sources."core-util-is-1.0.2"
2290 sources."process-nextick-args-1.0.7"
2291 sources."string_decoder-0.10.31"
2292 sources."util-deprecate-1.0.2"
2293 sources."prepend-http-1.0.4"
2294 sources."ini-1.3.4"
2295 sources."strip-json-comments-1.0.4"
2296 (sources."cli-1.0.0" // {
2297 dependencies = [
2298 sources."glob-7.0.6"
2299 sources."minimatch-3.0.3"
1616 ];
2300 ];
1617 buildInputs =
2301 })
1618 (self.nativeDeps."har-validator" or []);
2302 sources."console-browserify-1.1.0"
1619 deps = {
2303 (sources."htmlparser2-3.8.3" // {
1620 "chalk-1.1.1" = self.by-version."chalk"."1.1.1";
2304 dependencies = [
1621 "commander-2.9.0" = self.by-version."commander"."2.9.0";
2305 sources."readable-stream-1.1.14"
1622 "is-my-json-valid-2.12.4" = self.by-version."is-my-json-valid"."2.12.4";
1623 "pinkie-promise-2.0.0" = self.by-version."pinkie-promise"."2.0.0";
1624 };
1625 peerDependencies = [
1626 ];
2306 ];
1627 passthru.names = [ "har-validator" ];
1628 };
1629 by-spec."has-ansi"."^0.1.0" =
1630 self.by-version."has-ansi"."0.1.0";
1631 by-version."has-ansi"."0.1.0" = lib.makeOverridable self.buildNodePackage {
1632 name = "has-ansi-0.1.0";
1633 bin = true;
1634 src = [
1635 (fetchurl {
1636 url = "http://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
1637 name = "has-ansi-0.1.0.tgz";
1638 sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
1639 })
2307 })
2308 sources."shelljs-0.3.0"
2309 sources."fs.realpath-1.0.0"
2310 sources."inflight-1.0.5"
2311 sources."once-1.3.3"
2312 sources."wrappy-1.0.2"
2313 sources."brace-expansion-1.1.6"
2314 sources."balanced-match-0.4.2"
2315 sources."concat-map-0.0.1"
2316 sources."date-now-0.1.4"
2317 sources."domhandler-2.3.0"
2318 sources."domutils-1.5.1"
2319 sources."domelementtype-1.3.0"
2320 sources."entities-1.0.0"
2321 (sources."dom-serializer-0.1.0" // {
2322 dependencies = [
2323 sources."domelementtype-1.1.3"
2324 sources."entities-1.1.1"
1640 ];
2325 ];
1641 buildInputs =
1642 (self.nativeDeps."has-ansi" or []);
1643 deps = {
1644 "ansi-regex-0.2.1" = self.by-version."ansi-regex"."0.2.1";
1645 };
1646 peerDependencies = [
1647 ];
1648 passthru.names = [ "has-ansi" ];
1649 };
1650 by-spec."has-ansi"."^2.0.0" =
1651 self.by-version."has-ansi"."2.0.0";
1652 by-version."has-ansi"."2.0.0" = lib.makeOverridable self.buildNodePackage {
1653 name = "has-ansi-2.0.0";
1654 bin = false;
1655 src = [
1656 (fetchurl {
1657 url = "http://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
1658 name = "has-ansi-2.0.0.tgz";
1659 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
1660 })
2326 })
1661 ];
2327 ];
1662 buildInputs =
2328 meta = {
1663 (self.nativeDeps."has-ansi" or []);
2329 };
1664 deps = {
2330 production = false;
1665 "ansi-regex-2.0.0" = self.by-version."ansi-regex"."2.0.0";
2331 };
1666 };
2332 in
1667 peerDependencies = [
2333 {
1668 ];
2334 tarball = nodeEnv.buildNodeSourceDist args;
1669 passthru.names = [ "has-ansi" ];
2335 package = nodeEnv.buildNodePackage args;
1670 };
2336 shell = nodeEnv.buildNodeShell args;
1671 by-spec."hawk"."~3.1.0" =
2337 } No newline at end of file
1672 self.by-version."hawk"."3.1.3";
1673 by-version."hawk"."3.1.3" = lib.makeOverridable self.buildNodePackage {
1674 name = "hawk-3.1.3";
1675 bin = false;
1676 src = [
1677 (fetchurl {
1678 url = "http://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz";
1679 name = "hawk-3.1.3.tgz";
1680 sha1 = "078444bd7c1640b0fe540d2c9b73d59678e8e1c4";
1681 })
1682 ];
1683 buildInputs =
1684 (self.nativeDeps."hawk" or []);
1685 deps = {
1686 "hoek-2.16.3" = self.by-version."hoek"."2.16.3";
1687 "boom-2.10.1" = self.by-version."boom"."2.10.1";
1688 "cryptiles-2.0.5" = self.by-version."cryptiles"."2.0.5";
1689 "sntp-1.0.9" = self.by-version."sntp"."1.0.9";
1690 };
1691 peerDependencies = [
1692 ];
1693 passthru.names = [ "hawk" ];
1694 };
1695 by-spec."hoek"."2.x.x" =
1696 self.by-version."hoek"."2.16.3";
1697 by-version."hoek"."2.16.3" = lib.makeOverridable self.buildNodePackage {
1698 name = "hoek-2.16.3";
1699 bin = false;
1700 src = [
1701 (fetchurl {
1702 url = "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz";
1703 name = "hoek-2.16.3.tgz";
1704 sha1 = "20bb7403d3cea398e91dc4710a8ff1b8274a25ed";
1705 })
1706 ];
1707 buildInputs =
1708 (self.nativeDeps."hoek" or []);
1709 deps = {
1710 };
1711 peerDependencies = [
1712 ];
1713 passthru.names = [ "hoek" ];
1714 };
1715 by-spec."hooker"."^0.2.3" =
1716 self.by-version."hooker"."0.2.3";
1717 by-version."hooker"."0.2.3" = lib.makeOverridable self.buildNodePackage {
1718 name = "hooker-0.2.3";
1719 bin = false;
1720 src = [
1721 (fetchurl {
1722 url = "http://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
1723 name = "hooker-0.2.3.tgz";
1724 sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
1725 })
1726 ];
1727 buildInputs =
1728 (self.nativeDeps."hooker" or []);
1729 deps = {
1730 };
1731 peerDependencies = [
1732 ];
1733 passthru.names = [ "hooker" ];
1734 };
1735 by-spec."hooker"."~0.2.3" =
1736 self.by-version."hooker"."0.2.3";
1737 by-spec."htmlparser2"."3.8.x" =
1738 self.by-version."htmlparser2"."3.8.3";
1739 by-version."htmlparser2"."3.8.3" = lib.makeOverridable self.buildNodePackage {
1740 name = "htmlparser2-3.8.3";
1741 bin = false;
1742 src = [
1743 (fetchurl {
1744 url = "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
1745 name = "htmlparser2-3.8.3.tgz";
1746 sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
1747 })
1748 ];
1749 buildInputs =
1750 (self.nativeDeps."htmlparser2" or []);
1751 deps = {
1752 "domhandler-2.3.0" = self.by-version."domhandler"."2.3.0";
1753 "domutils-1.5.1" = self.by-version."domutils"."1.5.1";
1754 "domelementtype-1.3.0" = self.by-version."domelementtype"."1.3.0";
1755 "readable-stream-1.1.13" = self.by-version."readable-stream"."1.1.13";
1756 "entities-1.0.0" = self.by-version."entities"."1.0.0";
1757 };
1758 peerDependencies = [
1759 ];
1760 passthru.names = [ "htmlparser2" ];
1761 };
1762 by-spec."http-signature"."~1.1.0" =
1763 self.by-version."http-signature"."1.1.0";
1764 by-version."http-signature"."1.1.0" = lib.makeOverridable self.buildNodePackage {
1765 name = "http-signature-1.1.0";
1766 bin = false;
1767 src = [
1768 (fetchurl {
1769 url = "http://registry.npmjs.org/http-signature/-/http-signature-1.1.0.tgz";
1770 name = "http-signature-1.1.0.tgz";
1771 sha1 = "5d2d7e9b6ef49980ad5b128d8e4ef09a31c90d95";
1772 })
1773 ];
1774 buildInputs =
1775 (self.nativeDeps."http-signature" or []);
1776 deps = {
1777 "assert-plus-0.1.5" = self.by-version."assert-plus"."0.1.5";
1778 "jsprim-1.2.2" = self.by-version."jsprim"."1.2.2";
1779 "sshpk-1.7.3" = self.by-version."sshpk"."1.7.3";
1780 };
1781 peerDependencies = [
1782 ];
1783 passthru.names = [ "http-signature" ];
1784 };
1785 by-spec."iconv-lite"."~0.2.11" =
1786 self.by-version."iconv-lite"."0.2.11";
1787 by-version."iconv-lite"."0.2.11" = lib.makeOverridable self.buildNodePackage {
1788 name = "iconv-lite-0.2.11";
1789 bin = false;
1790 src = [
1791 (fetchurl {
1792 url = "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz";
1793 name = "iconv-lite-0.2.11.tgz";
1794 sha1 = "1ce60a3a57864a292d1321ff4609ca4bb965adc8";
1795 })
1796 ];
1797 buildInputs =
1798 (self.nativeDeps."iconv-lite" or []);
1799 deps = {
1800 };
1801 peerDependencies = [
1802 ];
1803 passthru.names = [ "iconv-lite" ];
1804 };
1805 by-spec."image-size"."~0.3.5" =
1806 self.by-version."image-size"."0.3.5";
1807 by-version."image-size"."0.3.5" = lib.makeOverridable self.buildNodePackage {
1808 name = "image-size-0.3.5";
1809 bin = true;
1810 src = [
1811 (fetchurl {
1812 url = "http://registry.npmjs.org/image-size/-/image-size-0.3.5.tgz";
1813 name = "image-size-0.3.5.tgz";
1814 sha1 = "83240eab2fb5b00b04aab8c74b0471e9cba7ad8c";
1815 })
1816 ];
1817 buildInputs =
1818 (self.nativeDeps."image-size" or []);
1819 deps = {
1820 };
1821 peerDependencies = [
1822 ];
1823 passthru.names = [ "image-size" ];
1824 };
1825 by-spec."inherits"."1" =
1826 self.by-version."inherits"."1.0.2";
1827 by-version."inherits"."1.0.2" = lib.makeOverridable self.buildNodePackage {
1828 name = "inherits-1.0.2";
1829 bin = false;
1830 src = [
1831 (fetchurl {
1832 url = "http://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
1833 name = "inherits-1.0.2.tgz";
1834 sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
1835 })
1836 ];
1837 buildInputs =
1838 (self.nativeDeps."inherits" or []);
1839 deps = {
1840 };
1841 peerDependencies = [
1842 ];
1843 passthru.names = [ "inherits" ];
1844 };
1845 by-spec."inherits"."2" =
1846 self.by-version."inherits"."2.0.1";
1847 by-version."inherits"."2.0.1" = lib.makeOverridable self.buildNodePackage {
1848 name = "inherits-2.0.1";
1849 bin = false;
1850 src = [
1851 (fetchurl {
1852 url = "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
1853 name = "inherits-2.0.1.tgz";
1854 sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
1855 })
1856 ];
1857 buildInputs =
1858 (self.nativeDeps."inherits" or []);
1859 deps = {
1860 };
1861 peerDependencies = [
1862 ];
1863 passthru.names = [ "inherits" ];
1864 };
1865 by-spec."inherits"."~2.0.1" =
1866 self.by-version."inherits"."2.0.1";
1867 by-spec."is-my-json-valid"."^2.12.4" =
1868 self.by-version."is-my-json-valid"."2.12.4";
1869 by-version."is-my-json-valid"."2.12.4" = lib.makeOverridable self.buildNodePackage {
1870 name = "is-my-json-valid-2.12.4";
1871 bin = false;
1872 src = [
1873 (fetchurl {
1874 url = "http://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.12.4.tgz";
1875 name = "is-my-json-valid-2.12.4.tgz";
1876 sha1 = "d4ed2bc1d7f88daf8d0f763b3e3e39a69bd37880";
1877 })
1878 ];
1879 buildInputs =
1880 (self.nativeDeps."is-my-json-valid" or []);
1881 deps = {
1882 "generate-function-2.0.0" = self.by-version."generate-function"."2.0.0";
1883 "generate-object-property-1.2.0" = self.by-version."generate-object-property"."1.2.0";
1884 "jsonpointer-2.0.0" = self.by-version."jsonpointer"."2.0.0";
1885 "xtend-4.0.1" = self.by-version."xtend"."4.0.1";
1886 };
1887 peerDependencies = [
1888 ];
1889 passthru.names = [ "is-my-json-valid" ];
1890 };
1891 by-spec."is-property"."^1.0.0" =
1892 self.by-version."is-property"."1.0.2";
1893 by-version."is-property"."1.0.2" = lib.makeOverridable self.buildNodePackage {
1894 name = "is-property-1.0.2";
1895 bin = false;
1896 src = [
1897 (fetchurl {
1898 url = "http://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz";
1899 name = "is-property-1.0.2.tgz";
1900 sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84";
1901 })
1902 ];
1903 buildInputs =
1904 (self.nativeDeps."is-property" or []);
1905 deps = {
1906 };
1907 peerDependencies = [
1908 ];
1909 passthru.names = [ "is-property" ];
1910 };
1911 by-spec."is-typedarray"."~1.0.0" =
1912 self.by-version."is-typedarray"."1.0.0";
1913 by-version."is-typedarray"."1.0.0" = lib.makeOverridable self.buildNodePackage {
1914 name = "is-typedarray-1.0.0";
1915 bin = false;
1916 src = [
1917 (fetchurl {
1918 url = "http://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
1919 name = "is-typedarray-1.0.0.tgz";
1920 sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
1921 })
1922 ];
1923 buildInputs =
1924 (self.nativeDeps."is-typedarray" or []);
1925 deps = {
1926 };
1927 peerDependencies = [
1928 ];
1929 passthru.names = [ "is-typedarray" ];
1930 };
1931 by-spec."isarray"."0.0.1" =
1932 self.by-version."isarray"."0.0.1";
1933 by-version."isarray"."0.0.1" = lib.makeOverridable self.buildNodePackage {
1934 name = "isarray-0.0.1";
1935 bin = false;
1936 src = [
1937 (fetchurl {
1938 url = "http://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
1939 name = "isarray-0.0.1.tgz";
1940 sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
1941 })
1942 ];
1943 buildInputs =
1944 (self.nativeDeps."isarray" or []);
1945 deps = {
1946 };
1947 peerDependencies = [
1948 ];
1949 passthru.names = [ "isarray" ];
1950 };
1951 by-spec."isstream"."~0.1.2" =
1952 self.by-version."isstream"."0.1.2";
1953 by-version."isstream"."0.1.2" = lib.makeOverridable self.buildNodePackage {
1954 name = "isstream-0.1.2";
1955 bin = false;
1956 src = [
1957 (fetchurl {
1958 url = "http://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
1959 name = "isstream-0.1.2.tgz";
1960 sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
1961 })
1962 ];
1963 buildInputs =
1964 (self.nativeDeps."isstream" or []);
1965 deps = {
1966 };
1967 peerDependencies = [
1968 ];
1969 passthru.names = [ "isstream" ];
1970 };
1971 by-spec."jodid25519".">=1.0.0 <2.0.0" =
1972 self.by-version."jodid25519"."1.0.2";
1973 by-version."jodid25519"."1.0.2" = lib.makeOverridable self.buildNodePackage {
1974 name = "jodid25519-1.0.2";
1975 bin = false;
1976 src = [
1977 (fetchurl {
1978 url = "http://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz";
1979 name = "jodid25519-1.0.2.tgz";
1980 sha1 = "06d4912255093419477d425633606e0e90782967";
1981 })
1982 ];
1983 buildInputs =
1984 (self.nativeDeps."jodid25519" or []);
1985 deps = {
1986 "jsbn-0.1.0" = self.by-version."jsbn"."0.1.0";
1987 };
1988 peerDependencies = [
1989 ];
1990 passthru.names = [ "jodid25519" ];
1991 };
1992 by-spec."js-yaml"."~2.0.5" =
1993 self.by-version."js-yaml"."2.0.5";
1994 by-version."js-yaml"."2.0.5" = lib.makeOverridable self.buildNodePackage {
1995 name = "js-yaml-2.0.5";
1996 bin = true;
1997 src = [
1998 (fetchurl {
1999 url = "http://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz";
2000 name = "js-yaml-2.0.5.tgz";
2001 sha1 = "a25ae6509999e97df278c6719da11bd0687743a8";
2002 })
2003 ];
2004 buildInputs =
2005 (self.nativeDeps."js-yaml" or []);
2006 deps = {
2007 "argparse-0.1.16" = self.by-version."argparse"."0.1.16";
2008 "esprima-1.0.4" = self.by-version."esprima"."1.0.4";
2009 };
2010 peerDependencies = [
2011 ];
2012 passthru.names = [ "js-yaml" ];
2013 };
2014 by-spec."jsbn".">=0.1.0 <0.2.0" =
2015 self.by-version."jsbn"."0.1.0";
2016 by-version."jsbn"."0.1.0" = lib.makeOverridable self.buildNodePackage {
2017 name = "jsbn-0.1.0";
2018 bin = false;
2019 src = [
2020 (fetchurl {
2021 url = "http://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz";
2022 name = "jsbn-0.1.0.tgz";
2023 sha1 = "650987da0dd74f4ebf5a11377a2aa2d273e97dfd";
2024 })
2025 ];
2026 buildInputs =
2027 (self.nativeDeps."jsbn" or []);
2028 deps = {
2029 };
2030 peerDependencies = [
2031 ];
2032 passthru.names = [ "jsbn" ];
2033 };
2034 by-spec."jsbn"."~0.1.0" =
2035 self.by-version."jsbn"."0.1.0";
2036 by-spec."jshint"."^2.9.1-rc3" =
2037 self.by-version."jshint"."2.9.1";
2038 by-version."jshint"."2.9.1" = lib.makeOverridable self.buildNodePackage {
2039 name = "jshint-2.9.1";
2040 bin = true;
2041 src = [
2042 (fetchurl {
2043 url = "http://registry.npmjs.org/jshint/-/jshint-2.9.1.tgz";
2044 name = "jshint-2.9.1.tgz";
2045 sha1 = "3136b68f8b6fa37423aacb8ec5e18a1ada7a2638";
2046 })
2047 ];
2048 buildInputs =
2049 (self.nativeDeps."jshint" or []);
2050 deps = {
2051 "cli-0.6.6" = self.by-version."cli"."0.6.6";
2052 "console-browserify-1.1.0" = self.by-version."console-browserify"."1.1.0";
2053 "exit-0.1.2" = self.by-version."exit"."0.1.2";
2054 "htmlparser2-3.8.3" = self.by-version."htmlparser2"."3.8.3";
2055 "minimatch-2.0.10" = self.by-version."minimatch"."2.0.10";
2056 "shelljs-0.3.0" = self.by-version."shelljs"."0.3.0";
2057 "strip-json-comments-1.0.4" = self.by-version."strip-json-comments"."1.0.4";
2058 "lodash-3.7.0" = self.by-version."lodash"."3.7.0";
2059 };
2060 peerDependencies = [
2061 ];
2062 passthru.names = [ "jshint" ];
2063 };
2064 "jshint" = self.by-version."jshint"."2.9.1";
2065 by-spec."jshint"."~2.9.1" =
2066 self.by-version."jshint"."2.9.1";
2067 by-spec."json-schema"."0.2.2" =
2068 self.by-version."json-schema"."0.2.2";
2069 by-version."json-schema"."0.2.2" = lib.makeOverridable self.buildNodePackage {
2070 name = "json-schema-0.2.2";
2071 bin = false;
2072 src = [
2073 (fetchurl {
2074 url = "http://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz";
2075 name = "json-schema-0.2.2.tgz";
2076 sha1 = "50354f19f603917c695f70b85afa77c3b0f23506";
2077 })
2078 ];
2079 buildInputs =
2080 (self.nativeDeps."json-schema" or []);
2081 deps = {
2082 };
2083 peerDependencies = [
2084 ];
2085 passthru.names = [ "json-schema" ];
2086 };
2087 by-spec."json-stringify-safe"."~5.0.1" =
2088 self.by-version."json-stringify-safe"."5.0.1";
2089 by-version."json-stringify-safe"."5.0.1" = lib.makeOverridable self.buildNodePackage {
2090 name = "json-stringify-safe-5.0.1";
2091 bin = false;
2092 src = [
2093 (fetchurl {
2094 url = "http://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
2095 name = "json-stringify-safe-5.0.1.tgz";
2096 sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
2097 })
2098 ];
2099 buildInputs =
2100 (self.nativeDeps."json-stringify-safe" or []);
2101 deps = {
2102 };
2103 peerDependencies = [
2104 ];
2105 passthru.names = [ "json-stringify-safe" ];
2106 };
2107 by-spec."jsonpointer"."2.0.0" =
2108 self.by-version."jsonpointer"."2.0.0";
2109 by-version."jsonpointer"."2.0.0" = lib.makeOverridable self.buildNodePackage {
2110 name = "jsonpointer-2.0.0";
2111 bin = false;
2112 src = [
2113 (fetchurl {
2114 url = "http://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz";
2115 name = "jsonpointer-2.0.0.tgz";
2116 sha1 = "3af1dd20fe85463910d469a385e33017d2a030d9";
2117 })
2118 ];
2119 buildInputs =
2120 (self.nativeDeps."jsonpointer" or []);
2121 deps = {
2122 };
2123 peerDependencies = [
2124 ];
2125 passthru.names = [ "jsonpointer" ];
2126 };
2127 by-spec."jsprim"."^1.2.2" =
2128 self.by-version."jsprim"."1.2.2";
2129 by-version."jsprim"."1.2.2" = lib.makeOverridable self.buildNodePackage {
2130 name = "jsprim-1.2.2";
2131 bin = false;
2132 src = [
2133 (fetchurl {
2134 url = "http://registry.npmjs.org/jsprim/-/jsprim-1.2.2.tgz";
2135 name = "jsprim-1.2.2.tgz";
2136 sha1 = "f20c906ac92abd58e3b79ac8bc70a48832512da1";
2137 })
2138 ];
2139 buildInputs =
2140 (self.nativeDeps."jsprim" or []);
2141 deps = {
2142 "extsprintf-1.0.2" = self.by-version."extsprintf"."1.0.2";
2143 "json-schema-0.2.2" = self.by-version."json-schema"."0.2.2";
2144 "verror-1.3.6" = self.by-version."verror"."1.3.6";
2145 };
2146 peerDependencies = [
2147 ];
2148 passthru.names = [ "jsprim" ];
2149 };
2150 by-spec."less"."~2.5.0" =
2151 self.by-version."less"."2.5.3";
2152 by-version."less"."2.5.3" = lib.makeOverridable self.buildNodePackage {
2153 name = "less-2.5.3";
2154 bin = true;
2155 src = [
2156 (fetchurl {
2157 url = "http://registry.npmjs.org/less/-/less-2.5.3.tgz";
2158 name = "less-2.5.3.tgz";
2159 sha1 = "9ff586e8a703515fc18dc99c7bc498d2f3ad4849";
2160 })
2161 ];
2162 buildInputs =
2163 (self.nativeDeps."less" or []);
2164 deps = {
2165 "errno-0.1.4" = self.by-version."errno"."0.1.4";
2166 "graceful-fs-3.0.8" = self.by-version."graceful-fs"."3.0.8";
2167 "image-size-0.3.5" = self.by-version."image-size"."0.3.5";
2168 "mime-1.3.4" = self.by-version."mime"."1.3.4";
2169 "mkdirp-0.5.1" = self.by-version."mkdirp"."0.5.1";
2170 "promise-6.1.0" = self.by-version."promise"."6.1.0";
2171 "request-2.67.0" = self.by-version."request"."2.67.0";
2172 "source-map-0.4.4" = self.by-version."source-map"."0.4.4";
2173 };
2174 peerDependencies = [
2175 ];
2176 passthru.names = [ "less" ];
2177 };
2178 by-spec."lodash"."3.7.x" =
2179 self.by-version."lodash"."3.7.0";
2180 by-version."lodash"."3.7.0" = lib.makeOverridable self.buildNodePackage {
2181 name = "lodash-3.7.0";
2182 bin = false;
2183 src = [
2184 (fetchurl {
2185 url = "http://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz";
2186 name = "lodash-3.7.0.tgz";
2187 sha1 = "3678bd8ab995057c07ade836ed2ef087da811d45";
2188 })
2189 ];
2190 buildInputs =
2191 (self.nativeDeps."lodash" or []);
2192 deps = {
2193 };
2194 peerDependencies = [
2195 ];
2196 passthru.names = [ "lodash" ];
2197 };
2198 by-spec."lodash"."^3.2.0" =
2199 self.by-version."lodash"."3.10.1";
2200 by-version."lodash"."3.10.1" = lib.makeOverridable self.buildNodePackage {
2201 name = "lodash-3.10.1";
2202 bin = false;
2203 src = [
2204 (fetchurl {
2205 url = "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz";
2206 name = "lodash-3.10.1.tgz";
2207 sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6";
2208 })
2209 ];
2210 buildInputs =
2211 (self.nativeDeps."lodash" or []);
2212 deps = {
2213 };
2214 peerDependencies = [
2215 ];
2216 passthru.names = [ "lodash" ];
2217 };
2218 by-spec."lodash"."~0.9.2" =
2219 self.by-version."lodash"."0.9.2";
2220 by-version."lodash"."0.9.2" = lib.makeOverridable self.buildNodePackage {
2221 name = "lodash-0.9.2";
2222 bin = false;
2223 src = [
2224 (fetchurl {
2225 url = "http://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz";
2226 name = "lodash-0.9.2.tgz";
2227 sha1 = "8f3499c5245d346d682e5b0d3b40767e09f1a92c";
2228 })
2229 ];
2230 buildInputs =
2231 (self.nativeDeps."lodash" or []);
2232 deps = {
2233 };
2234 peerDependencies = [
2235 ];
2236 passthru.names = [ "lodash" ];
2237 };
2238 by-spec."lodash"."~1.0.1" =
2239 self.by-version."lodash"."1.0.2";
2240 by-version."lodash"."1.0.2" = lib.makeOverridable self.buildNodePackage {
2241 name = "lodash-1.0.2";
2242 bin = false;
2243 src = [
2244 (fetchurl {
2245 url = "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
2246 name = "lodash-1.0.2.tgz";
2247 sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
2248 })
2249 ];
2250 buildInputs =
2251 (self.nativeDeps."lodash" or []);
2252 deps = {
2253 };
2254 peerDependencies = [
2255 ];
2256 passthru.names = [ "lodash" ];
2257 };
2258 by-spec."lodash"."~2.4.1" =
2259 self.by-version."lodash"."2.4.2";
2260 by-version."lodash"."2.4.2" = lib.makeOverridable self.buildNodePackage {
2261 name = "lodash-2.4.2";
2262 bin = false;
2263 src = [
2264 (fetchurl {
2265 url = "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
2266 name = "lodash-2.4.2.tgz";
2267 sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
2268 })
2269 ];
2270 buildInputs =
2271 (self.nativeDeps."lodash" or []);
2272 deps = {
2273 };
2274 peerDependencies = [
2275 ];
2276 passthru.names = [ "lodash" ];
2277 };
2278 by-spec."lru-cache"."2" =
2279 self.by-version."lru-cache"."2.7.3";
2280 by-version."lru-cache"."2.7.3" = lib.makeOverridable self.buildNodePackage {
2281 name = "lru-cache-2.7.3";
2282 bin = false;
2283 src = [
2284 (fetchurl {
2285 url = "http://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
2286 name = "lru-cache-2.7.3.tgz";
2287 sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
2288 })
2289 ];
2290 buildInputs =
2291 (self.nativeDeps."lru-cache" or []);
2292 deps = {
2293 };
2294 peerDependencies = [
2295 ];
2296 passthru.names = [ "lru-cache" ];
2297 };
2298 by-spec."mime"."^1.2.11" =
2299 self.by-version."mime"."1.3.4";
2300 by-version."mime"."1.3.4" = lib.makeOverridable self.buildNodePackage {
2301 name = "mime-1.3.4";
2302 bin = true;
2303 src = [
2304 (fetchurl {
2305 url = "http://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
2306 name = "mime-1.3.4.tgz";
2307 sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
2308 })
2309 ];
2310 buildInputs =
2311 (self.nativeDeps."mime" or []);
2312 deps = {
2313 };
2314 peerDependencies = [
2315 ];
2316 passthru.names = [ "mime" ];
2317 };
2318 by-spec."mime-db"."~1.21.0" =
2319 self.by-version."mime-db"."1.21.0";
2320 by-version."mime-db"."1.21.0" = lib.makeOverridable self.buildNodePackage {
2321 name = "mime-db-1.21.0";
2322 bin = false;
2323 src = [
2324 (fetchurl {
2325 url = "http://registry.npmjs.org/mime-db/-/mime-db-1.21.0.tgz";
2326 name = "mime-db-1.21.0.tgz";
2327 sha1 = "9b5239e3353cf6eb015a00d890261027c36d4bac";
2328 })
2329 ];
2330 buildInputs =
2331 (self.nativeDeps."mime-db" or []);
2332 deps = {
2333 };
2334 peerDependencies = [
2335 ];
2336 passthru.names = [ "mime-db" ];
2337 };
2338 by-spec."mime-types"."^2.1.3" =
2339 self.by-version."mime-types"."2.1.9";
2340 by-version."mime-types"."2.1.9" = lib.makeOverridable self.buildNodePackage {
2341 name = "mime-types-2.1.9";
2342 bin = false;
2343 src = [
2344 (fetchurl {
2345 url = "http://registry.npmjs.org/mime-types/-/mime-types-2.1.9.tgz";
2346 name = "mime-types-2.1.9.tgz";
2347 sha1 = "dfb396764b5fdf75be34b1f4104bc3687fb635f8";
2348 })
2349 ];
2350 buildInputs =
2351 (self.nativeDeps."mime-types" or []);
2352 deps = {
2353 "mime-db-1.21.0" = self.by-version."mime-db"."1.21.0";
2354 };
2355 peerDependencies = [
2356 ];
2357 passthru.names = [ "mime-types" ];
2358 };
2359 by-spec."mime-types"."~2.1.7" =
2360 self.by-version."mime-types"."2.1.9";
2361 by-spec."minimatch"."0.3" =
2362 self.by-version."minimatch"."0.3.0";
2363 by-version."minimatch"."0.3.0" = lib.makeOverridable self.buildNodePackage {
2364 name = "minimatch-0.3.0";
2365 bin = false;
2366 src = [
2367 (fetchurl {
2368 url = "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
2369 name = "minimatch-0.3.0.tgz";
2370 sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
2371 })
2372 ];
2373 buildInputs =
2374 (self.nativeDeps."minimatch" or []);
2375 deps = {
2376 "lru-cache-2.7.3" = self.by-version."lru-cache"."2.7.3";
2377 "sigmund-1.0.1" = self.by-version."sigmund"."1.0.1";
2378 };
2379 peerDependencies = [
2380 ];
2381 passthru.names = [ "minimatch" ];
2382 };
2383 by-spec."minimatch"."2.0.x" =
2384 self.by-version."minimatch"."2.0.10";
2385 by-version."minimatch"."2.0.10" = lib.makeOverridable self.buildNodePackage {
2386 name = "minimatch-2.0.10";
2387 bin = false;
2388 src = [
2389 (fetchurl {
2390 url = "http://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz";
2391 name = "minimatch-2.0.10.tgz";
2392 sha1 = "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7";
2393 })
2394 ];
2395 buildInputs =
2396 (self.nativeDeps."minimatch" or []);
2397 deps = {
2398 "brace-expansion-1.1.2" = self.by-version."brace-expansion"."1.1.2";
2399 };
2400 peerDependencies = [
2401 ];
2402 passthru.names = [ "minimatch" ];
2403 };
2404 by-spec."minimatch"."~0.2.11" =
2405 self.by-version."minimatch"."0.2.14";
2406 by-version."minimatch"."0.2.14" = lib.makeOverridable self.buildNodePackage {
2407 name = "minimatch-0.2.14";
2408 bin = false;
2409 src = [
2410 (fetchurl {
2411 url = "http://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
2412 name = "minimatch-0.2.14.tgz";
2413 sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
2414 })
2415 ];
2416 buildInputs =
2417 (self.nativeDeps."minimatch" or []);
2418 deps = {
2419 "lru-cache-2.7.3" = self.by-version."lru-cache"."2.7.3";
2420 "sigmund-1.0.1" = self.by-version."sigmund"."1.0.1";
2421 };
2422 peerDependencies = [
2423 ];
2424 passthru.names = [ "minimatch" ];
2425 };
2426 by-spec."minimatch"."~0.2.12" =
2427 self.by-version."minimatch"."0.2.14";
2428 by-spec."minimist"."0.0.8" =
2429 self.by-version."minimist"."0.0.8";
2430 by-version."minimist"."0.0.8" = lib.makeOverridable self.buildNodePackage {
2431 name = "minimist-0.0.8";
2432 bin = false;
2433 src = [
2434 (fetchurl {
2435 url = "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
2436 name = "minimist-0.0.8.tgz";
2437 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
2438 })
2439 ];
2440 buildInputs =
2441 (self.nativeDeps."minimist" or []);
2442 deps = {
2443 };
2444 peerDependencies = [
2445 ];
2446 passthru.names = [ "minimist" ];
2447 };
2448 by-spec."mkdirp"."^0.5.0" =
2449 self.by-version."mkdirp"."0.5.1";
2450 by-version."mkdirp"."0.5.1" = lib.makeOverridable self.buildNodePackage {
2451 name = "mkdirp-0.5.1";
2452 bin = true;
2453 src = [
2454 (fetchurl {
2455 url = "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
2456 name = "mkdirp-0.5.1.tgz";
2457 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
2458 })
2459 ];
2460 buildInputs =
2461 (self.nativeDeps."mkdirp" or []);
2462 deps = {
2463 "minimist-0.0.8" = self.by-version."minimist"."0.0.8";
2464 };
2465 peerDependencies = [
2466 ];
2467 passthru.names = [ "mkdirp" ];
2468 };
2469 by-spec."node-uuid"."~1.4.7" =
2470 self.by-version."node-uuid"."1.4.7";
2471 by-version."node-uuid"."1.4.7" = lib.makeOverridable self.buildNodePackage {
2472 name = "node-uuid-1.4.7";
2473 bin = true;
2474 src = [
2475 (fetchurl {
2476 url = "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz";
2477 name = "node-uuid-1.4.7.tgz";
2478 sha1 = "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f";
2479 })
2480 ];
2481 buildInputs =
2482 (self.nativeDeps."node-uuid" or []);
2483 deps = {
2484 };
2485 peerDependencies = [
2486 ];
2487 passthru.names = [ "node-uuid" ];
2488 };
2489 by-spec."nopt"."~1.0.10" =
2490 self.by-version."nopt"."1.0.10";
2491 by-version."nopt"."1.0.10" = lib.makeOverridable self.buildNodePackage {
2492 name = "nopt-1.0.10";
2493 bin = true;
2494 src = [
2495 (fetchurl {
2496 url = "http://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
2497 name = "nopt-1.0.10.tgz";
2498 sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee";
2499 })
2500 ];
2501 buildInputs =
2502 (self.nativeDeps."nopt" or []);
2503 deps = {
2504 "abbrev-1.0.7" = self.by-version."abbrev"."1.0.7";
2505 };
2506 peerDependencies = [
2507 ];
2508 passthru.names = [ "nopt" ];
2509 };
2510 by-spec."nopt"."~2.0.0" =
2511 self.by-version."nopt"."2.0.0";
2512 by-version."nopt"."2.0.0" = lib.makeOverridable self.buildNodePackage {
2513 name = "nopt-2.0.0";
2514 bin = true;
2515 src = [
2516 (fetchurl {
2517 url = "http://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz";
2518 name = "nopt-2.0.0.tgz";
2519 sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d";
2520 })
2521 ];
2522 buildInputs =
2523 (self.nativeDeps."nopt" or []);
2524 deps = {
2525 "abbrev-1.0.7" = self.by-version."abbrev"."1.0.7";
2526 };
2527 peerDependencies = [
2528 ];
2529 passthru.names = [ "nopt" ];
2530 };
2531 by-spec."noptify"."~0.0.3" =
2532 self.by-version."noptify"."0.0.3";
2533 by-version."noptify"."0.0.3" = lib.makeOverridable self.buildNodePackage {
2534 name = "noptify-0.0.3";
2535 bin = false;
2536 src = [
2537 (fetchurl {
2538 url = "http://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz";
2539 name = "noptify-0.0.3.tgz";
2540 sha1 = "58f654a73d9753df0c51d9686dc92104a67f4bbb";
2541 })
2542 ];
2543 buildInputs =
2544 (self.nativeDeps."noptify" or []);
2545 deps = {
2546 "nopt-2.0.0" = self.by-version."nopt"."2.0.0";
2547 };
2548 peerDependencies = [
2549 ];
2550 passthru.names = [ "noptify" ];
2551 };
2552 by-spec."oauth-sign"."~0.8.0" =
2553 self.by-version."oauth-sign"."0.8.0";
2554 by-version."oauth-sign"."0.8.0" = lib.makeOverridable self.buildNodePackage {
2555 name = "oauth-sign-0.8.0";
2556 bin = false;
2557 src = [
2558 (fetchurl {
2559 url = "http://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.0.tgz";
2560 name = "oauth-sign-0.8.0.tgz";
2561 sha1 = "938fdc875765ba527137d8aec9d178e24debc553";
2562 })
2563 ];
2564 buildInputs =
2565 (self.nativeDeps."oauth-sign" or []);
2566 deps = {
2567 };
2568 peerDependencies = [
2569 ];
2570 passthru.names = [ "oauth-sign" ];
2571 };
2572 by-spec."pinkie"."^2.0.0" =
2573 self.by-version."pinkie"."2.0.1";
2574 by-version."pinkie"."2.0.1" = lib.makeOverridable self.buildNodePackage {
2575 name = "pinkie-2.0.1";
2576 bin = false;
2577 src = [
2578 (fetchurl {
2579 url = "http://registry.npmjs.org/pinkie/-/pinkie-2.0.1.tgz";
2580 name = "pinkie-2.0.1.tgz";
2581 sha1 = "4236c86fc29f261c2045bbe81f78cbb2a5e8306c";
2582 })
2583 ];
2584 buildInputs =
2585 (self.nativeDeps."pinkie" or []);
2586 deps = {
2587 };
2588 peerDependencies = [
2589 ];
2590 passthru.names = [ "pinkie" ];
2591 };
2592 by-spec."pinkie-promise"."^2.0.0" =
2593 self.by-version."pinkie-promise"."2.0.0";
2594 by-version."pinkie-promise"."2.0.0" = lib.makeOverridable self.buildNodePackage {
2595 name = "pinkie-promise-2.0.0";
2596 bin = false;
2597 src = [
2598 (fetchurl {
2599 url = "http://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz";
2600 name = "pinkie-promise-2.0.0.tgz";
2601 sha1 = "4c83538de1f6e660c29e0a13446844f7a7e88259";
2602 })
2603 ];
2604 buildInputs =
2605 (self.nativeDeps."pinkie-promise" or []);
2606 deps = {
2607 "pinkie-2.0.1" = self.by-version."pinkie"."2.0.1";
2608 };
2609 peerDependencies = [
2610 ];
2611 passthru.names = [ "pinkie-promise" ];
2612 };
2613 by-spec."process-nextick-args"."~1.0.6" =
2614 self.by-version."process-nextick-args"."1.0.6";
2615 by-version."process-nextick-args"."1.0.6" = lib.makeOverridable self.buildNodePackage {
2616 name = "process-nextick-args-1.0.6";
2617 bin = false;
2618 src = [
2619 (fetchurl {
2620 url = "http://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.6.tgz";
2621 name = "process-nextick-args-1.0.6.tgz";
2622 sha1 = "0f96b001cea90b12592ce566edb97ec11e69bd05";
2623 })
2624 ];
2625 buildInputs =
2626 (self.nativeDeps."process-nextick-args" or []);
2627 deps = {
2628 };
2629 peerDependencies = [
2630 ];
2631 passthru.names = [ "process-nextick-args" ];
2632 };
2633 by-spec."promise"."^6.0.1" =
2634 self.by-version."promise"."6.1.0";
2635 by-version."promise"."6.1.0" = lib.makeOverridable self.buildNodePackage {
2636 name = "promise-6.1.0";
2637 bin = false;
2638 src = [
2639 (fetchurl {
2640 url = "http://registry.npmjs.org/promise/-/promise-6.1.0.tgz";
2641 name = "promise-6.1.0.tgz";
2642 sha1 = "2ce729f6b94b45c26891ad0602c5c90e04c6eef6";
2643 })
2644 ];
2645 buildInputs =
2646 (self.nativeDeps."promise" or []);
2647 deps = {
2648 "asap-1.0.0" = self.by-version."asap"."1.0.0";
2649 };
2650 peerDependencies = [
2651 ];
2652 passthru.names = [ "promise" ];
2653 };
2654 by-spec."prr"."~0.0.0" =
2655 self.by-version."prr"."0.0.0";
2656 by-version."prr"."0.0.0" = lib.makeOverridable self.buildNodePackage {
2657 name = "prr-0.0.0";
2658 bin = false;
2659 src = [
2660 (fetchurl {
2661 url = "http://registry.npmjs.org/prr/-/prr-0.0.0.tgz";
2662 name = "prr-0.0.0.tgz";
2663 sha1 = "1a84b85908325501411853d0081ee3fa86e2926a";
2664 })
2665 ];
2666 buildInputs =
2667 (self.nativeDeps."prr" or []);
2668 deps = {
2669 };
2670 peerDependencies = [
2671 ];
2672 passthru.names = [ "prr" ];
2673 };
2674 by-spec."qs"."~0.5.2" =
2675 self.by-version."qs"."0.5.6";
2676 by-version."qs"."0.5.6" = lib.makeOverridable self.buildNodePackage {
2677 name = "qs-0.5.6";
2678 bin = false;
2679 src = [
2680 (fetchurl {
2681 url = "http://registry.npmjs.org/qs/-/qs-0.5.6.tgz";
2682 name = "qs-0.5.6.tgz";
2683 sha1 = "31b1ad058567651c526921506b9a8793911a0384";
2684 })
2685 ];
2686 buildInputs =
2687 (self.nativeDeps."qs" or []);
2688 deps = {
2689 };
2690 peerDependencies = [
2691 ];
2692 passthru.names = [ "qs" ];
2693 };
2694 by-spec."qs"."~5.2.0" =
2695 self.by-version."qs"."5.2.0";
2696 by-version."qs"."5.2.0" = lib.makeOverridable self.buildNodePackage {
2697 name = "qs-5.2.0";
2698 bin = false;
2699 src = [
2700 (fetchurl {
2701 url = "http://registry.npmjs.org/qs/-/qs-5.2.0.tgz";
2702 name = "qs-5.2.0.tgz";
2703 sha1 = "a9f31142af468cb72b25b30136ba2456834916be";
2704 })
2705 ];
2706 buildInputs =
2707 (self.nativeDeps."qs" or []);
2708 deps = {
2709 };
2710 peerDependencies = [
2711 ];
2712 passthru.names = [ "qs" ];
2713 };
2714 by-spec."readable-stream"."1.1" =
2715 self.by-version."readable-stream"."1.1.13";
2716 by-version."readable-stream"."1.1.13" = lib.makeOverridable self.buildNodePackage {
2717 name = "readable-stream-1.1.13";
2718 bin = false;
2719 src = [
2720 (fetchurl {
2721 url = "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz";
2722 name = "readable-stream-1.1.13.tgz";
2723 sha1 = "f6eef764f514c89e2b9e23146a75ba106756d23e";
2724 })
2725 ];
2726 buildInputs =
2727 (self.nativeDeps."readable-stream" or []);
2728 deps = {
2729 "core-util-is-1.0.2" = self.by-version."core-util-is"."1.0.2";
2730 "isarray-0.0.1" = self.by-version."isarray"."0.0.1";
2731 "string_decoder-0.10.31" = self.by-version."string_decoder"."0.10.31";
2732 "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
2733 };
2734 peerDependencies = [
2735 ];
2736 passthru.names = [ "readable-stream" ];
2737 };
2738 by-spec."readable-stream"."~2.0.5" =
2739 self.by-version."readable-stream"."2.0.5";
2740 by-version."readable-stream"."2.0.5" = lib.makeOverridable self.buildNodePackage {
2741 name = "readable-stream-2.0.5";
2742 bin = false;
2743 src = [
2744 (fetchurl {
2745 url = "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz";
2746 name = "readable-stream-2.0.5.tgz";
2747 sha1 = "a2426f8dcd4551c77a33f96edf2886a23c829669";
2748 })
2749 ];
2750 buildInputs =
2751 (self.nativeDeps."readable-stream" or []);
2752 deps = {
2753 "core-util-is-1.0.2" = self.by-version."core-util-is"."1.0.2";
2754 "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
2755 "isarray-0.0.1" = self.by-version."isarray"."0.0.1";
2756 "process-nextick-args-1.0.6" = self.by-version."process-nextick-args"."1.0.6";
2757 "string_decoder-0.10.31" = self.by-version."string_decoder"."0.10.31";
2758 "util-deprecate-1.0.2" = self.by-version."util-deprecate"."1.0.2";
2759 };
2760 peerDependencies = [
2761 ];
2762 passthru.names = [ "readable-stream" ];
2763 };
2764 by-spec."request"."^2.51.0" =
2765 self.by-version."request"."2.67.0";
2766 by-version."request"."2.67.0" = lib.makeOverridable self.buildNodePackage {
2767 name = "request-2.67.0";
2768 bin = false;
2769 src = [
2770 (fetchurl {
2771 url = "http://registry.npmjs.org/request/-/request-2.67.0.tgz";
2772 name = "request-2.67.0.tgz";
2773 sha1 = "8af74780e2bf11ea0ae9aa965c11f11afd272742";
2774 })
2775 ];
2776 buildInputs =
2777 (self.nativeDeps."request" or []);
2778 deps = {
2779 "bl-1.0.1" = self.by-version."bl"."1.0.1";
2780 "caseless-0.11.0" = self.by-version."caseless"."0.11.0";
2781 "extend-3.0.0" = self.by-version."extend"."3.0.0";
2782 "forever-agent-0.6.1" = self.by-version."forever-agent"."0.6.1";
2783 "form-data-1.0.0-rc3" = self.by-version."form-data"."1.0.0-rc3";
2784 "json-stringify-safe-5.0.1" = self.by-version."json-stringify-safe"."5.0.1";
2785 "mime-types-2.1.9" = self.by-version."mime-types"."2.1.9";
2786 "node-uuid-1.4.7" = self.by-version."node-uuid"."1.4.7";
2787 "qs-5.2.0" = self.by-version."qs"."5.2.0";
2788 "tunnel-agent-0.4.2" = self.by-version."tunnel-agent"."0.4.2";
2789 "tough-cookie-2.2.1" = self.by-version."tough-cookie"."2.2.1";
2790 "http-signature-1.1.0" = self.by-version."http-signature"."1.1.0";
2791 "oauth-sign-0.8.0" = self.by-version."oauth-sign"."0.8.0";
2792 "hawk-3.1.3" = self.by-version."hawk"."3.1.3";
2793 "aws-sign2-0.6.0" = self.by-version."aws-sign2"."0.6.0";
2794 "stringstream-0.0.5" = self.by-version."stringstream"."0.0.5";
2795 "combined-stream-1.0.5" = self.by-version."combined-stream"."1.0.5";
2796 "isstream-0.1.2" = self.by-version."isstream"."0.1.2";
2797 "is-typedarray-1.0.0" = self.by-version."is-typedarray"."1.0.0";
2798 "har-validator-2.0.6" = self.by-version."har-validator"."2.0.6";
2799 };
2800 peerDependencies = [
2801 ];
2802 passthru.names = [ "request" ];
2803 };
2804 by-spec."rimraf"."~2.2.8" =
2805 self.by-version."rimraf"."2.2.8";
2806 by-version."rimraf"."2.2.8" = lib.makeOverridable self.buildNodePackage {
2807 name = "rimraf-2.2.8";
2808 bin = true;
2809 src = [
2810 (fetchurl {
2811 url = "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
2812 name = "rimraf-2.2.8.tgz";
2813 sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
2814 })
2815 ];
2816 buildInputs =
2817 (self.nativeDeps."rimraf" or []);
2818 deps = {
2819 };
2820 peerDependencies = [
2821 ];
2822 passthru.names = [ "rimraf" ];
2823 };
2824 by-spec."shelljs"."0.3.x" =
2825 self.by-version."shelljs"."0.3.0";
2826 by-version."shelljs"."0.3.0" = lib.makeOverridable self.buildNodePackage {
2827 name = "shelljs-0.3.0";
2828 bin = true;
2829 src = [
2830 (fetchurl {
2831 url = "http://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
2832 name = "shelljs-0.3.0.tgz";
2833 sha1 = "3596e6307a781544f591f37da618360f31db57b1";
2834 })
2835 ];
2836 buildInputs =
2837 (self.nativeDeps."shelljs" or []);
2838 deps = {
2839 };
2840 peerDependencies = [
2841 ];
2842 passthru.names = [ "shelljs" ];
2843 };
2844 by-spec."sigmund"."~1.0.0" =
2845 self.by-version."sigmund"."1.0.1";
2846 by-version."sigmund"."1.0.1" = lib.makeOverridable self.buildNodePackage {
2847 name = "sigmund-1.0.1";
2848 bin = false;
2849 src = [
2850 (fetchurl {
2851 url = "http://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
2852 name = "sigmund-1.0.1.tgz";
2853 sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
2854 })
2855 ];
2856 buildInputs =
2857 (self.nativeDeps."sigmund" or []);
2858 deps = {
2859 };
2860 peerDependencies = [
2861 ];
2862 passthru.names = [ "sigmund" ];
2863 };
2864 by-spec."sntp"."1.x.x" =
2865 self.by-version."sntp"."1.0.9";
2866 by-version."sntp"."1.0.9" = lib.makeOverridable self.buildNodePackage {
2867 name = "sntp-1.0.9";
2868 bin = false;
2869 src = [
2870 (fetchurl {
2871 url = "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz";
2872 name = "sntp-1.0.9.tgz";
2873 sha1 = "6541184cc90aeea6c6e7b35e2659082443c66198";
2874 })
2875 ];
2876 buildInputs =
2877 (self.nativeDeps."sntp" or []);
2878 deps = {
2879 "hoek-2.16.3" = self.by-version."hoek"."2.16.3";
2880 };
2881 peerDependencies = [
2882 ];
2883 passthru.names = [ "sntp" ];
2884 };
2885 by-spec."source-map"."^0.3.0" =
2886 self.by-version."source-map"."0.3.0";
2887 by-version."source-map"."0.3.0" = lib.makeOverridable self.buildNodePackage {
2888 name = "source-map-0.3.0";
2889 bin = false;
2890 src = [
2891 (fetchurl {
2892 url = "http://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz";
2893 name = "source-map-0.3.0.tgz";
2894 sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9";
2895 })
2896 ];
2897 buildInputs =
2898 (self.nativeDeps."source-map" or []);
2899 deps = {
2900 "amdefine-1.0.0" = self.by-version."amdefine"."1.0.0";
2901 };
2902 peerDependencies = [
2903 ];
2904 passthru.names = [ "source-map" ];
2905 };
2906 by-spec."source-map"."^0.4.2" =
2907 self.by-version."source-map"."0.4.4";
2908 by-version."source-map"."0.4.4" = lib.makeOverridable self.buildNodePackage {
2909 name = "source-map-0.4.4";
2910 bin = false;
2911 src = [
2912 (fetchurl {
2913 url = "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz";
2914 name = "source-map-0.4.4.tgz";
2915 sha1 = "eba4f5da9c0dc999de68032d8b4f76173652036b";
2916 })
2917 ];
2918 buildInputs =
2919 (self.nativeDeps."source-map" or []);
2920 deps = {
2921 "amdefine-1.0.0" = self.by-version."amdefine"."1.0.0";
2922 };
2923 peerDependencies = [
2924 ];
2925 passthru.names = [ "source-map" ];
2926 };
2927 by-spec."sshpk"."^1.7.0" =
2928 self.by-version."sshpk"."1.7.3";
2929 by-version."sshpk"."1.7.3" = lib.makeOverridable self.buildNodePackage {
2930 name = "sshpk-1.7.3";
2931 bin = true;
2932 src = [
2933 (fetchurl {
2934 url = "http://registry.npmjs.org/sshpk/-/sshpk-1.7.3.tgz";
2935 name = "sshpk-1.7.3.tgz";
2936 sha1 = "caa8ef95e30765d856698b7025f9f211ab65962f";
2937 })
2938 ];
2939 buildInputs =
2940 (self.nativeDeps."sshpk" or []);
2941 deps = {
2942 "asn1-0.2.3" = self.by-version."asn1"."0.2.3";
2943 "assert-plus-0.2.0" = self.by-version."assert-plus"."0.2.0";
2944 "dashdash-1.12.2" = self.by-version."dashdash"."1.12.2";
2945 "jsbn-0.1.0" = self.by-version."jsbn"."0.1.0";
2946 "tweetnacl-0.13.3" = self.by-version."tweetnacl"."0.13.3";
2947 "jodid25519-1.0.2" = self.by-version."jodid25519"."1.0.2";
2948 "ecc-jsbn-0.1.1" = self.by-version."ecc-jsbn"."0.1.1";
2949 };
2950 peerDependencies = [
2951 ];
2952 passthru.names = [ "sshpk" ];
2953 };
2954 by-spec."string_decoder"."~0.10.x" =
2955 self.by-version."string_decoder"."0.10.31";
2956 by-version."string_decoder"."0.10.31" = lib.makeOverridable self.buildNodePackage {
2957 name = "string_decoder-0.10.31";
2958 bin = false;
2959 src = [
2960 (fetchurl {
2961 url = "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
2962 name = "string_decoder-0.10.31.tgz";
2963 sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
2964 })
2965 ];
2966 buildInputs =
2967 (self.nativeDeps."string_decoder" or []);
2968 deps = {
2969 };
2970 peerDependencies = [
2971 ];
2972 passthru.names = [ "string_decoder" ];
2973 };
2974 by-spec."stringstream"."~0.0.4" =
2975 self.by-version."stringstream"."0.0.5";
2976 by-version."stringstream"."0.0.5" = lib.makeOverridable self.buildNodePackage {
2977 name = "stringstream-0.0.5";
2978 bin = false;
2979 src = [
2980 (fetchurl {
2981 url = "http://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz";
2982 name = "stringstream-0.0.5.tgz";
2983 sha1 = "4e484cd4de5a0bbbee18e46307710a8a81621878";
2984 })
2985 ];
2986 buildInputs =
2987 (self.nativeDeps."stringstream" or []);
2988 deps = {
2989 };
2990 peerDependencies = [
2991 ];
2992 passthru.names = [ "stringstream" ];
2993 };
2994 by-spec."strip-ansi"."^0.3.0" =
2995 self.by-version."strip-ansi"."0.3.0";
2996 by-version."strip-ansi"."0.3.0" = lib.makeOverridable self.buildNodePackage {
2997 name = "strip-ansi-0.3.0";
2998 bin = true;
2999 src = [
3000 (fetchurl {
3001 url = "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
3002 name = "strip-ansi-0.3.0.tgz";
3003 sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
3004 })
3005 ];
3006 buildInputs =
3007 (self.nativeDeps."strip-ansi" or []);
3008 deps = {
3009 "ansi-regex-0.2.1" = self.by-version."ansi-regex"."0.2.1";
3010 };
3011 peerDependencies = [
3012 ];
3013 passthru.names = [ "strip-ansi" ];
3014 };
3015 by-spec."strip-ansi"."^3.0.0" =
3016 self.by-version."strip-ansi"."3.0.0";
3017 by-version."strip-ansi"."3.0.0" = lib.makeOverridable self.buildNodePackage {
3018 name = "strip-ansi-3.0.0";
3019 bin = false;
3020 src = [
3021 (fetchurl {
3022 url = "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz";
3023 name = "strip-ansi-3.0.0.tgz";
3024 sha1 = "7510b665567ca914ccb5d7e072763ac968be3724";
3025 })
3026 ];
3027 buildInputs =
3028 (self.nativeDeps."strip-ansi" or []);
3029 deps = {
3030 "ansi-regex-2.0.0" = self.by-version."ansi-regex"."2.0.0";
3031 };
3032 peerDependencies = [
3033 ];
3034 passthru.names = [ "strip-ansi" ];
3035 };
3036 by-spec."strip-json-comments"."1.0.x" =
3037 self.by-version."strip-json-comments"."1.0.4";
3038 by-version."strip-json-comments"."1.0.4" = lib.makeOverridable self.buildNodePackage {
3039 name = "strip-json-comments-1.0.4";
3040 bin = true;
3041 src = [
3042 (fetchurl {
3043 url = "http://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
3044 name = "strip-json-comments-1.0.4.tgz";
3045 sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
3046 })
3047 ];
3048 buildInputs =
3049 (self.nativeDeps."strip-json-comments" or []);
3050 deps = {
3051 };
3052 peerDependencies = [
3053 ];
3054 passthru.names = [ "strip-json-comments" ];
3055 };
3056 by-spec."supports-color"."^0.2.0" =
3057 self.by-version."supports-color"."0.2.0";
3058 by-version."supports-color"."0.2.0" = lib.makeOverridable self.buildNodePackage {
3059 name = "supports-color-0.2.0";
3060 bin = true;
3061 src = [
3062 (fetchurl {
3063 url = "http://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
3064 name = "supports-color-0.2.0.tgz";
3065 sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
3066 })
3067 ];
3068 buildInputs =
3069 (self.nativeDeps."supports-color" or []);
3070 deps = {
3071 };
3072 peerDependencies = [
3073 ];
3074 passthru.names = [ "supports-color" ];
3075 };
3076 by-spec."supports-color"."^2.0.0" =
3077 self.by-version."supports-color"."2.0.0";
3078 by-version."supports-color"."2.0.0" = lib.makeOverridable self.buildNodePackage {
3079 name = "supports-color-2.0.0";
3080 bin = false;
3081 src = [
3082 (fetchurl {
3083 url = "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
3084 name = "supports-color-2.0.0.tgz";
3085 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
3086 })
3087 ];
3088 buildInputs =
3089 (self.nativeDeps."supports-color" or []);
3090 deps = {
3091 };
3092 peerDependencies = [
3093 ];
3094 passthru.names = [ "supports-color" ];
3095 };
3096 by-spec."tiny-lr-fork"."0.0.5" =
3097 self.by-version."tiny-lr-fork"."0.0.5";
3098 by-version."tiny-lr-fork"."0.0.5" = lib.makeOverridable self.buildNodePackage {
3099 name = "tiny-lr-fork-0.0.5";
3100 bin = true;
3101 src = [
3102 (fetchurl {
3103 url = "http://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz";
3104 name = "tiny-lr-fork-0.0.5.tgz";
3105 sha1 = "1e99e1e2a8469b736ab97d97eefa98c71f76ed0a";
3106 })
3107 ];
3108 buildInputs =
3109 (self.nativeDeps."tiny-lr-fork" or []);
3110 deps = {
3111 "qs-0.5.6" = self.by-version."qs"."0.5.6";
3112 "faye-websocket-0.4.4" = self.by-version."faye-websocket"."0.4.4";
3113 "noptify-0.0.3" = self.by-version."noptify"."0.0.3";
3114 "debug-0.7.4" = self.by-version."debug"."0.7.4";
3115 };
3116 peerDependencies = [
3117 ];
3118 passthru.names = [ "tiny-lr-fork" ];
3119 };
3120 by-spec."tough-cookie"."~2.2.0" =
3121 self.by-version."tough-cookie"."2.2.1";
3122 by-version."tough-cookie"."2.2.1" = lib.makeOverridable self.buildNodePackage {
3123 name = "tough-cookie-2.2.1";
3124 bin = false;
3125 src = [
3126 (fetchurl {
3127 url = "http://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.1.tgz";
3128 name = "tough-cookie-2.2.1.tgz";
3129 sha1 = "3b0516b799e70e8164436a1446e7e5877fda118e";
3130 })
3131 ];
3132 buildInputs =
3133 (self.nativeDeps."tough-cookie" or []);
3134 deps = {
3135 };
3136 peerDependencies = [
3137 ];
3138 passthru.names = [ "tough-cookie" ];
3139 };
3140 by-spec."tunnel-agent"."~0.4.1" =
3141 self.by-version."tunnel-agent"."0.4.2";
3142 by-version."tunnel-agent"."0.4.2" = lib.makeOverridable self.buildNodePackage {
3143 name = "tunnel-agent-0.4.2";
3144 bin = false;
3145 src = [
3146 (fetchurl {
3147 url = "http://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.2.tgz";
3148 name = "tunnel-agent-0.4.2.tgz";
3149 sha1 = "1104e3f36ac87125c287270067d582d18133bfee";
3150 })
3151 ];
3152 buildInputs =
3153 (self.nativeDeps."tunnel-agent" or []);
3154 deps = {
3155 };
3156 peerDependencies = [
3157 ];
3158 passthru.names = [ "tunnel-agent" ];
3159 };
3160 by-spec."tweetnacl".">=0.13.0 <1.0.0" =
3161 self.by-version."tweetnacl"."0.13.3";
3162 by-version."tweetnacl"."0.13.3" = lib.makeOverridable self.buildNodePackage {
3163 name = "tweetnacl-0.13.3";
3164 bin = false;
3165 src = [
3166 (fetchurl {
3167 url = "http://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.3.tgz";
3168 name = "tweetnacl-0.13.3.tgz";
3169 sha1 = "d628b56f3bcc3d5ae74ba9d4c1a704def5ab4b56";
3170 })
3171 ];
3172 buildInputs =
3173 (self.nativeDeps."tweetnacl" or []);
3174 deps = {
3175 };
3176 peerDependencies = [
3177 ];
3178 passthru.names = [ "tweetnacl" ];
3179 };
3180 by-spec."underscore"."~1.7.0" =
3181 self.by-version."underscore"."1.7.0";
3182 by-version."underscore"."1.7.0" = lib.makeOverridable self.buildNodePackage {
3183 name = "underscore-1.7.0";
3184 bin = false;
3185 src = [
3186 (fetchurl {
3187 url = "http://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
3188 name = "underscore-1.7.0.tgz";
3189 sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
3190 })
3191 ];
3192 buildInputs =
3193 (self.nativeDeps."underscore" or []);
3194 deps = {
3195 };
3196 peerDependencies = [
3197 ];
3198 passthru.names = [ "underscore" ];
3199 };
3200 by-spec."underscore.string"."~2.2.1" =
3201 self.by-version."underscore.string"."2.2.1";
3202 by-version."underscore.string"."2.2.1" = lib.makeOverridable self.buildNodePackage {
3203 name = "underscore.string-2.2.1";
3204 bin = false;
3205 src = [
3206 (fetchurl {
3207 url = "http://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz";
3208 name = "underscore.string-2.2.1.tgz";
3209 sha1 = "d7c0fa2af5d5a1a67f4253daee98132e733f0f19";
3210 })
3211 ];
3212 buildInputs =
3213 (self.nativeDeps."underscore.string" or []);
3214 deps = {
3215 };
3216 peerDependencies = [
3217 ];
3218 passthru.names = [ "underscore.string" ];
3219 };
3220 by-spec."underscore.string"."~2.3.3" =
3221 self.by-version."underscore.string"."2.3.3";
3222 by-version."underscore.string"."2.3.3" = lib.makeOverridable self.buildNodePackage {
3223 name = "underscore.string-2.3.3";
3224 bin = false;
3225 src = [
3226 (fetchurl {
3227 url = "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz";
3228 name = "underscore.string-2.3.3.tgz";
3229 sha1 = "71c08bf6b428b1133f37e78fa3a21c82f7329b0d";
3230 })
3231 ];
3232 buildInputs =
3233 (self.nativeDeps."underscore.string" or []);
3234 deps = {
3235 };
3236 peerDependencies = [
3237 ];
3238 passthru.names = [ "underscore.string" ];
3239 };
3240 by-spec."underscore.string"."~2.4.0" =
3241 self.by-version."underscore.string"."2.4.0";
3242 by-version."underscore.string"."2.4.0" = lib.makeOverridable self.buildNodePackage {
3243 name = "underscore.string-2.4.0";
3244 bin = false;
3245 src = [
3246 (fetchurl {
3247 url = "http://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
3248 name = "underscore.string-2.4.0.tgz";
3249 sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
3250 })
3251 ];
3252 buildInputs =
3253 (self.nativeDeps."underscore.string" or []);
3254 deps = {
3255 };
3256 peerDependencies = [
3257 ];
3258 passthru.names = [ "underscore.string" ];
3259 };
3260 by-spec."util-deprecate"."~1.0.1" =
3261 self.by-version."util-deprecate"."1.0.2";
3262 by-version."util-deprecate"."1.0.2" = lib.makeOverridable self.buildNodePackage {
3263 name = "util-deprecate-1.0.2";
3264 bin = false;
3265 src = [
3266 (fetchurl {
3267 url = "http://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
3268 name = "util-deprecate-1.0.2.tgz";
3269 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
3270 })
3271 ];
3272 buildInputs =
3273 (self.nativeDeps."util-deprecate" or []);
3274 deps = {
3275 };
3276 peerDependencies = [
3277 ];
3278 passthru.names = [ "util-deprecate" ];
3279 };
3280 by-spec."verror"."1.3.6" =
3281 self.by-version."verror"."1.3.6";
3282 by-version."verror"."1.3.6" = lib.makeOverridable self.buildNodePackage {
3283 name = "verror-1.3.6";
3284 bin = false;
3285 src = [
3286 (fetchurl {
3287 url = "http://registry.npmjs.org/verror/-/verror-1.3.6.tgz";
3288 name = "verror-1.3.6.tgz";
3289 sha1 = "cff5df12946d297d2baaefaa2689e25be01c005c";
3290 })
3291 ];
3292 buildInputs =
3293 (self.nativeDeps."verror" or []);
3294 deps = {
3295 "extsprintf-1.0.2" = self.by-version."extsprintf"."1.0.2";
3296 };
3297 peerDependencies = [
3298 ];
3299 passthru.names = [ "verror" ];
3300 };
3301 by-spec."which"."~1.0.5" =
3302 self.by-version."which"."1.0.9";
3303 by-version."which"."1.0.9" = lib.makeOverridable self.buildNodePackage {
3304 name = "which-1.0.9";
3305 bin = true;
3306 src = [
3307 (fetchurl {
3308 url = "http://registry.npmjs.org/which/-/which-1.0.9.tgz";
3309 name = "which-1.0.9.tgz";
3310 sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
3311 })
3312 ];
3313 buildInputs =
3314 (self.nativeDeps."which" or []);
3315 deps = {
3316 };
3317 peerDependencies = [
3318 ];
3319 passthru.names = [ "which" ];
3320 };
3321 by-spec."xtend"."^4.0.0" =
3322 self.by-version."xtend"."4.0.1";
3323 by-version."xtend"."4.0.1" = lib.makeOverridable self.buildNodePackage {
3324 name = "xtend-4.0.1";
3325 bin = false;
3326 src = [
3327 (fetchurl {
3328 url = "http://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz";
3329 name = "xtend-4.0.1.tgz";
3330 sha1 = "a5c6d532be656e23db820efb943a1f04998d63af";
3331 })
3332 ];
3333 buildInputs =
3334 (self.nativeDeps."xtend" or []);
3335 deps = {
3336 };
3337 peerDependencies = [
3338 ];
3339 passthru.names = [ "xtend" ];
3340 };
3341 }
@@ -1,281 +1,295 b''
1 # Overrides for the generated python-packages.nix
1 # Overrides for the generated python-packages.nix
2 #
2 #
3 # This function is intended to be used as an extension to the generated file
3 # This function is intended to be used as an extension to the generated file
4 # python-packages.nix. The main objective is to add needed dependencies of C
4 # python-packages.nix. The main objective is to add needed dependencies of C
5 # libraries and tweak the build instructions where needed.
5 # libraries and tweak the build instructions where needed.
6
6
7 { pkgs, basePythonPackages }:
7 { pkgs, basePythonPackages }:
8
8
9 let
9 let
10 sed = "sed -i";
10 sed = "sed -i";
11 localLicenses = {
11 localLicenses = {
12 repoze = {
12 repoze = {
13 fullName = "Repoze License";
13 fullName = "Repoze License";
14 url = http://www.repoze.org/LICENSE.txt;
14 url = http://www.repoze.org/LICENSE.txt;
15 };
15 };
16 };
16 };
17
18 # johbo: Interim bridge which allows us to build with the upcoming
19 # nixos.16.09 branch (unstable at the moment of writing this note) and the
20 # current stable nixos-16.03.
21 backwardsCompatibleFetchgit = { ... }@args:
22 let
23 origSources = pkgs.fetchgit args;
24 in
25 pkgs.lib.overrideDerivation origSources (oldAttrs: {
26 NIX_PREFETCH_GIT_CHECKOUT_HOOK = ''
27 find $out -name '.git*' -print0 | xargs -0 rm -rf
28 '';
29 });
30
17 in
31 in
18
32
19 self: super: {
33 self: super: {
20
34
21 appenlight-client = super.appenlight-client.override (attrs: {
35 appenlight-client = super.appenlight-client.override (attrs: {
22 meta = {
36 meta = {
23 license = [ pkgs.lib.licenses.bsdOriginal ];
37 license = [ pkgs.lib.licenses.bsdOriginal ];
24 };
38 };
25 });
39 });
26
40
27 future = super.future.override (attrs: {
41 future = super.future.override (attrs: {
28 meta = {
42 meta = {
29 license = [ pkgs.lib.licenses.mit ];
43 license = [ pkgs.lib.licenses.mit ];
30 };
44 };
31 });
45 });
32
46
33 gnureadline = super.gnureadline.override (attrs: {
47 gnureadline = super.gnureadline.override (attrs: {
34 buildInputs = attrs.buildInputs ++ [
48 buildInputs = attrs.buildInputs ++ [
35 pkgs.ncurses
49 pkgs.ncurses
36 ];
50 ];
37 patchPhase = ''
51 patchPhase = ''
38 substituteInPlace setup.py --replace "/bin/bash" "${pkgs.bash}/bin/bash"
52 substituteInPlace setup.py --replace "/bin/bash" "${pkgs.bash}/bin/bash"
39 '';
53 '';
40 });
54 });
41
55
42 gunicorn = super.gunicorn.override (attrs: {
56 gunicorn = super.gunicorn.override (attrs: {
43 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
57 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
44 # johbo: futures is needed as long as we are on Python 2, otherwise
58 # johbo: futures is needed as long as we are on Python 2, otherwise
45 # gunicorn explodes if used with multiple threads per worker.
59 # gunicorn explodes if used with multiple threads per worker.
46 self.futures
60 self.futures
47 ];
61 ];
48 });
62 });
49
63
50 ipython = super.ipython.override (attrs: {
64 ipython = super.ipython.override (attrs: {
51 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
65 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
52 self.gnureadline
66 self.gnureadline
53 ];
67 ];
54 });
68 });
55
69
56 kombu = super.kombu.override (attrs: {
70 kombu = super.kombu.override (attrs: {
57 # The current version of kombu needs some patching to work with the
71 # The current version of kombu needs some patching to work with the
58 # other libs. Should be removed once we update celery and kombu.
72 # other libs. Should be removed once we update celery and kombu.
59 patches = [
73 patches = [
60 ./patch-kombu-py-2-7-11.diff
74 ./patch-kombu-py-2-7-11.diff
61 ./patch-kombu-msgpack.diff
75 ./patch-kombu-msgpack.diff
62 ];
76 ];
63 });
77 });
64
78
65 lxml = super.lxml.override (attrs: {
79 lxml = super.lxml.override (attrs: {
66 buildInputs = with self; [
80 buildInputs = with self; [
67 pkgs.libxml2
81 pkgs.libxml2
68 pkgs.libxslt
82 pkgs.libxslt
69 ];
83 ];
70 });
84 });
71
85
72 MySQL-python = super.MySQL-python.override (attrs: {
86 MySQL-python = super.MySQL-python.override (attrs: {
73 buildInputs = attrs.buildInputs ++ [
87 buildInputs = attrs.buildInputs ++ [
74 pkgs.openssl
88 pkgs.openssl
75 ];
89 ];
76 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
90 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
77 pkgs.mysql.lib
91 pkgs.mysql.lib
78 pkgs.zlib
92 pkgs.zlib
79 ];
93 ];
80 });
94 });
81
95
82 psutil = super.psutil.override (attrs: {
96 psutil = super.psutil.override (attrs: {
83 buildInputs = attrs.buildInputs ++
97 buildInputs = attrs.buildInputs ++
84 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.IOKit;
98 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.IOKit;
85 });
99 });
86
100
87 psycopg2 = super.psycopg2.override (attrs: {
101 psycopg2 = super.psycopg2.override (attrs: {
88 buildInputs = attrs.buildInputs ++
102 buildInputs = attrs.buildInputs ++
89 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.openssl;
103 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.openssl;
90 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
104 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
91 pkgs.postgresql
105 pkgs.postgresql
92 ];
106 ];
93 meta = {
107 meta = {
94 license = pkgs.lib.licenses.lgpl3Plus;
108 license = pkgs.lib.licenses.lgpl3Plus;
95 };
109 };
96 });
110 });
97
111
98 py-gfm = super.py-gfm.override {
112 py-gfm = super.py-gfm.override {
99 src = pkgs.fetchgit {
113 src = backwardsCompatibleFetchgit {
100 url = "https://code.rhodecode.com/upstream/py-gfm";
114 url = "https://code.rhodecode.com/upstream/py-gfm";
101 rev = "0d66a19bc16e3d49de273c0f797d4e4781e8c0f2";
115 rev = "0d66a19bc16e3d49de273c0f797d4e4781e8c0f2";
102 sha256 = "0ryp74jyihd3ckszq31bml5jr3bciimhfp7va7kw6ld92930ksv3";
116 sha256 = "0ryp74jyihd3ckszq31bml5jr3bciimhfp7va7kw6ld92930ksv3";
103 };
117 };
104 };
118 };
105
119
106 pycurl = super.pycurl.override (attrs: {
120 pycurl = super.pycurl.override (attrs: {
107 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
121 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
108 pkgs.curl
122 pkgs.curl
109 pkgs.openssl
123 pkgs.openssl
110 ];
124 ];
111 preConfigure = ''
125 preConfigure = ''
112 substituteInPlace setup.py --replace '--static-libs' '--libs'
126 substituteInPlace setup.py --replace '--static-libs' '--libs'
113 export PYCURL_SSL_LIBRARY=openssl
127 export PYCURL_SSL_LIBRARY=openssl
114 '';
128 '';
115 meta = {
129 meta = {
116 # TODO: It is LGPL and MIT
130 # TODO: It is LGPL and MIT
117 license = pkgs.lib.licenses.mit;
131 license = pkgs.lib.licenses.mit;
118 };
132 };
119 });
133 });
120
134
121 Pylons = super.Pylons.override (attrs: {
135 Pylons = super.Pylons.override (attrs: {
122 name = "Pylons-1.0.1-patch1";
136 name = "Pylons-1.0.1-patch1";
123 src = pkgs.fetchgit {
137 src = backwardsCompatibleFetchgit {
124 url = "https://code.rhodecode.com/upstream/pylons";
138 url = "https://code.rhodecode.com/upstream/pylons";
125 rev = "707354ee4261b9c10450404fc9852ccea4fd667d";
139 rev = "707354ee4261b9c10450404fc9852ccea4fd667d";
126 sha256 = "b2763274c2780523a335f83a1df65be22ebe4ff413a7bc9e9288d23c1f62032e";
140 sha256 = "b2763274c2780523a335f83a1df65be22ebe4ff413a7bc9e9288d23c1f62032e";
127 };
141 };
128 });
142 });
129
143
130 pyramid = super.pyramid.override (attrs: {
144 pyramid = super.pyramid.override (attrs: {
131 postFixup = ''
145 postFixup = ''
132 wrapPythonPrograms
146 wrapPythonPrograms
133 # TODO: johbo: "wrapPython" adds this magic line which
147 # TODO: johbo: "wrapPython" adds this magic line which
134 # confuses pserve.
148 # confuses pserve.
135 ${sed} '/import sys; sys.argv/d' $out/bin/.pserve-wrapped
149 ${sed} '/import sys; sys.argv/d' $out/bin/.pserve-wrapped
136 '';
150 '';
137 meta = {
151 meta = {
138 license = localLicenses.repoze;
152 license = localLicenses.repoze;
139 };
153 };
140 });
154 });
141
155
142 pyramid-debugtoolbar = super.pyramid-debugtoolbar.override (attrs: {
156 pyramid-debugtoolbar = super.pyramid-debugtoolbar.override (attrs: {
143 meta = {
157 meta = {
144 license = [ pkgs.lib.licenses.bsdOriginal localLicenses.repoze ];
158 license = [ pkgs.lib.licenses.bsdOriginal localLicenses.repoze ];
145 };
159 };
146 });
160 });
147
161
148 Pyro4 = super.Pyro4.override (attrs: {
162 Pyro4 = super.Pyro4.override (attrs: {
149 # TODO: Was not able to generate this version, needs further
163 # TODO: Was not able to generate this version, needs further
150 # investigation.
164 # investigation.
151 name = "Pyro4-4.35";
165 name = "Pyro4-4.35";
152 src = pkgs.fetchurl {
166 src = pkgs.fetchurl {
153 url = "https://pypi.python.org/packages/source/P/Pyro4/Pyro4-4.35.src.tar.gz";
167 url = "https://pypi.python.org/packages/source/P/Pyro4/Pyro4-4.35.src.tar.gz";
154 md5 = "cbe6cb855f086a0f092ca075005855f3";
168 md5 = "cbe6cb855f086a0f092ca075005855f3";
155 };
169 };
156 });
170 });
157
171
158 pysqlite = super.pysqlite.override (attrs: {
172 pysqlite = super.pysqlite.override (attrs: {
159 propagatedBuildInputs = [
173 propagatedBuildInputs = [
160 pkgs.sqlite
174 pkgs.sqlite
161 ];
175 ];
162 meta = {
176 meta = {
163 license = [ pkgs.lib.licenses.zlib pkgs.lib.licenses.libpng ];
177 license = [ pkgs.lib.licenses.zlib pkgs.lib.licenses.libpng ];
164 };
178 };
165 });
179 });
166
180
167 pytest-runner = super.pytest-runner.override (attrs: {
181 pytest-runner = super.pytest-runner.override (attrs: {
168 propagatedBuildInputs = [
182 propagatedBuildInputs = [
169 self.setuptools-scm
183 self.setuptools-scm
170 ];
184 ];
171 });
185 });
172
186
173 python-ldap = super.python-ldap.override (attrs: {
187 python-ldap = super.python-ldap.override (attrs: {
174 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
188 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
175 pkgs.cyrus_sasl
189 pkgs.cyrus_sasl
176 pkgs.openldap
190 pkgs.openldap
177 pkgs.openssl
191 pkgs.openssl
178 ];
192 ];
179 NIX_CFLAGS_COMPILE = "-I${pkgs.cyrus_sasl}/include/sasl";
193 NIX_CFLAGS_COMPILE = "-I${pkgs.cyrus_sasl}/include/sasl";
180 });
194 });
181
195
182 python-pam = super.python-pam.override (attrs:
196 python-pam = super.python-pam.override (attrs:
183 let
197 let
184 includeLibPam = pkgs.stdenv.isLinux;
198 includeLibPam = pkgs.stdenv.isLinux;
185 in {
199 in {
186 # TODO: johbo: Move the option up into the default.nix, we should
200 # TODO: johbo: Move the option up into the default.nix, we should
187 # include python-pam only on supported platforms.
201 # include python-pam only on supported platforms.
188 propagatedBuildInputs = attrs.propagatedBuildInputs ++
202 propagatedBuildInputs = attrs.propagatedBuildInputs ++
189 pkgs.lib.optional includeLibPam [
203 pkgs.lib.optional includeLibPam [
190 pkgs.pam
204 pkgs.pam
191 ];
205 ];
192 # TODO: johbo: Check if this can be avoided, or transform into
206 # TODO: johbo: Check if this can be avoided, or transform into
193 # a real patch
207 # a real patch
194 patchPhase = pkgs.lib.optionals includeLibPam ''
208 patchPhase = pkgs.lib.optionals includeLibPam ''
195 substituteInPlace pam.py \
209 substituteInPlace pam.py \
196 --replace 'find_library("pam")' '"${pkgs.pam}/lib/libpam.so.0"'
210 --replace 'find_library("pam")' '"${pkgs.pam}/lib/libpam.so.0"'
197 '';
211 '';
198 });
212 });
199
213
200 rhodecode-tools = super.rhodecode-tools.override (attrs: {
214 rhodecode-tools = super.rhodecode-tools.override (attrs: {
201 patches = [
215 patches = [
202 ./patch-rhodecode-tools-setup.diff
216 ./patch-rhodecode-tools-setup.diff
203 ];
217 ];
204 });
218 });
205
219
206 URLObject = super.URLObject.override (attrs: {
220 URLObject = super.URLObject.override (attrs: {
207 meta = {
221 meta = {
208 license = {
222 license = {
209 spdxId = "Unlicense";
223 spdxId = "Unlicense";
210 fullName = "The Unlicense";
224 fullName = "The Unlicense";
211 url = http://unlicense.org/;
225 url = http://unlicense.org/;
212 };
226 };
213 };
227 };
214 });
228 });
215
229
216 amqplib = super.amqplib.override (attrs: {
230 amqplib = super.amqplib.override (attrs: {
217 meta = {
231 meta = {
218 license = pkgs.lib.licenses.lgpl3;
232 license = pkgs.lib.licenses.lgpl3;
219 };
233 };
220 });
234 });
221
235
222 docutils = super.docutils.override (attrs: {
236 docutils = super.docutils.override (attrs: {
223 meta = {
237 meta = {
224 license = pkgs.lib.licenses.bsd2;
238 license = pkgs.lib.licenses.bsd2;
225 };
239 };
226 });
240 });
227
241
228 colander = super.colander.override (attrs: {
242 colander = super.colander.override (attrs: {
229 meta = {
243 meta = {
230 license = localLicenses.repoze;
244 license = localLicenses.repoze;
231 };
245 };
232 });
246 });
233
247
234 pyramid-beaker = super.pyramid-beaker.override (attrs: {
248 pyramid-beaker = super.pyramid-beaker.override (attrs: {
235 meta = {
249 meta = {
236 license = localLicenses.repoze;
250 license = localLicenses.repoze;
237 };
251 };
238 });
252 });
239
253
240 pyramid-mako = super.pyramid-mako.override (attrs: {
254 pyramid-mako = super.pyramid-mako.override (attrs: {
241 meta = {
255 meta = {
242 license = localLicenses.repoze;
256 license = localLicenses.repoze;
243 };
257 };
244 });
258 });
245
259
246 repoze.lru = super.repoze.lru.override (attrs: {
260 repoze.lru = super.repoze.lru.override (attrs: {
247 meta = {
261 meta = {
248 license = localLicenses.repoze;
262 license = localLicenses.repoze;
249 };
263 };
250 });
264 });
251
265
252 recaptcha-client = super.recaptcha-client.override (attrs: {
266 recaptcha-client = super.recaptcha-client.override (attrs: {
253 meta = {
267 meta = {
254 # TODO: It is MIT/X11
268 # TODO: It is MIT/X11
255 license = pkgs.lib.licenses.mit;
269 license = pkgs.lib.licenses.mit;
256 };
270 };
257 });
271 });
258
272
259 python-editor = super.python-editor.override (attrs: {
273 python-editor = super.python-editor.override (attrs: {
260 meta = {
274 meta = {
261 license = pkgs.lib.licenses.asl20;
275 license = pkgs.lib.licenses.asl20;
262 };
276 };
263 });
277 });
264
278
265 translationstring = super.translationstring.override (attrs: {
279 translationstring = super.translationstring.override (attrs: {
266 meta = {
280 meta = {
267 license = localLicenses.repoze;
281 license = localLicenses.repoze;
268 };
282 };
269 });
283 });
270
284
271 venusian = super.venusian.override (attrs: {
285 venusian = super.venusian.override (attrs: {
272 meta = {
286 meta = {
273 license = localLicenses.repoze;
287 license = localLicenses.repoze;
274 };
288 };
275 });
289 });
276
290
277 # Avoid that setuptools is replaced, this leads to trouble
291 # Avoid that setuptools is replaced, this leads to trouble
278 # with buildPythonPackage.
292 # with buildPythonPackage.
279 setuptools = basePythonPackages.setuptools;
293 setuptools = basePythonPackages.setuptools;
280
294
281 }
295 }
@@ -1,1732 +1,1719 b''
1 {
1 {
2 Babel = super.buildPythonPackage {
2 Babel = super.buildPythonPackage {
3 name = "Babel-1.3";
3 name = "Babel-1.3";
4 buildInputs = with self; [];
4 buildInputs = with self; [];
5 doCheck = false;
5 doCheck = false;
6 propagatedBuildInputs = with self; [pytz];
6 propagatedBuildInputs = with self; [pytz];
7 src = fetchurl {
7 src = fetchurl {
8 url = "https://pypi.python.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
8 url = "https://pypi.python.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
9 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
9 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
10 };
10 };
11 meta = {
11 meta = {
12 license = [ pkgs.lib.licenses.bsdOriginal ];
12 license = [ pkgs.lib.licenses.bsdOriginal ];
13 };
13 };
14 };
14 };
15 Beaker = super.buildPythonPackage {
15 Beaker = super.buildPythonPackage {
16 name = "Beaker-1.7.0";
16 name = "Beaker-1.7.0";
17 buildInputs = with self; [];
17 buildInputs = with self; [];
18 doCheck = false;
18 doCheck = false;
19 propagatedBuildInputs = with self; [];
19 propagatedBuildInputs = with self; [];
20 src = fetchurl {
20 src = fetchurl {
21 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
21 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
22 md5 = "386be3f7fe427358881eee4622b428b3";
22 md5 = "386be3f7fe427358881eee4622b428b3";
23 };
23 };
24 meta = {
24 meta = {
25 license = [ pkgs.lib.licenses.bsdOriginal ];
25 license = [ pkgs.lib.licenses.bsdOriginal ];
26 };
26 };
27 };
27 };
28 CProfileV = super.buildPythonPackage {
28 CProfileV = super.buildPythonPackage {
29 name = "CProfileV-1.0.6";
29 name = "CProfileV-1.0.6";
30 buildInputs = with self; [];
30 buildInputs = with self; [];
31 doCheck = false;
31 doCheck = false;
32 propagatedBuildInputs = with self; [bottle];
32 propagatedBuildInputs = with self; [bottle];
33 src = fetchurl {
33 src = fetchurl {
34 url = "https://pypi.python.org/packages/eb/df/983a0b6cfd3ac94abf023f5011cb04f33613ace196e33f53c86cf91850d5/CProfileV-1.0.6.tar.gz";
34 url = "https://pypi.python.org/packages/eb/df/983a0b6cfd3ac94abf023f5011cb04f33613ace196e33f53c86cf91850d5/CProfileV-1.0.6.tar.gz";
35 md5 = "08c7c242b6e64237bc53c5d13537e03d";
35 md5 = "08c7c242b6e64237bc53c5d13537e03d";
36 };
36 };
37 meta = {
37 meta = {
38 license = [ pkgs.lib.licenses.mit ];
38 license = [ pkgs.lib.licenses.mit ];
39 };
39 };
40 };
40 };
41 Chameleon = super.buildPythonPackage {
41 Chameleon = super.buildPythonPackage {
42 name = "Chameleon-2.24";
42 name = "Chameleon-2.24";
43 buildInputs = with self; [];
43 buildInputs = with self; [];
44 doCheck = false;
44 doCheck = false;
45 propagatedBuildInputs = with self; [];
45 propagatedBuildInputs = with self; [];
46 src = fetchurl {
46 src = fetchurl {
47 url = "https://pypi.python.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
47 url = "https://pypi.python.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
48 md5 = "1b01f1f6533a8a11d0d2f2366dec5342";
48 md5 = "1b01f1f6533a8a11d0d2f2366dec5342";
49 };
49 };
50 meta = {
50 meta = {
51 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
51 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
52 };
52 };
53 };
53 };
54 Fabric = super.buildPythonPackage {
55 name = "Fabric-1.10.0";
56 buildInputs = with self; [];
57 doCheck = false;
58 propagatedBuildInputs = with self; [paramiko];
59 src = fetchurl {
60 url = "https://pypi.python.org/packages/e3/5f/b6ebdb5241d5ec9eab582a5c8a01255c1107da396f849e538801d2fe64a5/Fabric-1.10.0.tar.gz";
61 md5 = "2cb96473387f0e7aa035210892352f4a";
62 };
63 meta = {
64 license = [ pkgs.lib.licenses.bsdOriginal ];
65 };
66 };
67 FormEncode = super.buildPythonPackage {
54 FormEncode = super.buildPythonPackage {
68 name = "FormEncode-1.2.4";
55 name = "FormEncode-1.2.4";
69 buildInputs = with self; [];
56 buildInputs = with self; [];
70 doCheck = false;
57 doCheck = false;
71 propagatedBuildInputs = with self; [];
58 propagatedBuildInputs = with self; [];
72 src = fetchurl {
59 src = fetchurl {
73 url = "https://pypi.python.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
60 url = "https://pypi.python.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
74 md5 = "6bc17fb9aed8aea198975e888e2077f4";
61 md5 = "6bc17fb9aed8aea198975e888e2077f4";
75 };
62 };
76 meta = {
63 meta = {
77 license = [ pkgs.lib.licenses.psfl ];
64 license = [ pkgs.lib.licenses.psfl ];
78 };
65 };
79 };
66 };
80 Jinja2 = super.buildPythonPackage {
67 Jinja2 = super.buildPythonPackage {
81 name = "Jinja2-2.7.3";
68 name = "Jinja2-2.7.3";
82 buildInputs = with self; [];
69 buildInputs = with self; [];
83 doCheck = false;
70 doCheck = false;
84 propagatedBuildInputs = with self; [MarkupSafe];
71 propagatedBuildInputs = with self; [MarkupSafe];
85 src = fetchurl {
72 src = fetchurl {
86 url = "https://pypi.python.org/packages/b0/73/eab0bca302d6d6a0b5c402f47ad1760dc9cb2dd14bbc1873ad48db258e4d/Jinja2-2.7.3.tar.gz";
73 url = "https://pypi.python.org/packages/b0/73/eab0bca302d6d6a0b5c402f47ad1760dc9cb2dd14bbc1873ad48db258e4d/Jinja2-2.7.3.tar.gz";
87 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
74 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
88 };
75 };
89 meta = {
76 meta = {
90 license = [ pkgs.lib.licenses.bsdOriginal ];
77 license = [ pkgs.lib.licenses.bsdOriginal ];
91 };
78 };
92 };
79 };
93 Mako = super.buildPythonPackage {
80 Mako = super.buildPythonPackage {
94 name = "Mako-1.0.1";
81 name = "Mako-1.0.1";
95 buildInputs = with self; [];
82 buildInputs = with self; [];
96 doCheck = false;
83 doCheck = false;
97 propagatedBuildInputs = with self; [MarkupSafe];
84 propagatedBuildInputs = with self; [MarkupSafe];
98 src = fetchurl {
85 src = fetchurl {
99 url = "https://pypi.python.org/packages/8e/a4/aa56533ecaa5f22ca92428f74e074d0c9337282933c722391902c8f9e0f8/Mako-1.0.1.tar.gz";
86 url = "https://pypi.python.org/packages/8e/a4/aa56533ecaa5f22ca92428f74e074d0c9337282933c722391902c8f9e0f8/Mako-1.0.1.tar.gz";
100 md5 = "9f0aafd177b039ef67b90ea350497a54";
87 md5 = "9f0aafd177b039ef67b90ea350497a54";
101 };
88 };
102 meta = {
89 meta = {
103 license = [ pkgs.lib.licenses.mit ];
90 license = [ pkgs.lib.licenses.mit ];
104 };
91 };
105 };
92 };
106 Markdown = super.buildPythonPackage {
93 Markdown = super.buildPythonPackage {
107 name = "Markdown-2.6.2";
94 name = "Markdown-2.6.2";
108 buildInputs = with self; [];
95 buildInputs = with self; [];
109 doCheck = false;
96 doCheck = false;
110 propagatedBuildInputs = with self; [];
97 propagatedBuildInputs = with self; [];
111 src = fetchurl {
98 src = fetchurl {
112 url = "https://pypi.python.org/packages/62/8b/83658b5f6c220d5fcde9f9852d46ea54765d734cfbc5a9f4c05bfc36db4d/Markdown-2.6.2.tar.gz";
99 url = "https://pypi.python.org/packages/62/8b/83658b5f6c220d5fcde9f9852d46ea54765d734cfbc5a9f4c05bfc36db4d/Markdown-2.6.2.tar.gz";
113 md5 = "256d19afcc564dc4ce4c229bb762f7ae";
100 md5 = "256d19afcc564dc4ce4c229bb762f7ae";
114 };
101 };
115 meta = {
102 meta = {
116 license = [ pkgs.lib.licenses.bsdOriginal ];
103 license = [ pkgs.lib.licenses.bsdOriginal ];
117 };
104 };
118 };
105 };
119 MarkupSafe = super.buildPythonPackage {
106 MarkupSafe = super.buildPythonPackage {
120 name = "MarkupSafe-0.23";
107 name = "MarkupSafe-0.23";
121 buildInputs = with self; [];
108 buildInputs = with self; [];
122 doCheck = false;
109 doCheck = false;
123 propagatedBuildInputs = with self; [];
110 propagatedBuildInputs = with self; [];
124 src = fetchurl {
111 src = fetchurl {
125 url = "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz";
112 url = "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz";
126 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
113 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
127 };
114 };
128 meta = {
115 meta = {
129 license = [ pkgs.lib.licenses.bsdOriginal ];
116 license = [ pkgs.lib.licenses.bsdOriginal ];
130 };
117 };
131 };
118 };
132 MySQL-python = super.buildPythonPackage {
119 MySQL-python = super.buildPythonPackage {
133 name = "MySQL-python-1.2.5";
120 name = "MySQL-python-1.2.5";
134 buildInputs = with self; [];
121 buildInputs = with self; [];
135 doCheck = false;
122 doCheck = false;
136 propagatedBuildInputs = with self; [];
123 propagatedBuildInputs = with self; [];
137 src = fetchurl {
124 src = fetchurl {
138 url = "https://pypi.python.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
125 url = "https://pypi.python.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
139 md5 = "654f75b302db6ed8dc5a898c625e030c";
126 md5 = "654f75b302db6ed8dc5a898c625e030c";
140 };
127 };
141 meta = {
128 meta = {
142 license = [ pkgs.lib.licenses.gpl1 ];
129 license = [ pkgs.lib.licenses.gpl1 ];
143 };
130 };
144 };
131 };
145 Paste = super.buildPythonPackage {
132 Paste = super.buildPythonPackage {
146 name = "Paste-2.0.2";
133 name = "Paste-2.0.2";
147 buildInputs = with self; [];
134 buildInputs = with self; [];
148 doCheck = false;
135 doCheck = false;
149 propagatedBuildInputs = with self; [six];
136 propagatedBuildInputs = with self; [six];
150 src = fetchurl {
137 src = fetchurl {
151 url = "https://pypi.python.org/packages/d5/8d/0f8ac40687b97ff3e07ebd1369be20bdb3f93864d2dc3c2ff542edb4ce50/Paste-2.0.2.tar.gz";
138 url = "https://pypi.python.org/packages/d5/8d/0f8ac40687b97ff3e07ebd1369be20bdb3f93864d2dc3c2ff542edb4ce50/Paste-2.0.2.tar.gz";
152 md5 = "4bfc8a7eaf858f6309d2ac0f40fc951c";
139 md5 = "4bfc8a7eaf858f6309d2ac0f40fc951c";
153 };
140 };
154 meta = {
141 meta = {
155 license = [ pkgs.lib.licenses.mit ];
142 license = [ pkgs.lib.licenses.mit ];
156 };
143 };
157 };
144 };
158 PasteDeploy = super.buildPythonPackage {
145 PasteDeploy = super.buildPythonPackage {
159 name = "PasteDeploy-1.5.2";
146 name = "PasteDeploy-1.5.2";
160 buildInputs = with self; [];
147 buildInputs = with self; [];
161 doCheck = false;
148 doCheck = false;
162 propagatedBuildInputs = with self; [];
149 propagatedBuildInputs = with self; [];
163 src = fetchurl {
150 src = fetchurl {
164 url = "https://pypi.python.org/packages/0f/90/8e20cdae206c543ea10793cbf4136eb9a8b3f417e04e40a29d72d9922cbd/PasteDeploy-1.5.2.tar.gz";
151 url = "https://pypi.python.org/packages/0f/90/8e20cdae206c543ea10793cbf4136eb9a8b3f417e04e40a29d72d9922cbd/PasteDeploy-1.5.2.tar.gz";
165 md5 = "352b7205c78c8de4987578d19431af3b";
152 md5 = "352b7205c78c8de4987578d19431af3b";
166 };
153 };
167 meta = {
154 meta = {
168 license = [ pkgs.lib.licenses.mit ];
155 license = [ pkgs.lib.licenses.mit ];
169 };
156 };
170 };
157 };
171 PasteScript = super.buildPythonPackage {
158 PasteScript = super.buildPythonPackage {
172 name = "PasteScript-1.7.5";
159 name = "PasteScript-1.7.5";
173 buildInputs = with self; [];
160 buildInputs = with self; [];
174 doCheck = false;
161 doCheck = false;
175 propagatedBuildInputs = with self; [Paste PasteDeploy];
162 propagatedBuildInputs = with self; [Paste PasteDeploy];
176 src = fetchurl {
163 src = fetchurl {
177 url = "https://pypi.python.org/packages/a5/05/fc60efa7c2f17a1dbaeccb2a903a1e90902d92b9d00eebabe3095829d806/PasteScript-1.7.5.tar.gz";
164 url = "https://pypi.python.org/packages/a5/05/fc60efa7c2f17a1dbaeccb2a903a1e90902d92b9d00eebabe3095829d806/PasteScript-1.7.5.tar.gz";
178 md5 = "4c72d78dcb6bb993f30536842c16af4d";
165 md5 = "4c72d78dcb6bb993f30536842c16af4d";
179 };
166 };
180 meta = {
167 meta = {
181 license = [ pkgs.lib.licenses.mit ];
168 license = [ pkgs.lib.licenses.mit ];
182 };
169 };
183 };
170 };
184 Pygments = super.buildPythonPackage {
171 Pygments = super.buildPythonPackage {
185 name = "Pygments-2.1.3";
172 name = "Pygments-2.1.3";
186 buildInputs = with self; [];
173 buildInputs = with self; [];
187 doCheck = false;
174 doCheck = false;
188 propagatedBuildInputs = with self; [];
175 propagatedBuildInputs = with self; [];
189 src = fetchurl {
176 src = fetchurl {
190 url = "https://pypi.python.org/packages/b8/67/ab177979be1c81bc99c8d0592ef22d547e70bb4c6815c383286ed5dec504/Pygments-2.1.3.tar.gz";
177 url = "https://pypi.python.org/packages/b8/67/ab177979be1c81bc99c8d0592ef22d547e70bb4c6815c383286ed5dec504/Pygments-2.1.3.tar.gz";
191 md5 = "ed3fba2467c8afcda4d317e4ef2c6150";
178 md5 = "ed3fba2467c8afcda4d317e4ef2c6150";
192 };
179 };
193 meta = {
180 meta = {
194 license = [ pkgs.lib.licenses.bsdOriginal ];
181 license = [ pkgs.lib.licenses.bsdOriginal ];
195 };
182 };
196 };
183 };
197 Pylons = super.buildPythonPackage {
184 Pylons = super.buildPythonPackage {
198 name = "Pylons-1.0.1";
185 name = "Pylons-1.0.1";
199 buildInputs = with self; [];
186 buildInputs = with self; [];
200 doCheck = false;
187 doCheck = false;
201 propagatedBuildInputs = with self; [Routes WebHelpers Beaker Paste PasteDeploy PasteScript FormEncode simplejson decorator nose Mako WebError WebTest Tempita MarkupSafe WebOb];
188 propagatedBuildInputs = with self; [Routes WebHelpers Beaker Paste PasteDeploy PasteScript FormEncode simplejson decorator nose Mako WebError WebTest Tempita MarkupSafe WebOb];
202 src = fetchurl {
189 src = fetchurl {
203 url = "https://pypi.python.org/packages/a2/69/b835a6bad00acbfeed3f33c6e44fa3f936efc998c795bfb15c61a79ecf62/Pylons-1.0.1.tar.gz";
190 url = "https://pypi.python.org/packages/a2/69/b835a6bad00acbfeed3f33c6e44fa3f936efc998c795bfb15c61a79ecf62/Pylons-1.0.1.tar.gz";
204 md5 = "6cb880d75fa81213192142b07a6e4915";
191 md5 = "6cb880d75fa81213192142b07a6e4915";
205 };
192 };
206 meta = {
193 meta = {
207 license = [ pkgs.lib.licenses.bsdOriginal ];
194 license = [ pkgs.lib.licenses.bsdOriginal ];
208 };
195 };
209 };
196 };
210 Pyro4 = super.buildPythonPackage {
197 Pyro4 = super.buildPythonPackage {
211 name = "Pyro4-4.41";
198 name = "Pyro4-4.41";
212 buildInputs = with self; [];
199 buildInputs = with self; [];
213 doCheck = false;
200 doCheck = false;
214 propagatedBuildInputs = with self; [serpent];
201 propagatedBuildInputs = with self; [serpent];
215 src = fetchurl {
202 src = fetchurl {
216 url = "https://pypi.python.org/packages/56/2b/89b566b4bf3e7f8ba790db2d1223852f8cb454c52cab7693dd41f608ca2a/Pyro4-4.41.tar.gz";
203 url = "https://pypi.python.org/packages/56/2b/89b566b4bf3e7f8ba790db2d1223852f8cb454c52cab7693dd41f608ca2a/Pyro4-4.41.tar.gz";
217 md5 = "ed69e9bfafa9c06c049a87cb0c4c2b6c";
204 md5 = "ed69e9bfafa9c06c049a87cb0c4c2b6c";
218 };
205 };
219 meta = {
206 meta = {
220 license = [ pkgs.lib.licenses.mit ];
207 license = [ pkgs.lib.licenses.mit ];
221 };
208 };
222 };
209 };
223 Routes = super.buildPythonPackage {
210 Routes = super.buildPythonPackage {
224 name = "Routes-1.13";
211 name = "Routes-1.13";
225 buildInputs = with self; [];
212 buildInputs = with self; [];
226 doCheck = false;
213 doCheck = false;
227 propagatedBuildInputs = with self; [repoze.lru];
214 propagatedBuildInputs = with self; [repoze.lru];
228 src = fetchurl {
215 src = fetchurl {
229 url = "https://pypi.python.org/packages/88/d3/259c3b3cde8837eb9441ab5f574a660e8a4acea8f54a078441d4d2acac1c/Routes-1.13.tar.gz";
216 url = "https://pypi.python.org/packages/88/d3/259c3b3cde8837eb9441ab5f574a660e8a4acea8f54a078441d4d2acac1c/Routes-1.13.tar.gz";
230 md5 = "d527b0ab7dd9172b1275a41f97448783";
217 md5 = "d527b0ab7dd9172b1275a41f97448783";
231 };
218 };
232 meta = {
219 meta = {
233 license = [ pkgs.lib.licenses.bsdOriginal ];
220 license = [ pkgs.lib.licenses.bsdOriginal ];
234 };
221 };
235 };
222 };
236 SQLAlchemy = super.buildPythonPackage {
223 SQLAlchemy = super.buildPythonPackage {
237 name = "SQLAlchemy-0.9.9";
224 name = "SQLAlchemy-0.9.9";
238 buildInputs = with self; [];
225 buildInputs = with self; [];
239 doCheck = false;
226 doCheck = false;
240 propagatedBuildInputs = with self; [];
227 propagatedBuildInputs = with self; [];
241 src = fetchurl {
228 src = fetchurl {
242 url = "https://pypi.python.org/packages/28/f7/1bbfd0d8597e8c358d5e15a166a486ad82fc5579b4e67b6ef7c05b1d182b/SQLAlchemy-0.9.9.tar.gz";
229 url = "https://pypi.python.org/packages/28/f7/1bbfd0d8597e8c358d5e15a166a486ad82fc5579b4e67b6ef7c05b1d182b/SQLAlchemy-0.9.9.tar.gz";
243 md5 = "8a10a9bd13ed3336ef7333ac2cc679ff";
230 md5 = "8a10a9bd13ed3336ef7333ac2cc679ff";
244 };
231 };
245 meta = {
232 meta = {
246 license = [ pkgs.lib.licenses.mit ];
233 license = [ pkgs.lib.licenses.mit ];
247 };
234 };
248 };
235 };
249 Sphinx = super.buildPythonPackage {
236 Sphinx = super.buildPythonPackage {
250 name = "Sphinx-1.2.2";
237 name = "Sphinx-1.2.2";
251 buildInputs = with self; [];
238 buildInputs = with self; [];
252 doCheck = false;
239 doCheck = false;
253 propagatedBuildInputs = with self; [Pygments docutils Jinja2];
240 propagatedBuildInputs = with self; [Pygments docutils Jinja2];
254 src = fetchurl {
241 src = fetchurl {
255 url = "https://pypi.python.org/packages/0a/50/34017e6efcd372893a416aba14b84a1a149fc7074537b0e9cb6ca7b7abe9/Sphinx-1.2.2.tar.gz";
242 url = "https://pypi.python.org/packages/0a/50/34017e6efcd372893a416aba14b84a1a149fc7074537b0e9cb6ca7b7abe9/Sphinx-1.2.2.tar.gz";
256 md5 = "3dc73ccaa8d0bfb2d62fb671b1f7e8a4";
243 md5 = "3dc73ccaa8d0bfb2d62fb671b1f7e8a4";
257 };
244 };
258 meta = {
245 meta = {
259 license = [ pkgs.lib.licenses.bsdOriginal ];
246 license = [ pkgs.lib.licenses.bsdOriginal ];
260 };
247 };
261 };
248 };
262 Tempita = super.buildPythonPackage {
249 Tempita = super.buildPythonPackage {
263 name = "Tempita-0.5.2";
250 name = "Tempita-0.5.2";
264 buildInputs = with self; [];
251 buildInputs = with self; [];
265 doCheck = false;
252 doCheck = false;
266 propagatedBuildInputs = with self; [];
253 propagatedBuildInputs = with self; [];
267 src = fetchurl {
254 src = fetchurl {
268 url = "https://pypi.python.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
255 url = "https://pypi.python.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
269 md5 = "4c2f17bb9d481821c41b6fbee904cea1";
256 md5 = "4c2f17bb9d481821c41b6fbee904cea1";
270 };
257 };
271 meta = {
258 meta = {
272 license = [ pkgs.lib.licenses.mit ];
259 license = [ pkgs.lib.licenses.mit ];
273 };
260 };
274 };
261 };
275 URLObject = super.buildPythonPackage {
262 URLObject = super.buildPythonPackage {
276 name = "URLObject-2.4.0";
263 name = "URLObject-2.4.0";
277 buildInputs = with self; [];
264 buildInputs = with self; [];
278 doCheck = false;
265 doCheck = false;
279 propagatedBuildInputs = with self; [];
266 propagatedBuildInputs = with self; [];
280 src = fetchurl {
267 src = fetchurl {
281 url = "https://pypi.python.org/packages/cb/b6/e25e58500f9caef85d664bec71ec67c116897bfebf8622c32cb75d1ca199/URLObject-2.4.0.tar.gz";
268 url = "https://pypi.python.org/packages/cb/b6/e25e58500f9caef85d664bec71ec67c116897bfebf8622c32cb75d1ca199/URLObject-2.4.0.tar.gz";
282 md5 = "2ed819738a9f0a3051f31dc9924e3065";
269 md5 = "2ed819738a9f0a3051f31dc9924e3065";
283 };
270 };
284 meta = {
271 meta = {
285 license = [ ];
272 license = [ ];
286 };
273 };
287 };
274 };
288 WebError = super.buildPythonPackage {
275 WebError = super.buildPythonPackage {
289 name = "WebError-0.10.3";
276 name = "WebError-0.10.3";
290 buildInputs = with self; [];
277 buildInputs = with self; [];
291 doCheck = false;
278 doCheck = false;
292 propagatedBuildInputs = with self; [WebOb Tempita Pygments Paste];
279 propagatedBuildInputs = with self; [WebOb Tempita Pygments Paste];
293 src = fetchurl {
280 src = fetchurl {
294 url = "https://pypi.python.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
281 url = "https://pypi.python.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
295 md5 = "84b9990b0baae6fd440b1e60cdd06f9a";
282 md5 = "84b9990b0baae6fd440b1e60cdd06f9a";
296 };
283 };
297 meta = {
284 meta = {
298 license = [ pkgs.lib.licenses.mit ];
285 license = [ pkgs.lib.licenses.mit ];
299 };
286 };
300 };
287 };
301 WebHelpers = super.buildPythonPackage {
288 WebHelpers = super.buildPythonPackage {
302 name = "WebHelpers-1.3";
289 name = "WebHelpers-1.3";
303 buildInputs = with self; [];
290 buildInputs = with self; [];
304 doCheck = false;
291 doCheck = false;
305 propagatedBuildInputs = with self; [MarkupSafe];
292 propagatedBuildInputs = with self; [MarkupSafe];
306 src = fetchurl {
293 src = fetchurl {
307 url = "https://pypi.python.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
294 url = "https://pypi.python.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
308 md5 = "32749ffadfc40fea51075a7def32588b";
295 md5 = "32749ffadfc40fea51075a7def32588b";
309 };
296 };
310 meta = {
297 meta = {
311 license = [ pkgs.lib.licenses.bsdOriginal ];
298 license = [ pkgs.lib.licenses.bsdOriginal ];
312 };
299 };
313 };
300 };
314 WebHelpers2 = super.buildPythonPackage {
301 WebHelpers2 = super.buildPythonPackage {
315 name = "WebHelpers2-2.0";
302 name = "WebHelpers2-2.0";
316 buildInputs = with self; [];
303 buildInputs = with self; [];
317 doCheck = false;
304 doCheck = false;
318 propagatedBuildInputs = with self; [MarkupSafe six];
305 propagatedBuildInputs = with self; [MarkupSafe six];
319 src = fetchurl {
306 src = fetchurl {
320 url = "https://pypi.python.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
307 url = "https://pypi.python.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
321 md5 = "0f6b68d70c12ee0aed48c00b24da13d3";
308 md5 = "0f6b68d70c12ee0aed48c00b24da13d3";
322 };
309 };
323 meta = {
310 meta = {
324 license = [ pkgs.lib.licenses.mit ];
311 license = [ pkgs.lib.licenses.mit ];
325 };
312 };
326 };
313 };
327 WebOb = super.buildPythonPackage {
314 WebOb = super.buildPythonPackage {
328 name = "WebOb-1.3.1";
315 name = "WebOb-1.3.1";
329 buildInputs = with self; [];
316 buildInputs = with self; [];
330 doCheck = false;
317 doCheck = false;
331 propagatedBuildInputs = with self; [];
318 propagatedBuildInputs = with self; [];
332 src = fetchurl {
319 src = fetchurl {
333 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
320 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
334 md5 = "20918251c5726956ba8fef22d1556177";
321 md5 = "20918251c5726956ba8fef22d1556177";
335 };
322 };
336 meta = {
323 meta = {
337 license = [ pkgs.lib.licenses.mit ];
324 license = [ pkgs.lib.licenses.mit ];
338 };
325 };
339 };
326 };
340 WebTest = super.buildPythonPackage {
327 WebTest = super.buildPythonPackage {
341 name = "WebTest-1.4.3";
328 name = "WebTest-1.4.3";
342 buildInputs = with self; [];
329 buildInputs = with self; [];
343 doCheck = false;
330 doCheck = false;
344 propagatedBuildInputs = with self; [WebOb];
331 propagatedBuildInputs = with self; [WebOb];
345 src = fetchurl {
332 src = fetchurl {
346 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
333 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
347 md5 = "631ce728bed92c681a4020a36adbc353";
334 md5 = "631ce728bed92c681a4020a36adbc353";
348 };
335 };
349 meta = {
336 meta = {
350 license = [ pkgs.lib.licenses.mit ];
337 license = [ pkgs.lib.licenses.mit ];
351 };
338 };
352 };
339 };
353 Whoosh = super.buildPythonPackage {
340 Whoosh = super.buildPythonPackage {
354 name = "Whoosh-2.7.0";
341 name = "Whoosh-2.7.0";
355 buildInputs = with self; [];
342 buildInputs = with self; [];
356 doCheck = false;
343 doCheck = false;
357 propagatedBuildInputs = with self; [];
344 propagatedBuildInputs = with self; [];
358 src = fetchurl {
345 src = fetchurl {
359 url = "https://pypi.python.org/packages/1c/dc/2f0231ff3875ded36df8c1ab851451e51a237dc0e5a86d3d96036158da94/Whoosh-2.7.0.zip";
346 url = "https://pypi.python.org/packages/1c/dc/2f0231ff3875ded36df8c1ab851451e51a237dc0e5a86d3d96036158da94/Whoosh-2.7.0.zip";
360 md5 = "7abfd970f16fadc7311960f3fa0bc7a9";
347 md5 = "7abfd970f16fadc7311960f3fa0bc7a9";
361 };
348 };
362 meta = {
349 meta = {
363 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
350 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
364 };
351 };
365 };
352 };
366 alembic = super.buildPythonPackage {
353 alembic = super.buildPythonPackage {
367 name = "alembic-0.8.4";
354 name = "alembic-0.8.4";
368 buildInputs = with self; [];
355 buildInputs = with self; [];
369 doCheck = false;
356 doCheck = false;
370 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor];
357 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor];
371 src = fetchurl {
358 src = fetchurl {
372 url = "https://pypi.python.org/packages/ca/7e/299b4499b5c75e5a38c5845145ad24755bebfb8eec07a2e1c366b7181eeb/alembic-0.8.4.tar.gz";
359 url = "https://pypi.python.org/packages/ca/7e/299b4499b5c75e5a38c5845145ad24755bebfb8eec07a2e1c366b7181eeb/alembic-0.8.4.tar.gz";
373 md5 = "5f95d8ee62b443f9b37eb5bee76c582d";
360 md5 = "5f95d8ee62b443f9b37eb5bee76c582d";
374 };
361 };
375 meta = {
362 meta = {
376 license = [ pkgs.lib.licenses.mit ];
363 license = [ pkgs.lib.licenses.mit ];
377 };
364 };
378 };
365 };
379 amqplib = super.buildPythonPackage {
366 amqplib = super.buildPythonPackage {
380 name = "amqplib-1.0.2";
367 name = "amqplib-1.0.2";
381 buildInputs = with self; [];
368 buildInputs = with self; [];
382 doCheck = false;
369 doCheck = false;
383 propagatedBuildInputs = with self; [];
370 propagatedBuildInputs = with self; [];
384 src = fetchurl {
371 src = fetchurl {
385 url = "https://pypi.python.org/packages/75/b7/8c2429bf8d92354a0118614f9a4d15e53bc69ebedce534284111de5a0102/amqplib-1.0.2.tgz";
372 url = "https://pypi.python.org/packages/75/b7/8c2429bf8d92354a0118614f9a4d15e53bc69ebedce534284111de5a0102/amqplib-1.0.2.tgz";
386 md5 = "5c92f17fbedd99b2b4a836d4352d1e2f";
373 md5 = "5c92f17fbedd99b2b4a836d4352d1e2f";
387 };
374 };
388 meta = {
375 meta = {
389 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
376 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
390 };
377 };
391 };
378 };
392 anyjson = super.buildPythonPackage {
379 anyjson = super.buildPythonPackage {
393 name = "anyjson-0.3.3";
380 name = "anyjson-0.3.3";
394 buildInputs = with self; [];
381 buildInputs = with self; [];
395 doCheck = false;
382 doCheck = false;
396 propagatedBuildInputs = with self; [];
383 propagatedBuildInputs = with self; [];
397 src = fetchurl {
384 src = fetchurl {
398 url = "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz";
385 url = "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz";
399 md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
386 md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
400 };
387 };
401 meta = {
388 meta = {
402 license = [ pkgs.lib.licenses.bsdOriginal ];
389 license = [ pkgs.lib.licenses.bsdOriginal ];
403 };
390 };
404 };
391 };
405 appenlight-client = super.buildPythonPackage {
392 appenlight-client = super.buildPythonPackage {
406 name = "appenlight-client-0.6.14";
393 name = "appenlight-client-0.6.14";
407 buildInputs = with self; [];
394 buildInputs = with self; [];
408 doCheck = false;
395 doCheck = false;
409 propagatedBuildInputs = with self; [WebOb requests];
396 propagatedBuildInputs = with self; [WebOb requests];
410 src = fetchurl {
397 src = fetchurl {
411 url = "https://pypi.python.org/packages/4d/e0/23fee3ebada8143f707e65c06bcb82992040ee64ea8355e044ed55ebf0c1/appenlight_client-0.6.14.tar.gz";
398 url = "https://pypi.python.org/packages/4d/e0/23fee3ebada8143f707e65c06bcb82992040ee64ea8355e044ed55ebf0c1/appenlight_client-0.6.14.tar.gz";
412 md5 = "578c69b09f4356d898fff1199b98a95c";
399 md5 = "578c69b09f4356d898fff1199b98a95c";
413 };
400 };
414 meta = {
401 meta = {
415 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "DFSG approved"; } ];
402 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "DFSG approved"; } ];
416 };
403 };
417 };
404 };
418 authomatic = super.buildPythonPackage {
405 authomatic = super.buildPythonPackage {
419 name = "authomatic-0.1.0.post1";
406 name = "authomatic-0.1.0.post1";
420 buildInputs = with self; [];
407 buildInputs = with self; [];
421 doCheck = false;
408 doCheck = false;
422 propagatedBuildInputs = with self; [];
409 propagatedBuildInputs = with self; [];
423 src = fetchurl {
410 src = fetchurl {
424 url = "https://pypi.python.org/packages/08/1a/8a930461e604c2d5a7a871e1ac59fa82ccf994c32e807230c8d2fb07815a/Authomatic-0.1.0.post1.tar.gz";
411 url = "https://pypi.python.org/packages/08/1a/8a930461e604c2d5a7a871e1ac59fa82ccf994c32e807230c8d2fb07815a/Authomatic-0.1.0.post1.tar.gz";
425 md5 = "be3f3ce08747d776aae6d6cc8dcb49a9";
412 md5 = "be3f3ce08747d776aae6d6cc8dcb49a9";
426 };
413 };
427 meta = {
414 meta = {
428 license = [ pkgs.lib.licenses.mit ];
415 license = [ pkgs.lib.licenses.mit ];
429 };
416 };
430 };
417 };
431 backport-ipaddress = super.buildPythonPackage {
418 backport-ipaddress = super.buildPythonPackage {
432 name = "backport-ipaddress-0.1";
419 name = "backport-ipaddress-0.1";
433 buildInputs = with self; [];
420 buildInputs = with self; [];
434 doCheck = false;
421 doCheck = false;
435 propagatedBuildInputs = with self; [];
422 propagatedBuildInputs = with self; [];
436 src = fetchurl {
423 src = fetchurl {
437 url = "https://pypi.python.org/packages/d3/30/54c6dab05a4dec44db25ff309f1fbb6b7a8bde3f2bade38bb9da67bbab8f/backport_ipaddress-0.1.tar.gz";
424 url = "https://pypi.python.org/packages/d3/30/54c6dab05a4dec44db25ff309f1fbb6b7a8bde3f2bade38bb9da67bbab8f/backport_ipaddress-0.1.tar.gz";
438 md5 = "9c1f45f4361f71b124d7293a60006c05";
425 md5 = "9c1f45f4361f71b124d7293a60006c05";
439 };
426 };
440 meta = {
427 meta = {
441 license = [ pkgs.lib.licenses.psfl ];
428 license = [ pkgs.lib.licenses.psfl ];
442 };
429 };
443 };
430 };
444 bottle = super.buildPythonPackage {
431 bottle = super.buildPythonPackage {
445 name = "bottle-0.12.8";
432 name = "bottle-0.12.8";
446 buildInputs = with self; [];
433 buildInputs = with self; [];
447 doCheck = false;
434 doCheck = false;
448 propagatedBuildInputs = with self; [];
435 propagatedBuildInputs = with self; [];
449 src = fetchurl {
436 src = fetchurl {
450 url = "https://pypi.python.org/packages/52/df/e4a408f3a7af396d186d4ecd3b389dd764f0f943b4fa8d257bfe7b49d343/bottle-0.12.8.tar.gz";
437 url = "https://pypi.python.org/packages/52/df/e4a408f3a7af396d186d4ecd3b389dd764f0f943b4fa8d257bfe7b49d343/bottle-0.12.8.tar.gz";
451 md5 = "13132c0a8f607bf860810a6ee9064c5b";
438 md5 = "13132c0a8f607bf860810a6ee9064c5b";
452 };
439 };
453 meta = {
440 meta = {
454 license = [ pkgs.lib.licenses.mit ];
441 license = [ pkgs.lib.licenses.mit ];
455 };
442 };
456 };
443 };
457 bumpversion = super.buildPythonPackage {
444 bumpversion = super.buildPythonPackage {
458 name = "bumpversion-0.5.3";
445 name = "bumpversion-0.5.3";
459 buildInputs = with self; [];
446 buildInputs = with self; [];
460 doCheck = false;
447 doCheck = false;
461 propagatedBuildInputs = with self; [];
448 propagatedBuildInputs = with self; [];
462 src = fetchurl {
449 src = fetchurl {
463 url = "https://pypi.python.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
450 url = "https://pypi.python.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
464 md5 = "c66a3492eafcf5ad4b024be9fca29820";
451 md5 = "c66a3492eafcf5ad4b024be9fca29820";
465 };
452 };
466 meta = {
453 meta = {
467 license = [ pkgs.lib.licenses.mit ];
454 license = [ pkgs.lib.licenses.mit ];
468 };
455 };
469 };
456 };
470 celery = super.buildPythonPackage {
457 celery = super.buildPythonPackage {
471 name = "celery-2.2.10";
458 name = "celery-2.2.10";
472 buildInputs = with self; [];
459 buildInputs = with self; [];
473 doCheck = false;
460 doCheck = false;
474 propagatedBuildInputs = with self; [python-dateutil anyjson kombu pyparsing];
461 propagatedBuildInputs = with self; [python-dateutil anyjson kombu pyparsing];
475 src = fetchurl {
462 src = fetchurl {
476 url = "https://pypi.python.org/packages/b1/64/860fd50e45844c83442e7953effcddeff66b2851d90b2d784f7201c111b8/celery-2.2.10.tar.gz";
463 url = "https://pypi.python.org/packages/b1/64/860fd50e45844c83442e7953effcddeff66b2851d90b2d784f7201c111b8/celery-2.2.10.tar.gz";
477 md5 = "898bc87e54f278055b561316ba73e222";
464 md5 = "898bc87e54f278055b561316ba73e222";
478 };
465 };
479 meta = {
466 meta = {
480 license = [ pkgs.lib.licenses.bsdOriginal ];
467 license = [ pkgs.lib.licenses.bsdOriginal ];
481 };
468 };
482 };
469 };
483 channelstream = super.buildPythonPackage {
470 channelstream = super.buildPythonPackage {
484 name = "channelstream-0.5.2";
471 name = "channelstream-0.5.2";
485 buildInputs = with self; [];
472 buildInputs = with self; [];
486 doCheck = false;
473 doCheck = false;
487 propagatedBuildInputs = with self; [gevent ws4py pyramid pyramid-jinja2 itsdangerous requests six];
474 propagatedBuildInputs = with self; [gevent ws4py pyramid pyramid-jinja2 itsdangerous requests six];
488 src = fetchurl {
475 src = fetchurl {
489 url = "https://pypi.python.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
476 url = "https://pypi.python.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
490 md5 = "1c5eb2a8a405be6f1073da94da6d81d3";
477 md5 = "1c5eb2a8a405be6f1073da94da6d81d3";
491 };
478 };
492 meta = {
479 meta = {
493 license = [ pkgs.lib.licenses.bsdOriginal ];
480 license = [ pkgs.lib.licenses.bsdOriginal ];
494 };
481 };
495 };
482 };
496 click = super.buildPythonPackage {
483 click = super.buildPythonPackage {
497 name = "click-5.1";
484 name = "click-5.1";
498 buildInputs = with self; [];
485 buildInputs = with self; [];
499 doCheck = false;
486 doCheck = false;
500 propagatedBuildInputs = with self; [];
487 propagatedBuildInputs = with self; [];
501 src = fetchurl {
488 src = fetchurl {
502 url = "https://pypi.python.org/packages/b7/34/a496632c4fb6c1ee76efedf77bb8d28b29363d839953d95095b12defe791/click-5.1.tar.gz";
489 url = "https://pypi.python.org/packages/b7/34/a496632c4fb6c1ee76efedf77bb8d28b29363d839953d95095b12defe791/click-5.1.tar.gz";
503 md5 = "9c5323008cccfe232a8b161fc8196d41";
490 md5 = "9c5323008cccfe232a8b161fc8196d41";
504 };
491 };
505 meta = {
492 meta = {
506 license = [ pkgs.lib.licenses.bsdOriginal ];
493 license = [ pkgs.lib.licenses.bsdOriginal ];
507 };
494 };
508 };
495 };
509 colander = super.buildPythonPackage {
496 colander = super.buildPythonPackage {
510 name = "colander-1.2";
497 name = "colander-1.2";
511 buildInputs = with self; [];
498 buildInputs = with self; [];
512 doCheck = false;
499 doCheck = false;
513 propagatedBuildInputs = with self; [translationstring iso8601];
500 propagatedBuildInputs = with self; [translationstring iso8601];
514 src = fetchurl {
501 src = fetchurl {
515 url = "https://pypi.python.org/packages/14/23/c9ceba07a6a1dc0eefbb215fc0dc64aabc2b22ee756bc0f0c13278fa0887/colander-1.2.tar.gz";
502 url = "https://pypi.python.org/packages/14/23/c9ceba07a6a1dc0eefbb215fc0dc64aabc2b22ee756bc0f0c13278fa0887/colander-1.2.tar.gz";
516 md5 = "83db21b07936a0726e588dae1914b9ed";
503 md5 = "83db21b07936a0726e588dae1914b9ed";
517 };
504 };
518 meta = {
505 meta = {
519 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
506 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
520 };
507 };
521 };
508 };
522 configobj = super.buildPythonPackage {
509 configobj = super.buildPythonPackage {
523 name = "configobj-5.0.6";
510 name = "configobj-5.0.6";
524 buildInputs = with self; [];
511 buildInputs = with self; [];
525 doCheck = false;
512 doCheck = false;
526 propagatedBuildInputs = with self; [six];
513 propagatedBuildInputs = with self; [six];
527 src = fetchurl {
514 src = fetchurl {
528 url = "https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz";
515 url = "https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz";
529 md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
516 md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
530 };
517 };
531 meta = {
518 meta = {
532 license = [ pkgs.lib.licenses.bsdOriginal ];
519 license = [ pkgs.lib.licenses.bsdOriginal ];
533 };
520 };
534 };
521 };
535 cov-core = super.buildPythonPackage {
522 cov-core = super.buildPythonPackage {
536 name = "cov-core-1.15.0";
523 name = "cov-core-1.15.0";
537 buildInputs = with self; [];
524 buildInputs = with self; [];
538 doCheck = false;
525 doCheck = false;
539 propagatedBuildInputs = with self; [coverage];
526 propagatedBuildInputs = with self; [coverage];
540 src = fetchurl {
527 src = fetchurl {
541 url = "https://pypi.python.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
528 url = "https://pypi.python.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
542 md5 = "f519d4cb4c4e52856afb14af52919fe6";
529 md5 = "f519d4cb4c4e52856afb14af52919fe6";
543 };
530 };
544 meta = {
531 meta = {
545 license = [ pkgs.lib.licenses.mit ];
532 license = [ pkgs.lib.licenses.mit ];
546 };
533 };
547 };
534 };
548 coverage = super.buildPythonPackage {
535 coverage = super.buildPythonPackage {
549 name = "coverage-3.7.1";
536 name = "coverage-3.7.1";
550 buildInputs = with self; [];
537 buildInputs = with self; [];
551 doCheck = false;
538 doCheck = false;
552 propagatedBuildInputs = with self; [];
539 propagatedBuildInputs = with self; [];
553 src = fetchurl {
540 src = fetchurl {
554 url = "https://pypi.python.org/packages/09/4f/89b06c7fdc09687bca507dc411c342556ef9c5a3b26756137a4878ff19bf/coverage-3.7.1.tar.gz";
541 url = "https://pypi.python.org/packages/09/4f/89b06c7fdc09687bca507dc411c342556ef9c5a3b26756137a4878ff19bf/coverage-3.7.1.tar.gz";
555 md5 = "c47b36ceb17eaff3ecfab3bcd347d0df";
542 md5 = "c47b36ceb17eaff3ecfab3bcd347d0df";
556 };
543 };
557 meta = {
544 meta = {
558 license = [ pkgs.lib.licenses.bsdOriginal ];
545 license = [ pkgs.lib.licenses.bsdOriginal ];
559 };
546 };
560 };
547 };
561 cssselect = super.buildPythonPackage {
548 cssselect = super.buildPythonPackage {
562 name = "cssselect-0.9.1";
549 name = "cssselect-0.9.1";
563 buildInputs = with self; [];
550 buildInputs = with self; [];
564 doCheck = false;
551 doCheck = false;
565 propagatedBuildInputs = with self; [];
552 propagatedBuildInputs = with self; [];
566 src = fetchurl {
553 src = fetchurl {
567 url = "https://pypi.python.org/packages/aa/e5/9ee1460d485b94a6d55732eb7ad5b6c084caf73dd6f9cb0bb7d2a78fafe8/cssselect-0.9.1.tar.gz";
554 url = "https://pypi.python.org/packages/aa/e5/9ee1460d485b94a6d55732eb7ad5b6c084caf73dd6f9cb0bb7d2a78fafe8/cssselect-0.9.1.tar.gz";
568 md5 = "c74f45966277dc7a0f768b9b0f3522ac";
555 md5 = "c74f45966277dc7a0f768b9b0f3522ac";
569 };
556 };
570 meta = {
557 meta = {
571 license = [ pkgs.lib.licenses.bsdOriginal ];
558 license = [ pkgs.lib.licenses.bsdOriginal ];
572 };
559 };
573 };
560 };
574 decorator = super.buildPythonPackage {
561 decorator = super.buildPythonPackage {
575 name = "decorator-3.4.2";
562 name = "decorator-3.4.2";
576 buildInputs = with self; [];
563 buildInputs = with self; [];
577 doCheck = false;
564 doCheck = false;
578 propagatedBuildInputs = with self; [];
565 propagatedBuildInputs = with self; [];
579 src = fetchurl {
566 src = fetchurl {
580 url = "https://pypi.python.org/packages/35/3a/42566eb7a2cbac774399871af04e11d7ae3fc2579e7dae85213b8d1d1c57/decorator-3.4.2.tar.gz";
567 url = "https://pypi.python.org/packages/35/3a/42566eb7a2cbac774399871af04e11d7ae3fc2579e7dae85213b8d1d1c57/decorator-3.4.2.tar.gz";
581 md5 = "9e0536870d2b83ae27d58dbf22582f4d";
568 md5 = "9e0536870d2b83ae27d58dbf22582f4d";
582 };
569 };
583 meta = {
570 meta = {
584 license = [ pkgs.lib.licenses.bsdOriginal ];
571 license = [ pkgs.lib.licenses.bsdOriginal ];
585 };
572 };
586 };
573 };
587 deform = super.buildPythonPackage {
574 deform = super.buildPythonPackage {
588 name = "deform-2.0a2";
575 name = "deform-2.0a2";
589 buildInputs = with self; [];
576 buildInputs = with self; [];
590 doCheck = false;
577 doCheck = false;
591 propagatedBuildInputs = with self; [Chameleon colander peppercorn translationstring zope.deprecation];
578 propagatedBuildInputs = with self; [Chameleon colander peppercorn translationstring zope.deprecation];
592 src = fetchurl {
579 src = fetchurl {
593 url = "https://pypi.python.org/packages/8d/b3/aab57e81da974a806dc9c5fa024a6404720f890a6dcf2e80885e3cb4609a/deform-2.0a2.tar.gz";
580 url = "https://pypi.python.org/packages/8d/b3/aab57e81da974a806dc9c5fa024a6404720f890a6dcf2e80885e3cb4609a/deform-2.0a2.tar.gz";
594 md5 = "7a90d41f7fbc18002ce74f39bd90a5e4";
581 md5 = "7a90d41f7fbc18002ce74f39bd90a5e4";
595 };
582 };
596 meta = {
583 meta = {
597 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
584 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
598 };
585 };
599 };
586 };
600 docutils = super.buildPythonPackage {
587 docutils = super.buildPythonPackage {
601 name = "docutils-0.12";
588 name = "docutils-0.12";
602 buildInputs = with self; [];
589 buildInputs = with self; [];
603 doCheck = false;
590 doCheck = false;
604 propagatedBuildInputs = with self; [];
591 propagatedBuildInputs = with self; [];
605 src = fetchurl {
592 src = fetchurl {
606 url = "https://pypi.python.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz";
593 url = "https://pypi.python.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz";
607 md5 = "4622263b62c5c771c03502afa3157768";
594 md5 = "4622263b62c5c771c03502afa3157768";
608 };
595 };
609 meta = {
596 meta = {
610 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.publicDomain pkgs.lib.licenses.gpl1 { fullName = "public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)"; } pkgs.lib.licenses.psfl ];
597 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.publicDomain pkgs.lib.licenses.gpl1 { fullName = "public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)"; } pkgs.lib.licenses.psfl ];
611 };
598 };
612 };
599 };
613 dogpile.cache = super.buildPythonPackage {
600 dogpile.cache = super.buildPythonPackage {
614 name = "dogpile.cache-0.6.1";
601 name = "dogpile.cache-0.6.1";
615 buildInputs = with self; [];
602 buildInputs = with self; [];
616 doCheck = false;
603 doCheck = false;
617 propagatedBuildInputs = with self; [];
604 propagatedBuildInputs = with self; [];
618 src = fetchurl {
605 src = fetchurl {
619 url = "https://pypi.python.org/packages/f6/a0/6f2142c58c6588d17c734265b103ae1cd0741e1681dd9483a63f22033375/dogpile.cache-0.6.1.tar.gz";
606 url = "https://pypi.python.org/packages/f6/a0/6f2142c58c6588d17c734265b103ae1cd0741e1681dd9483a63f22033375/dogpile.cache-0.6.1.tar.gz";
620 md5 = "35d7fb30f22bbd0685763d894dd079a9";
607 md5 = "35d7fb30f22bbd0685763d894dd079a9";
621 };
608 };
622 meta = {
609 meta = {
623 license = [ pkgs.lib.licenses.bsdOriginal ];
610 license = [ pkgs.lib.licenses.bsdOriginal ];
624 };
611 };
625 };
612 };
626 dogpile.core = super.buildPythonPackage {
613 dogpile.core = super.buildPythonPackage {
627 name = "dogpile.core-0.4.1";
614 name = "dogpile.core-0.4.1";
628 buildInputs = with self; [];
615 buildInputs = with self; [];
629 doCheck = false;
616 doCheck = false;
630 propagatedBuildInputs = with self; [];
617 propagatedBuildInputs = with self; [];
631 src = fetchurl {
618 src = fetchurl {
632 url = "https://pypi.python.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
619 url = "https://pypi.python.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
633 md5 = "01cb19f52bba3e95c9b560f39341f045";
620 md5 = "01cb19f52bba3e95c9b560f39341f045";
634 };
621 };
635 meta = {
622 meta = {
636 license = [ pkgs.lib.licenses.bsdOriginal ];
623 license = [ pkgs.lib.licenses.bsdOriginal ];
637 };
624 };
638 };
625 };
639 dulwich = super.buildPythonPackage {
626 dulwich = super.buildPythonPackage {
640 name = "dulwich-0.12.0";
627 name = "dulwich-0.12.0";
641 buildInputs = with self; [];
628 buildInputs = with self; [];
642 doCheck = false;
629 doCheck = false;
643 propagatedBuildInputs = with self; [];
630 propagatedBuildInputs = with self; [];
644 src = fetchurl {
631 src = fetchurl {
645 url = "https://pypi.python.org/packages/6f/04/fbe561b6d45c0ec758330d5b7f5ba4b6cb4f1ca1ab49859d2fc16320da75/dulwich-0.12.0.tar.gz";
632 url = "https://pypi.python.org/packages/6f/04/fbe561b6d45c0ec758330d5b7f5ba4b6cb4f1ca1ab49859d2fc16320da75/dulwich-0.12.0.tar.gz";
646 md5 = "f3a8a12bd9f9dd8c233e18f3d49436fa";
633 md5 = "f3a8a12bd9f9dd8c233e18f3d49436fa";
647 };
634 };
648 meta = {
635 meta = {
649 license = [ pkgs.lib.licenses.gpl2Plus ];
636 license = [ pkgs.lib.licenses.gpl2Plus ];
650 };
637 };
651 };
638 };
652 ecdsa = super.buildPythonPackage {
639 ecdsa = super.buildPythonPackage {
653 name = "ecdsa-0.11";
640 name = "ecdsa-0.11";
654 buildInputs = with self; [];
641 buildInputs = with self; [];
655 doCheck = false;
642 doCheck = false;
656 propagatedBuildInputs = with self; [];
643 propagatedBuildInputs = with self; [];
657 src = fetchurl {
644 src = fetchurl {
658 url = "https://pypi.python.org/packages/6c/3f/92fe5dcdcaa7bd117be21e5520c9a54375112b66ec000d209e9e9519fad1/ecdsa-0.11.tar.gz";
645 url = "https://pypi.python.org/packages/6c/3f/92fe5dcdcaa7bd117be21e5520c9a54375112b66ec000d209e9e9519fad1/ecdsa-0.11.tar.gz";
659 md5 = "8ef586fe4dbb156697d756900cb41d7c";
646 md5 = "8ef586fe4dbb156697d756900cb41d7c";
660 };
647 };
661 meta = {
648 meta = {
662 license = [ pkgs.lib.licenses.mit ];
649 license = [ pkgs.lib.licenses.mit ];
663 };
650 };
664 };
651 };
665 elasticsearch = super.buildPythonPackage {
652 elasticsearch = super.buildPythonPackage {
666 name = "elasticsearch-2.3.0";
653 name = "elasticsearch-2.3.0";
667 buildInputs = with self; [];
654 buildInputs = with self; [];
668 doCheck = false;
655 doCheck = false;
669 propagatedBuildInputs = with self; [urllib3];
656 propagatedBuildInputs = with self; [urllib3];
670 src = fetchurl {
657 src = fetchurl {
671 url = "https://pypi.python.org/packages/10/35/5fd52c5f0b0ee405ed4b5195e8bce44c5e041787680dc7b94b8071cac600/elasticsearch-2.3.0.tar.gz";
658 url = "https://pypi.python.org/packages/10/35/5fd52c5f0b0ee405ed4b5195e8bce44c5e041787680dc7b94b8071cac600/elasticsearch-2.3.0.tar.gz";
672 md5 = "2550f3b51629cf1ef9636608af92c340";
659 md5 = "2550f3b51629cf1ef9636608af92c340";
673 };
660 };
674 meta = {
661 meta = {
675 license = [ pkgs.lib.licenses.asl20 ];
662 license = [ pkgs.lib.licenses.asl20 ];
676 };
663 };
677 };
664 };
678 elasticsearch-dsl = super.buildPythonPackage {
665 elasticsearch-dsl = super.buildPythonPackage {
679 name = "elasticsearch-dsl-2.0.0";
666 name = "elasticsearch-dsl-2.0.0";
680 buildInputs = with self; [];
667 buildInputs = with self; [];
681 doCheck = false;
668 doCheck = false;
682 propagatedBuildInputs = with self; [six python-dateutil elasticsearch];
669 propagatedBuildInputs = with self; [six python-dateutil elasticsearch];
683 src = fetchurl {
670 src = fetchurl {
684 url = "https://pypi.python.org/packages/4e/5d/e788ae8dbe2ff4d13426db0a027533386a5c276c77a2654dc0e2007ce04a/elasticsearch-dsl-2.0.0.tar.gz";
671 url = "https://pypi.python.org/packages/4e/5d/e788ae8dbe2ff4d13426db0a027533386a5c276c77a2654dc0e2007ce04a/elasticsearch-dsl-2.0.0.tar.gz";
685 md5 = "4cdfec81bb35383dd3b7d02d7dc5ee68";
672 md5 = "4cdfec81bb35383dd3b7d02d7dc5ee68";
686 };
673 };
687 meta = {
674 meta = {
688 license = [ pkgs.lib.licenses.asl20 ];
675 license = [ pkgs.lib.licenses.asl20 ];
689 };
676 };
690 };
677 };
691 flake8 = super.buildPythonPackage {
678 flake8 = super.buildPythonPackage {
692 name = "flake8-2.4.1";
679 name = "flake8-2.4.1";
693 buildInputs = with self; [];
680 buildInputs = with self; [];
694 doCheck = false;
681 doCheck = false;
695 propagatedBuildInputs = with self; [pyflakes pep8 mccabe];
682 propagatedBuildInputs = with self; [pyflakes pep8 mccabe];
696 src = fetchurl {
683 src = fetchurl {
697 url = "https://pypi.python.org/packages/8f/b5/9a73c66c7dba273bac8758398f060c008a25f3e84531063b42503b5d0a95/flake8-2.4.1.tar.gz";
684 url = "https://pypi.python.org/packages/8f/b5/9a73c66c7dba273bac8758398f060c008a25f3e84531063b42503b5d0a95/flake8-2.4.1.tar.gz";
698 md5 = "ed45d3db81a3b7c88bd63c6e37ca1d65";
685 md5 = "ed45d3db81a3b7c88bd63c6e37ca1d65";
699 };
686 };
700 meta = {
687 meta = {
701 license = [ pkgs.lib.licenses.mit ];
688 license = [ pkgs.lib.licenses.mit ];
702 };
689 };
703 };
690 };
704 future = super.buildPythonPackage {
691 future = super.buildPythonPackage {
705 name = "future-0.14.3";
692 name = "future-0.14.3";
706 buildInputs = with self; [];
693 buildInputs = with self; [];
707 doCheck = false;
694 doCheck = false;
708 propagatedBuildInputs = with self; [];
695 propagatedBuildInputs = with self; [];
709 src = fetchurl {
696 src = fetchurl {
710 url = "https://pypi.python.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
697 url = "https://pypi.python.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
711 md5 = "e94079b0bd1fc054929e8769fc0f6083";
698 md5 = "e94079b0bd1fc054929e8769fc0f6083";
712 };
699 };
713 meta = {
700 meta = {
714 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
701 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
715 };
702 };
716 };
703 };
717 futures = super.buildPythonPackage {
704 futures = super.buildPythonPackage {
718 name = "futures-3.0.2";
705 name = "futures-3.0.2";
719 buildInputs = with self; [];
706 buildInputs = with self; [];
720 doCheck = false;
707 doCheck = false;
721 propagatedBuildInputs = with self; [];
708 propagatedBuildInputs = with self; [];
722 src = fetchurl {
709 src = fetchurl {
723 url = "https://pypi.python.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
710 url = "https://pypi.python.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
724 md5 = "42aaf1e4de48d6e871d77dc1f9d96d5a";
711 md5 = "42aaf1e4de48d6e871d77dc1f9d96d5a";
725 };
712 };
726 meta = {
713 meta = {
727 license = [ pkgs.lib.licenses.bsdOriginal ];
714 license = [ pkgs.lib.licenses.bsdOriginal ];
728 };
715 };
729 };
716 };
730 gevent = super.buildPythonPackage {
717 gevent = super.buildPythonPackage {
731 name = "gevent-1.1.1";
718 name = "gevent-1.1.1";
732 buildInputs = with self; [];
719 buildInputs = with self; [];
733 doCheck = false;
720 doCheck = false;
734 propagatedBuildInputs = with self; [greenlet];
721 propagatedBuildInputs = with self; [greenlet];
735 src = fetchurl {
722 src = fetchurl {
736 url = "https://pypi.python.org/packages/12/dc/0b2e57823225de86f6e111a65d212c9e3b64847dddaa19691a6cb94b0b2e/gevent-1.1.1.tar.gz";
723 url = "https://pypi.python.org/packages/12/dc/0b2e57823225de86f6e111a65d212c9e3b64847dddaa19691a6cb94b0b2e/gevent-1.1.1.tar.gz";
737 md5 = "1532f5396ab4d07a231f1935483be7c3";
724 md5 = "1532f5396ab4d07a231f1935483be7c3";
738 };
725 };
739 meta = {
726 meta = {
740 license = [ pkgs.lib.licenses.mit ];
727 license = [ pkgs.lib.licenses.mit ];
741 };
728 };
742 };
729 };
743 gnureadline = super.buildPythonPackage {
730 gnureadline = super.buildPythonPackage {
744 name = "gnureadline-6.3.3";
731 name = "gnureadline-6.3.3";
745 buildInputs = with self; [];
732 buildInputs = with self; [];
746 doCheck = false;
733 doCheck = false;
747 propagatedBuildInputs = with self; [];
734 propagatedBuildInputs = with self; [];
748 src = fetchurl {
735 src = fetchurl {
749 url = "https://pypi.python.org/packages/3a/ee/2c3f568b0a74974791ac590ec742ef6133e2fbd287a074ba72a53fa5e97c/gnureadline-6.3.3.tar.gz";
736 url = "https://pypi.python.org/packages/3a/ee/2c3f568b0a74974791ac590ec742ef6133e2fbd287a074ba72a53fa5e97c/gnureadline-6.3.3.tar.gz";
750 md5 = "c4af83c9a3fbeac8f2da9b5a7c60e51c";
737 md5 = "c4af83c9a3fbeac8f2da9b5a7c60e51c";
751 };
738 };
752 meta = {
739 meta = {
753 license = [ pkgs.lib.licenses.gpl1 ];
740 license = [ pkgs.lib.licenses.gpl1 ];
754 };
741 };
755 };
742 };
756 gprof2dot = super.buildPythonPackage {
743 gprof2dot = super.buildPythonPackage {
757 name = "gprof2dot-2015.12.1";
744 name = "gprof2dot-2015.12.1";
758 buildInputs = with self; [];
745 buildInputs = with self; [];
759 doCheck = false;
746 doCheck = false;
760 propagatedBuildInputs = with self; [];
747 propagatedBuildInputs = with self; [];
761 src = fetchurl {
748 src = fetchurl {
762 url = "https://pypi.python.org/packages/b9/34/7bf93c1952d40fa5c95ad963f4d8344b61ef58558632402eca18e6c14127/gprof2dot-2015.12.1.tar.gz";
749 url = "https://pypi.python.org/packages/b9/34/7bf93c1952d40fa5c95ad963f4d8344b61ef58558632402eca18e6c14127/gprof2dot-2015.12.1.tar.gz";
763 md5 = "e23bf4e2f94db032750c193384b4165b";
750 md5 = "e23bf4e2f94db032750c193384b4165b";
764 };
751 };
765 meta = {
752 meta = {
766 license = [ { fullName = "LGPL"; } ];
753 license = [ { fullName = "LGPL"; } ];
767 };
754 };
768 };
755 };
769 greenlet = super.buildPythonPackage {
756 greenlet = super.buildPythonPackage {
770 name = "greenlet-0.4.9";
757 name = "greenlet-0.4.9";
771 buildInputs = with self; [];
758 buildInputs = with self; [];
772 doCheck = false;
759 doCheck = false;
773 propagatedBuildInputs = with self; [];
760 propagatedBuildInputs = with self; [];
774 src = fetchurl {
761 src = fetchurl {
775 url = "https://pypi.python.org/packages/4e/3d/9d421539b74e33608b245092870156b2e171fb49f2b51390aa4641eecb4a/greenlet-0.4.9.zip";
762 url = "https://pypi.python.org/packages/4e/3d/9d421539b74e33608b245092870156b2e171fb49f2b51390aa4641eecb4a/greenlet-0.4.9.zip";
776 md5 = "c6659cdb2a5e591723e629d2eef22e82";
763 md5 = "c6659cdb2a5e591723e629d2eef22e82";
777 };
764 };
778 meta = {
765 meta = {
779 license = [ pkgs.lib.licenses.mit ];
766 license = [ pkgs.lib.licenses.mit ];
780 };
767 };
781 };
768 };
782 gunicorn = super.buildPythonPackage {
769 gunicorn = super.buildPythonPackage {
783 name = "gunicorn-19.6.0";
770 name = "gunicorn-19.6.0";
784 buildInputs = with self; [];
771 buildInputs = with self; [];
785 doCheck = false;
772 doCheck = false;
786 propagatedBuildInputs = with self; [];
773 propagatedBuildInputs = with self; [];
787 src = fetchurl {
774 src = fetchurl {
788 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
775 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
789 md5 = "338e5e8a83ea0f0625f768dba4597530";
776 md5 = "338e5e8a83ea0f0625f768dba4597530";
790 };
777 };
791 meta = {
778 meta = {
792 license = [ pkgs.lib.licenses.mit ];
779 license = [ pkgs.lib.licenses.mit ];
793 };
780 };
794 };
781 };
795 infrae.cache = super.buildPythonPackage {
782 infrae.cache = super.buildPythonPackage {
796 name = "infrae.cache-1.0.1";
783 name = "infrae.cache-1.0.1";
797 buildInputs = with self; [];
784 buildInputs = with self; [];
798 doCheck = false;
785 doCheck = false;
799 propagatedBuildInputs = with self; [Beaker repoze.lru];
786 propagatedBuildInputs = with self; [Beaker repoze.lru];
800 src = fetchurl {
787 src = fetchurl {
801 url = "https://pypi.python.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
788 url = "https://pypi.python.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
802 md5 = "b09076a766747e6ed2a755cc62088e32";
789 md5 = "b09076a766747e6ed2a755cc62088e32";
803 };
790 };
804 meta = {
791 meta = {
805 license = [ pkgs.lib.licenses.zpt21 ];
792 license = [ pkgs.lib.licenses.zpt21 ];
806 };
793 };
807 };
794 };
808 invoke = super.buildPythonPackage {
795 invoke = super.buildPythonPackage {
809 name = "invoke-0.13.0";
796 name = "invoke-0.13.0";
810 buildInputs = with self; [];
797 buildInputs = with self; [];
811 doCheck = false;
798 doCheck = false;
812 propagatedBuildInputs = with self; [];
799 propagatedBuildInputs = with self; [];
813 src = fetchurl {
800 src = fetchurl {
814 url = "https://pypi.python.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
801 url = "https://pypi.python.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
815 md5 = "c0d1ed4bfb34eaab551662d8cfee6540";
802 md5 = "c0d1ed4bfb34eaab551662d8cfee6540";
816 };
803 };
817 meta = {
804 meta = {
818 license = [ pkgs.lib.licenses.bsdOriginal ];
805 license = [ pkgs.lib.licenses.bsdOriginal ];
819 };
806 };
820 };
807 };
821 ipdb = super.buildPythonPackage {
808 ipdb = super.buildPythonPackage {
822 name = "ipdb-0.8";
809 name = "ipdb-0.8";
823 buildInputs = with self; [];
810 buildInputs = with self; [];
824 doCheck = false;
811 doCheck = false;
825 propagatedBuildInputs = with self; [ipython];
812 propagatedBuildInputs = with self; [ipython];
826 src = fetchurl {
813 src = fetchurl {
827 url = "https://pypi.python.org/packages/f0/25/d7dd430ced6cd8dc242a933c8682b5dbf32eb4011d82f87e34209e5ec845/ipdb-0.8.zip";
814 url = "https://pypi.python.org/packages/f0/25/d7dd430ced6cd8dc242a933c8682b5dbf32eb4011d82f87e34209e5ec845/ipdb-0.8.zip";
828 md5 = "96dca0712efa01aa5eaf6b22071dd3ed";
815 md5 = "96dca0712efa01aa5eaf6b22071dd3ed";
829 };
816 };
830 meta = {
817 meta = {
831 license = [ pkgs.lib.licenses.gpl1 ];
818 license = [ pkgs.lib.licenses.gpl1 ];
832 };
819 };
833 };
820 };
834 ipython = super.buildPythonPackage {
821 ipython = super.buildPythonPackage {
835 name = "ipython-3.1.0";
822 name = "ipython-3.1.0";
836 buildInputs = with self; [];
823 buildInputs = with self; [];
837 doCheck = false;
824 doCheck = false;
838 propagatedBuildInputs = with self; [];
825 propagatedBuildInputs = with self; [];
839 src = fetchurl {
826 src = fetchurl {
840 url = "https://pypi.python.org/packages/06/91/120c0835254c120af89f066afaabf81289bc2726c1fc3ca0555df6882f58/ipython-3.1.0.tar.gz";
827 url = "https://pypi.python.org/packages/06/91/120c0835254c120af89f066afaabf81289bc2726c1fc3ca0555df6882f58/ipython-3.1.0.tar.gz";
841 md5 = "a749d90c16068687b0ec45a27e72ef8f";
828 md5 = "a749d90c16068687b0ec45a27e72ef8f";
842 };
829 };
843 meta = {
830 meta = {
844 license = [ pkgs.lib.licenses.bsdOriginal ];
831 license = [ pkgs.lib.licenses.bsdOriginal ];
845 };
832 };
846 };
833 };
847 iso8601 = super.buildPythonPackage {
834 iso8601 = super.buildPythonPackage {
848 name = "iso8601-0.1.11";
835 name = "iso8601-0.1.11";
849 buildInputs = with self; [];
836 buildInputs = with self; [];
850 doCheck = false;
837 doCheck = false;
851 propagatedBuildInputs = with self; [];
838 propagatedBuildInputs = with self; [];
852 src = fetchurl {
839 src = fetchurl {
853 url = "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz";
840 url = "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz";
854 md5 = "b06d11cd14a64096f907086044f0fe38";
841 md5 = "b06d11cd14a64096f907086044f0fe38";
855 };
842 };
856 meta = {
843 meta = {
857 license = [ pkgs.lib.licenses.mit ];
844 license = [ pkgs.lib.licenses.mit ];
858 };
845 };
859 };
846 };
860 itsdangerous = super.buildPythonPackage {
847 itsdangerous = super.buildPythonPackage {
861 name = "itsdangerous-0.24";
848 name = "itsdangerous-0.24";
862 buildInputs = with self; [];
849 buildInputs = with self; [];
863 doCheck = false;
850 doCheck = false;
864 propagatedBuildInputs = with self; [];
851 propagatedBuildInputs = with self; [];
865 src = fetchurl {
852 src = fetchurl {
866 url = "https://pypi.python.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
853 url = "https://pypi.python.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
867 md5 = "a3d55aa79369aef5345c036a8a26307f";
854 md5 = "a3d55aa79369aef5345c036a8a26307f";
868 };
855 };
869 meta = {
856 meta = {
870 license = [ pkgs.lib.licenses.bsdOriginal ];
857 license = [ pkgs.lib.licenses.bsdOriginal ];
871 };
858 };
872 };
859 };
873 kombu = super.buildPythonPackage {
860 kombu = super.buildPythonPackage {
874 name = "kombu-1.5.1";
861 name = "kombu-1.5.1";
875 buildInputs = with self; [];
862 buildInputs = with self; [];
876 doCheck = false;
863 doCheck = false;
877 propagatedBuildInputs = with self; [anyjson amqplib];
864 propagatedBuildInputs = with self; [anyjson amqplib];
878 src = fetchurl {
865 src = fetchurl {
879 url = "https://pypi.python.org/packages/19/53/74bf2a624644b45f0850a638752514fc10a8e1cbd738f10804951a6df3f5/kombu-1.5.1.tar.gz";
866 url = "https://pypi.python.org/packages/19/53/74bf2a624644b45f0850a638752514fc10a8e1cbd738f10804951a6df3f5/kombu-1.5.1.tar.gz";
880 md5 = "50662f3c7e9395b3d0721fb75d100b63";
867 md5 = "50662f3c7e9395b3d0721fb75d100b63";
881 };
868 };
882 meta = {
869 meta = {
883 license = [ pkgs.lib.licenses.bsdOriginal ];
870 license = [ pkgs.lib.licenses.bsdOriginal ];
884 };
871 };
885 };
872 };
886 lxml = super.buildPythonPackage {
873 lxml = super.buildPythonPackage {
887 name = "lxml-3.4.4";
874 name = "lxml-3.4.4";
888 buildInputs = with self; [];
875 buildInputs = with self; [];
889 doCheck = false;
876 doCheck = false;
890 propagatedBuildInputs = with self; [];
877 propagatedBuildInputs = with self; [];
891 src = fetchurl {
878 src = fetchurl {
892 url = "https://pypi.python.org/packages/63/c7/4f2a2a4ad6c6fa99b14be6b3c1cece9142e2d915aa7c43c908677afc8fa4/lxml-3.4.4.tar.gz";
879 url = "https://pypi.python.org/packages/63/c7/4f2a2a4ad6c6fa99b14be6b3c1cece9142e2d915aa7c43c908677afc8fa4/lxml-3.4.4.tar.gz";
893 md5 = "a9a65972afc173ec7a39c585f4eea69c";
880 md5 = "a9a65972afc173ec7a39c585f4eea69c";
894 };
881 };
895 meta = {
882 meta = {
896 license = [ pkgs.lib.licenses.bsdOriginal ];
883 license = [ pkgs.lib.licenses.bsdOriginal ];
897 };
884 };
898 };
885 };
899 mccabe = super.buildPythonPackage {
886 mccabe = super.buildPythonPackage {
900 name = "mccabe-0.3";
887 name = "mccabe-0.3";
901 buildInputs = with self; [];
888 buildInputs = with self; [];
902 doCheck = false;
889 doCheck = false;
903 propagatedBuildInputs = with self; [];
890 propagatedBuildInputs = with self; [];
904 src = fetchurl {
891 src = fetchurl {
905 url = "https://pypi.python.org/packages/c9/2e/75231479e11a906b64ac43bad9d0bb534d00080b18bdca8db9da46e1faf7/mccabe-0.3.tar.gz";
892 url = "https://pypi.python.org/packages/c9/2e/75231479e11a906b64ac43bad9d0bb534d00080b18bdca8db9da46e1faf7/mccabe-0.3.tar.gz";
906 md5 = "81640948ff226f8c12b3277059489157";
893 md5 = "81640948ff226f8c12b3277059489157";
907 };
894 };
908 meta = {
895 meta = {
909 license = [ { fullName = "Expat license"; } pkgs.lib.licenses.mit ];
896 license = [ { fullName = "Expat license"; } pkgs.lib.licenses.mit ];
910 };
897 };
911 };
898 };
912 meld3 = super.buildPythonPackage {
899 meld3 = super.buildPythonPackage {
913 name = "meld3-1.0.2";
900 name = "meld3-1.0.2";
914 buildInputs = with self; [];
901 buildInputs = with self; [];
915 doCheck = false;
902 doCheck = false;
916 propagatedBuildInputs = with self; [];
903 propagatedBuildInputs = with self; [];
917 src = fetchurl {
904 src = fetchurl {
918 url = "https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
905 url = "https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
919 md5 = "3ccc78cd79cffd63a751ad7684c02c91";
906 md5 = "3ccc78cd79cffd63a751ad7684c02c91";
920 };
907 };
921 meta = {
908 meta = {
922 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
909 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
923 };
910 };
924 };
911 };
925 mock = super.buildPythonPackage {
912 mock = super.buildPythonPackage {
926 name = "mock-1.0.1";
913 name = "mock-1.0.1";
927 buildInputs = with self; [];
914 buildInputs = with self; [];
928 doCheck = false;
915 doCheck = false;
929 propagatedBuildInputs = with self; [];
916 propagatedBuildInputs = with self; [];
930 src = fetchurl {
917 src = fetchurl {
931 url = "https://pypi.python.org/packages/15/45/30273ee91feb60dabb8fbb2da7868520525f02cf910279b3047182feed80/mock-1.0.1.zip";
918 url = "https://pypi.python.org/packages/15/45/30273ee91feb60dabb8fbb2da7868520525f02cf910279b3047182feed80/mock-1.0.1.zip";
932 md5 = "869f08d003c289a97c1a6610faf5e913";
919 md5 = "869f08d003c289a97c1a6610faf5e913";
933 };
920 };
934 meta = {
921 meta = {
935 license = [ pkgs.lib.licenses.bsdOriginal ];
922 license = [ pkgs.lib.licenses.bsdOriginal ];
936 };
923 };
937 };
924 };
938 msgpack-python = super.buildPythonPackage {
925 msgpack-python = super.buildPythonPackage {
939 name = "msgpack-python-0.4.6";
926 name = "msgpack-python-0.4.6";
940 buildInputs = with self; [];
927 buildInputs = with self; [];
941 doCheck = false;
928 doCheck = false;
942 propagatedBuildInputs = with self; [];
929 propagatedBuildInputs = with self; [];
943 src = fetchurl {
930 src = fetchurl {
944 url = "https://pypi.python.org/packages/15/ce/ff2840885789ef8035f66cd506ea05bdb228340307d5e71a7b1e3f82224c/msgpack-python-0.4.6.tar.gz";
931 url = "https://pypi.python.org/packages/15/ce/ff2840885789ef8035f66cd506ea05bdb228340307d5e71a7b1e3f82224c/msgpack-python-0.4.6.tar.gz";
945 md5 = "8b317669314cf1bc881716cccdaccb30";
932 md5 = "8b317669314cf1bc881716cccdaccb30";
946 };
933 };
947 meta = {
934 meta = {
948 license = [ pkgs.lib.licenses.asl20 ];
935 license = [ pkgs.lib.licenses.asl20 ];
949 };
936 };
950 };
937 };
951 nose = super.buildPythonPackage {
938 nose = super.buildPythonPackage {
952 name = "nose-1.3.6";
939 name = "nose-1.3.6";
953 buildInputs = with self; [];
940 buildInputs = with self; [];
954 doCheck = false;
941 doCheck = false;
955 propagatedBuildInputs = with self; [];
942 propagatedBuildInputs = with self; [];
956 src = fetchurl {
943 src = fetchurl {
957 url = "https://pypi.python.org/packages/70/c7/469e68148d17a0d3db5ed49150242fd70a74a8147b8f3f8b87776e028d99/nose-1.3.6.tar.gz";
944 url = "https://pypi.python.org/packages/70/c7/469e68148d17a0d3db5ed49150242fd70a74a8147b8f3f8b87776e028d99/nose-1.3.6.tar.gz";
958 md5 = "0ca546d81ca8309080fc80cb389e7a16";
945 md5 = "0ca546d81ca8309080fc80cb389e7a16";
959 };
946 };
960 meta = {
947 meta = {
961 license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "GNU LGPL"; } ];
948 license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "GNU LGPL"; } ];
962 };
949 };
963 };
950 };
964 objgraph = super.buildPythonPackage {
951 objgraph = super.buildPythonPackage {
965 name = "objgraph-2.0.0";
952 name = "objgraph-2.0.0";
966 buildInputs = with self; [];
953 buildInputs = with self; [];
967 doCheck = false;
954 doCheck = false;
968 propagatedBuildInputs = with self; [];
955 propagatedBuildInputs = with self; [];
969 src = fetchurl {
956 src = fetchurl {
970 url = "https://pypi.python.org/packages/d7/33/ace750b59247496ed769b170586c5def7202683f3d98e737b75b767ff29e/objgraph-2.0.0.tar.gz";
957 url = "https://pypi.python.org/packages/d7/33/ace750b59247496ed769b170586c5def7202683f3d98e737b75b767ff29e/objgraph-2.0.0.tar.gz";
971 md5 = "25b0d5e5adc74aa63ead15699614159c";
958 md5 = "25b0d5e5adc74aa63ead15699614159c";
972 };
959 };
973 meta = {
960 meta = {
974 license = [ pkgs.lib.licenses.mit ];
961 license = [ pkgs.lib.licenses.mit ];
975 };
962 };
976 };
963 };
977 packaging = super.buildPythonPackage {
964 packaging = super.buildPythonPackage {
978 name = "packaging-15.2";
965 name = "packaging-15.2";
979 buildInputs = with self; [];
966 buildInputs = with self; [];
980 doCheck = false;
967 doCheck = false;
981 propagatedBuildInputs = with self; [];
968 propagatedBuildInputs = with self; [];
982 src = fetchurl {
969 src = fetchurl {
983 url = "https://pypi.python.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
970 url = "https://pypi.python.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
984 md5 = "c16093476f6ced42128bf610e5db3784";
971 md5 = "c16093476f6ced42128bf610e5db3784";
985 };
972 };
986 meta = {
973 meta = {
987 license = [ pkgs.lib.licenses.asl20 ];
974 license = [ pkgs.lib.licenses.asl20 ];
988 };
975 };
989 };
976 };
990 paramiko = super.buildPythonPackage {
977 paramiko = super.buildPythonPackage {
991 name = "paramiko-1.15.1";
978 name = "paramiko-1.15.1";
992 buildInputs = with self; [];
979 buildInputs = with self; [];
993 doCheck = false;
980 doCheck = false;
994 propagatedBuildInputs = with self; [pycrypto ecdsa];
981 propagatedBuildInputs = with self; [pycrypto ecdsa];
995 src = fetchurl {
982 src = fetchurl {
996 url = "https://pypi.python.org/packages/04/2b/a22d2a560c1951abbbf95a0628e245945565f70dc082d9e784666887222c/paramiko-1.15.1.tar.gz";
983 url = "https://pypi.python.org/packages/04/2b/a22d2a560c1951abbbf95a0628e245945565f70dc082d9e784666887222c/paramiko-1.15.1.tar.gz";
997 md5 = "48c274c3f9b1282932567b21f6acf3b5";
984 md5 = "48c274c3f9b1282932567b21f6acf3b5";
998 };
985 };
999 meta = {
986 meta = {
1000 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
987 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1001 };
988 };
1002 };
989 };
1003 pep8 = super.buildPythonPackage {
990 pep8 = super.buildPythonPackage {
1004 name = "pep8-1.5.7";
991 name = "pep8-1.5.7";
1005 buildInputs = with self; [];
992 buildInputs = with self; [];
1006 doCheck = false;
993 doCheck = false;
1007 propagatedBuildInputs = with self; [];
994 propagatedBuildInputs = with self; [];
1008 src = fetchurl {
995 src = fetchurl {
1009 url = "https://pypi.python.org/packages/8b/de/259f5e735897ada1683489dd514b2a1c91aaa74e5e6b68f80acf128a6368/pep8-1.5.7.tar.gz";
996 url = "https://pypi.python.org/packages/8b/de/259f5e735897ada1683489dd514b2a1c91aaa74e5e6b68f80acf128a6368/pep8-1.5.7.tar.gz";
1010 md5 = "f6adbdd69365ecca20513c709f9b7c93";
997 md5 = "f6adbdd69365ecca20513c709f9b7c93";
1011 };
998 };
1012 meta = {
999 meta = {
1013 license = [ { fullName = "Expat license"; } pkgs.lib.licenses.mit ];
1000 license = [ { fullName = "Expat license"; } pkgs.lib.licenses.mit ];
1014 };
1001 };
1015 };
1002 };
1016 peppercorn = super.buildPythonPackage {
1003 peppercorn = super.buildPythonPackage {
1017 name = "peppercorn-0.5";
1004 name = "peppercorn-0.5";
1018 buildInputs = with self; [];
1005 buildInputs = with self; [];
1019 doCheck = false;
1006 doCheck = false;
1020 propagatedBuildInputs = with self; [];
1007 propagatedBuildInputs = with self; [];
1021 src = fetchurl {
1008 src = fetchurl {
1022 url = "https://pypi.python.org/packages/45/ec/a62ec317d1324a01567c5221b420742f094f05ee48097e5157d32be3755c/peppercorn-0.5.tar.gz";
1009 url = "https://pypi.python.org/packages/45/ec/a62ec317d1324a01567c5221b420742f094f05ee48097e5157d32be3755c/peppercorn-0.5.tar.gz";
1023 md5 = "f08efbca5790019ab45d76b7244abd40";
1010 md5 = "f08efbca5790019ab45d76b7244abd40";
1024 };
1011 };
1025 meta = {
1012 meta = {
1026 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1013 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1027 };
1014 };
1028 };
1015 };
1029 psutil = super.buildPythonPackage {
1016 psutil = super.buildPythonPackage {
1030 name = "psutil-2.2.1";
1017 name = "psutil-2.2.1";
1031 buildInputs = with self; [];
1018 buildInputs = with self; [];
1032 doCheck = false;
1019 doCheck = false;
1033 propagatedBuildInputs = with self; [];
1020 propagatedBuildInputs = with self; [];
1034 src = fetchurl {
1021 src = fetchurl {
1035 url = "https://pypi.python.org/packages/df/47/ee54ef14dd40f8ce831a7581001a5096494dc99fe71586260ca6b531fe86/psutil-2.2.1.tar.gz";
1022 url = "https://pypi.python.org/packages/df/47/ee54ef14dd40f8ce831a7581001a5096494dc99fe71586260ca6b531fe86/psutil-2.2.1.tar.gz";
1036 md5 = "1a2b58cd9e3a53528bb6148f0c4d5244";
1023 md5 = "1a2b58cd9e3a53528bb6148f0c4d5244";
1037 };
1024 };
1038 meta = {
1025 meta = {
1039 license = [ pkgs.lib.licenses.bsdOriginal ];
1026 license = [ pkgs.lib.licenses.bsdOriginal ];
1040 };
1027 };
1041 };
1028 };
1042 psycopg2 = super.buildPythonPackage {
1029 psycopg2 = super.buildPythonPackage {
1043 name = "psycopg2-2.6.1";
1030 name = "psycopg2-2.6.1";
1044 buildInputs = with self; [];
1031 buildInputs = with self; [];
1045 doCheck = false;
1032 doCheck = false;
1046 propagatedBuildInputs = with self; [];
1033 propagatedBuildInputs = with self; [];
1047 src = fetchurl {
1034 src = fetchurl {
1048 url = "https://pypi.python.org/packages/86/fd/cc8315be63a41fe000cce20482a917e874cdc1151e62cb0141f5e55f711e/psycopg2-2.6.1.tar.gz";
1035 url = "https://pypi.python.org/packages/86/fd/cc8315be63a41fe000cce20482a917e874cdc1151e62cb0141f5e55f711e/psycopg2-2.6.1.tar.gz";
1049 md5 = "842b44f8c95517ed5b792081a2370da1";
1036 md5 = "842b44f8c95517ed5b792081a2370da1";
1050 };
1037 };
1051 meta = {
1038 meta = {
1052 license = [ pkgs.lib.licenses.zpt21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ];
1039 license = [ pkgs.lib.licenses.zpt21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ];
1053 };
1040 };
1054 };
1041 };
1055 py = super.buildPythonPackage {
1042 py = super.buildPythonPackage {
1056 name = "py-1.4.29";
1043 name = "py-1.4.29";
1057 buildInputs = with self; [];
1044 buildInputs = with self; [];
1058 doCheck = false;
1045 doCheck = false;
1059 propagatedBuildInputs = with self; [];
1046 propagatedBuildInputs = with self; [];
1060 src = fetchurl {
1047 src = fetchurl {
1061 url = "https://pypi.python.org/packages/2a/bc/a1a4a332ac10069b8e5e25136a35e08a03f01fd6ab03d819889d79a1fd65/py-1.4.29.tar.gz";
1048 url = "https://pypi.python.org/packages/2a/bc/a1a4a332ac10069b8e5e25136a35e08a03f01fd6ab03d819889d79a1fd65/py-1.4.29.tar.gz";
1062 md5 = "c28e0accba523a29b35a48bb703fb96c";
1049 md5 = "c28e0accba523a29b35a48bb703fb96c";
1063 };
1050 };
1064 meta = {
1051 meta = {
1065 license = [ pkgs.lib.licenses.mit ];
1052 license = [ pkgs.lib.licenses.mit ];
1066 };
1053 };
1067 };
1054 };
1068 py-bcrypt = super.buildPythonPackage {
1055 py-bcrypt = super.buildPythonPackage {
1069 name = "py-bcrypt-0.4";
1056 name = "py-bcrypt-0.4";
1070 buildInputs = with self; [];
1057 buildInputs = with self; [];
1071 doCheck = false;
1058 doCheck = false;
1072 propagatedBuildInputs = with self; [];
1059 propagatedBuildInputs = with self; [];
1073 src = fetchurl {
1060 src = fetchurl {
1074 url = "https://pypi.python.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1061 url = "https://pypi.python.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1075 md5 = "dd8b367d6b716a2ea2e72392525f4e36";
1062 md5 = "dd8b367d6b716a2ea2e72392525f4e36";
1076 };
1063 };
1077 meta = {
1064 meta = {
1078 license = [ pkgs.lib.licenses.bsdOriginal ];
1065 license = [ pkgs.lib.licenses.bsdOriginal ];
1079 };
1066 };
1080 };
1067 };
1081 py-gfm = super.buildPythonPackage {
1068 py-gfm = super.buildPythonPackage {
1082 name = "py-gfm-0.1.3";
1069 name = "py-gfm-0.1.3";
1083 buildInputs = with self; [];
1070 buildInputs = with self; [];
1084 doCheck = false;
1071 doCheck = false;
1085 propagatedBuildInputs = with self; [setuptools Markdown];
1072 propagatedBuildInputs = with self; [setuptools Markdown];
1086 src = fetchurl {
1073 src = fetchurl {
1087 url = "https://pypi.python.org/packages/12/e4/6b3d8678da04f97d7490d8264d8de51c2dc9fb91209ccee9c515c95e14c5/py-gfm-0.1.3.tar.gz";
1074 url = "https://pypi.python.org/packages/12/e4/6b3d8678da04f97d7490d8264d8de51c2dc9fb91209ccee9c515c95e14c5/py-gfm-0.1.3.tar.gz";
1088 md5 = "e588d9e69640a241b97e2c59c22527a6";
1075 md5 = "e588d9e69640a241b97e2c59c22527a6";
1089 };
1076 };
1090 meta = {
1077 meta = {
1091 license = [ pkgs.lib.licenses.bsdOriginal ];
1078 license = [ pkgs.lib.licenses.bsdOriginal ];
1092 };
1079 };
1093 };
1080 };
1094 pycrypto = super.buildPythonPackage {
1081 pycrypto = super.buildPythonPackage {
1095 name = "pycrypto-2.6.1";
1082 name = "pycrypto-2.6.1";
1096 buildInputs = with self; [];
1083 buildInputs = with self; [];
1097 doCheck = false;
1084 doCheck = false;
1098 propagatedBuildInputs = with self; [];
1085 propagatedBuildInputs = with self; [];
1099 src = fetchurl {
1086 src = fetchurl {
1100 url = "https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1087 url = "https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1101 md5 = "55a61a054aa66812daf5161a0d5d7eda";
1088 md5 = "55a61a054aa66812daf5161a0d5d7eda";
1102 };
1089 };
1103 meta = {
1090 meta = {
1104 license = [ pkgs.lib.licenses.publicDomain ];
1091 license = [ pkgs.lib.licenses.publicDomain ];
1105 };
1092 };
1106 };
1093 };
1107 pycurl = super.buildPythonPackage {
1094 pycurl = super.buildPythonPackage {
1108 name = "pycurl-7.19.5";
1095 name = "pycurl-7.19.5";
1109 buildInputs = with self; [];
1096 buildInputs = with self; [];
1110 doCheck = false;
1097 doCheck = false;
1111 propagatedBuildInputs = with self; [];
1098 propagatedBuildInputs = with self; [];
1112 src = fetchurl {
1099 src = fetchurl {
1113 url = "https://pypi.python.org/packages/6c/48/13bad289ef6f4869b1d8fc11ae54de8cfb3cc4a2eb9f7419c506f763be46/pycurl-7.19.5.tar.gz";
1100 url = "https://pypi.python.org/packages/6c/48/13bad289ef6f4869b1d8fc11ae54de8cfb3cc4a2eb9f7419c506f763be46/pycurl-7.19.5.tar.gz";
1114 md5 = "47b4eac84118e2606658122104e62072";
1101 md5 = "47b4eac84118e2606658122104e62072";
1115 };
1102 };
1116 meta = {
1103 meta = {
1117 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1104 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1118 };
1105 };
1119 };
1106 };
1120 pyflakes = super.buildPythonPackage {
1107 pyflakes = super.buildPythonPackage {
1121 name = "pyflakes-0.8.1";
1108 name = "pyflakes-0.8.1";
1122 buildInputs = with self; [];
1109 buildInputs = with self; [];
1123 doCheck = false;
1110 doCheck = false;
1124 propagatedBuildInputs = with self; [];
1111 propagatedBuildInputs = with self; [];
1125 src = fetchurl {
1112 src = fetchurl {
1126 url = "https://pypi.python.org/packages/75/22/a90ec0252f4f87f3ffb6336504de71fe16a49d69c4538dae2f12b9360a38/pyflakes-0.8.1.tar.gz";
1113 url = "https://pypi.python.org/packages/75/22/a90ec0252f4f87f3ffb6336504de71fe16a49d69c4538dae2f12b9360a38/pyflakes-0.8.1.tar.gz";
1127 md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
1114 md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
1128 };
1115 };
1129 meta = {
1116 meta = {
1130 license = [ pkgs.lib.licenses.mit ];
1117 license = [ pkgs.lib.licenses.mit ];
1131 };
1118 };
1132 };
1119 };
1133 pyparsing = super.buildPythonPackage {
1120 pyparsing = super.buildPythonPackage {
1134 name = "pyparsing-1.5.7";
1121 name = "pyparsing-1.5.7";
1135 buildInputs = with self; [];
1122 buildInputs = with self; [];
1136 doCheck = false;
1123 doCheck = false;
1137 propagatedBuildInputs = with self; [];
1124 propagatedBuildInputs = with self; [];
1138 src = fetchurl {
1125 src = fetchurl {
1139 url = "https://pypi.python.org/packages/2e/26/e8fb5b4256a5f5036be7ce115ef8db8d06bc537becfbdc46c6af008314ee/pyparsing-1.5.7.zip";
1126 url = "https://pypi.python.org/packages/2e/26/e8fb5b4256a5f5036be7ce115ef8db8d06bc537becfbdc46c6af008314ee/pyparsing-1.5.7.zip";
1140 md5 = "b86854857a368d6ccb4d5b6e76d0637f";
1127 md5 = "b86854857a368d6ccb4d5b6e76d0637f";
1141 };
1128 };
1142 meta = {
1129 meta = {
1143 license = [ pkgs.lib.licenses.mit ];
1130 license = [ pkgs.lib.licenses.mit ];
1144 };
1131 };
1145 };
1132 };
1146 pyramid = super.buildPythonPackage {
1133 pyramid = super.buildPythonPackage {
1147 name = "pyramid-1.6.1";
1134 name = "pyramid-1.6.1";
1148 buildInputs = with self; [];
1135 buildInputs = with self; [];
1149 doCheck = false;
1136 doCheck = false;
1150 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy];
1137 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy];
1151 src = fetchurl {
1138 src = fetchurl {
1152 url = "https://pypi.python.org/packages/30/b3/fcc4a2a4800cbf21989e00454b5828cf1f7fe35c63e0810b350e56d4c475/pyramid-1.6.1.tar.gz";
1139 url = "https://pypi.python.org/packages/30/b3/fcc4a2a4800cbf21989e00454b5828cf1f7fe35c63e0810b350e56d4c475/pyramid-1.6.1.tar.gz";
1153 md5 = "b18688ff3cc33efdbb098a35b45dd122";
1140 md5 = "b18688ff3cc33efdbb098a35b45dd122";
1154 };
1141 };
1155 meta = {
1142 meta = {
1156 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1143 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1157 };
1144 };
1158 };
1145 };
1159 pyramid-beaker = super.buildPythonPackage {
1146 pyramid-beaker = super.buildPythonPackage {
1160 name = "pyramid-beaker-0.8";
1147 name = "pyramid-beaker-0.8";
1161 buildInputs = with self; [];
1148 buildInputs = with self; [];
1162 doCheck = false;
1149 doCheck = false;
1163 propagatedBuildInputs = with self; [pyramid Beaker];
1150 propagatedBuildInputs = with self; [pyramid Beaker];
1164 src = fetchurl {
1151 src = fetchurl {
1165 url = "https://pypi.python.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1152 url = "https://pypi.python.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1166 md5 = "22f14be31b06549f80890e2c63a93834";
1153 md5 = "22f14be31b06549f80890e2c63a93834";
1167 };
1154 };
1168 meta = {
1155 meta = {
1169 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1156 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1170 };
1157 };
1171 };
1158 };
1172 pyramid-debugtoolbar = super.buildPythonPackage {
1159 pyramid-debugtoolbar = super.buildPythonPackage {
1173 name = "pyramid-debugtoolbar-2.4.2";
1160 name = "pyramid-debugtoolbar-2.4.2";
1174 buildInputs = with self; [];
1161 buildInputs = with self; [];
1175 doCheck = false;
1162 doCheck = false;
1176 propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments];
1163 propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments];
1177 src = fetchurl {
1164 src = fetchurl {
1178 url = "https://pypi.python.org/packages/89/00/ed5426ee41ed747ba3ffd30e8230841a6878286ea67d480b1444d24f06a2/pyramid_debugtoolbar-2.4.2.tar.gz";
1165 url = "https://pypi.python.org/packages/89/00/ed5426ee41ed747ba3ffd30e8230841a6878286ea67d480b1444d24f06a2/pyramid_debugtoolbar-2.4.2.tar.gz";
1179 md5 = "073ea67086cc4bd5decc3a000853642d";
1166 md5 = "073ea67086cc4bd5decc3a000853642d";
1180 };
1167 };
1181 meta = {
1168 meta = {
1182 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1169 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1183 };
1170 };
1184 };
1171 };
1185 pyramid-jinja2 = super.buildPythonPackage {
1172 pyramid-jinja2 = super.buildPythonPackage {
1186 name = "pyramid-jinja2-2.5";
1173 name = "pyramid-jinja2-2.5";
1187 buildInputs = with self; [];
1174 buildInputs = with self; [];
1188 doCheck = false;
1175 doCheck = false;
1189 propagatedBuildInputs = with self; [pyramid zope.deprecation Jinja2 MarkupSafe];
1176 propagatedBuildInputs = with self; [pyramid zope.deprecation Jinja2 MarkupSafe];
1190 src = fetchurl {
1177 src = fetchurl {
1191 url = "https://pypi.python.org/packages/a1/80/595e26ffab7deba7208676b6936b7e5a721875710f982e59899013cae1ed/pyramid_jinja2-2.5.tar.gz";
1178 url = "https://pypi.python.org/packages/a1/80/595e26ffab7deba7208676b6936b7e5a721875710f982e59899013cae1ed/pyramid_jinja2-2.5.tar.gz";
1192 md5 = "07cb6547204ac5e6f0b22a954ccee928";
1179 md5 = "07cb6547204ac5e6f0b22a954ccee928";
1193 };
1180 };
1194 meta = {
1181 meta = {
1195 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1182 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1196 };
1183 };
1197 };
1184 };
1198 pyramid-mako = super.buildPythonPackage {
1185 pyramid-mako = super.buildPythonPackage {
1199 name = "pyramid-mako-1.0.2";
1186 name = "pyramid-mako-1.0.2";
1200 buildInputs = with self; [];
1187 buildInputs = with self; [];
1201 doCheck = false;
1188 doCheck = false;
1202 propagatedBuildInputs = with self; [pyramid Mako];
1189 propagatedBuildInputs = with self; [pyramid Mako];
1203 src = fetchurl {
1190 src = fetchurl {
1204 url = "https://pypi.python.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1191 url = "https://pypi.python.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1205 md5 = "ee25343a97eb76bd90abdc2a774eb48a";
1192 md5 = "ee25343a97eb76bd90abdc2a774eb48a";
1206 };
1193 };
1207 meta = {
1194 meta = {
1208 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1195 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1209 };
1196 };
1210 };
1197 };
1211 pysqlite = super.buildPythonPackage {
1198 pysqlite = super.buildPythonPackage {
1212 name = "pysqlite-2.6.3";
1199 name = "pysqlite-2.6.3";
1213 buildInputs = with self; [];
1200 buildInputs = with self; [];
1214 doCheck = false;
1201 doCheck = false;
1215 propagatedBuildInputs = with self; [];
1202 propagatedBuildInputs = with self; [];
1216 src = fetchurl {
1203 src = fetchurl {
1217 url = "https://pypi.python.org/packages/5c/a6/1c429cd4c8069cf4bfbd0eb4d592b3f4042155a8202df83d7e9b93aa3dc2/pysqlite-2.6.3.tar.gz";
1204 url = "https://pypi.python.org/packages/5c/a6/1c429cd4c8069cf4bfbd0eb4d592b3f4042155a8202df83d7e9b93aa3dc2/pysqlite-2.6.3.tar.gz";
1218 md5 = "7ff1cedee74646b50117acff87aa1cfa";
1205 md5 = "7ff1cedee74646b50117acff87aa1cfa";
1219 };
1206 };
1220 meta = {
1207 meta = {
1221 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1208 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1222 };
1209 };
1223 };
1210 };
1224 pytest = super.buildPythonPackage {
1211 pytest = super.buildPythonPackage {
1225 name = "pytest-2.8.5";
1212 name = "pytest-2.8.5";
1226 buildInputs = with self; [];
1213 buildInputs = with self; [];
1227 doCheck = false;
1214 doCheck = false;
1228 propagatedBuildInputs = with self; [py];
1215 propagatedBuildInputs = with self; [py];
1229 src = fetchurl {
1216 src = fetchurl {
1230 url = "https://pypi.python.org/packages/b1/3d/d7ea9b0c51e0cacded856e49859f0a13452747491e842c236bbab3714afe/pytest-2.8.5.zip";
1217 url = "https://pypi.python.org/packages/b1/3d/d7ea9b0c51e0cacded856e49859f0a13452747491e842c236bbab3714afe/pytest-2.8.5.zip";
1231 md5 = "8493b06f700862f1294298d6c1b715a9";
1218 md5 = "8493b06f700862f1294298d6c1b715a9";
1232 };
1219 };
1233 meta = {
1220 meta = {
1234 license = [ pkgs.lib.licenses.mit ];
1221 license = [ pkgs.lib.licenses.mit ];
1235 };
1222 };
1236 };
1223 };
1237 pytest-catchlog = super.buildPythonPackage {
1224 pytest-catchlog = super.buildPythonPackage {
1238 name = "pytest-catchlog-1.2.2";
1225 name = "pytest-catchlog-1.2.2";
1239 buildInputs = with self; [];
1226 buildInputs = with self; [];
1240 doCheck = false;
1227 doCheck = false;
1241 propagatedBuildInputs = with self; [py pytest];
1228 propagatedBuildInputs = with self; [py pytest];
1242 src = fetchurl {
1229 src = fetchurl {
1243 url = "https://pypi.python.org/packages/f2/2b/2faccdb1a978fab9dd0bf31cca9f6847fbe9184a0bdcc3011ac41dd44191/pytest-catchlog-1.2.2.zip";
1230 url = "https://pypi.python.org/packages/f2/2b/2faccdb1a978fab9dd0bf31cca9f6847fbe9184a0bdcc3011ac41dd44191/pytest-catchlog-1.2.2.zip";
1244 md5 = "09d890c54c7456c818102b7ff8c182c8";
1231 md5 = "09d890c54c7456c818102b7ff8c182c8";
1245 };
1232 };
1246 meta = {
1233 meta = {
1247 license = [ pkgs.lib.licenses.mit ];
1234 license = [ pkgs.lib.licenses.mit ];
1248 };
1235 };
1249 };
1236 };
1250 pytest-cov = super.buildPythonPackage {
1237 pytest-cov = super.buildPythonPackage {
1251 name = "pytest-cov-1.8.1";
1238 name = "pytest-cov-1.8.1";
1252 buildInputs = with self; [];
1239 buildInputs = with self; [];
1253 doCheck = false;
1240 doCheck = false;
1254 propagatedBuildInputs = with self; [py pytest coverage cov-core];
1241 propagatedBuildInputs = with self; [py pytest coverage cov-core];
1255 src = fetchurl {
1242 src = fetchurl {
1256 url = "https://pypi.python.org/packages/11/4b/b04646e97f1721878eb21e9f779102d84dd044d324382263b1770a3e4838/pytest-cov-1.8.1.tar.gz";
1243 url = "https://pypi.python.org/packages/11/4b/b04646e97f1721878eb21e9f779102d84dd044d324382263b1770a3e4838/pytest-cov-1.8.1.tar.gz";
1257 md5 = "76c778afa2494088270348be42d759fc";
1244 md5 = "76c778afa2494088270348be42d759fc";
1258 };
1245 };
1259 meta = {
1246 meta = {
1260 license = [ pkgs.lib.licenses.mit ];
1247 license = [ pkgs.lib.licenses.mit ];
1261 };
1248 };
1262 };
1249 };
1263 pytest-profiling = super.buildPythonPackage {
1250 pytest-profiling = super.buildPythonPackage {
1264 name = "pytest-profiling-1.0.1";
1251 name = "pytest-profiling-1.0.1";
1265 buildInputs = with self; [];
1252 buildInputs = with self; [];
1266 doCheck = false;
1253 doCheck = false;
1267 propagatedBuildInputs = with self; [six pytest gprof2dot];
1254 propagatedBuildInputs = with self; [six pytest gprof2dot];
1268 src = fetchurl {
1255 src = fetchurl {
1269 url = "https://pypi.python.org/packages/d8/67/8ffab73406e22870e07fa4dc8dce1d7689b26dba8efd00161c9b6fc01ec0/pytest-profiling-1.0.1.tar.gz";
1256 url = "https://pypi.python.org/packages/d8/67/8ffab73406e22870e07fa4dc8dce1d7689b26dba8efd00161c9b6fc01ec0/pytest-profiling-1.0.1.tar.gz";
1270 md5 = "354404eb5b3fd4dc5eb7fffbb3d9b68b";
1257 md5 = "354404eb5b3fd4dc5eb7fffbb3d9b68b";
1271 };
1258 };
1272 meta = {
1259 meta = {
1273 license = [ pkgs.lib.licenses.mit ];
1260 license = [ pkgs.lib.licenses.mit ];
1274 };
1261 };
1275 };
1262 };
1276 pytest-runner = super.buildPythonPackage {
1263 pytest-runner = super.buildPythonPackage {
1277 name = "pytest-runner-2.7.1";
1264 name = "pytest-runner-2.7.1";
1278 buildInputs = with self; [];
1265 buildInputs = with self; [];
1279 doCheck = false;
1266 doCheck = false;
1280 propagatedBuildInputs = with self; [];
1267 propagatedBuildInputs = with self; [];
1281 src = fetchurl {
1268 src = fetchurl {
1282 url = "https://pypi.python.org/packages/99/6b/c4ff4418d3424d4475b7af60724fd4a5cdd91ed8e489dc9443281f0052bc/pytest-runner-2.7.1.tar.gz";
1269 url = "https://pypi.python.org/packages/99/6b/c4ff4418d3424d4475b7af60724fd4a5cdd91ed8e489dc9443281f0052bc/pytest-runner-2.7.1.tar.gz";
1283 md5 = "e56f0bc8d79a6bd91772b44ef4215c7e";
1270 md5 = "e56f0bc8d79a6bd91772b44ef4215c7e";
1284 };
1271 };
1285 meta = {
1272 meta = {
1286 license = [ pkgs.lib.licenses.mit ];
1273 license = [ pkgs.lib.licenses.mit ];
1287 };
1274 };
1288 };
1275 };
1289 pytest-timeout = super.buildPythonPackage {
1276 pytest-timeout = super.buildPythonPackage {
1290 name = "pytest-timeout-0.4";
1277 name = "pytest-timeout-0.4";
1291 buildInputs = with self; [];
1278 buildInputs = with self; [];
1292 doCheck = false;
1279 doCheck = false;
1293 propagatedBuildInputs = with self; [pytest];
1280 propagatedBuildInputs = with self; [pytest];
1294 src = fetchurl {
1281 src = fetchurl {
1295 url = "https://pypi.python.org/packages/24/48/5f6bd4b8026a26e1dd427243d560a29a0f1b24a5c7cffca4bf049a7bb65b/pytest-timeout-0.4.tar.gz";
1282 url = "https://pypi.python.org/packages/24/48/5f6bd4b8026a26e1dd427243d560a29a0f1b24a5c7cffca4bf049a7bb65b/pytest-timeout-0.4.tar.gz";
1296 md5 = "03b28aff69cbbfb959ed35ade5fde262";
1283 md5 = "03b28aff69cbbfb959ed35ade5fde262";
1297 };
1284 };
1298 meta = {
1285 meta = {
1299 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1286 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1300 };
1287 };
1301 };
1288 };
1302 python-dateutil = super.buildPythonPackage {
1289 python-dateutil = super.buildPythonPackage {
1303 name = "python-dateutil-1.5";
1290 name = "python-dateutil-1.5";
1304 buildInputs = with self; [];
1291 buildInputs = with self; [];
1305 doCheck = false;
1292 doCheck = false;
1306 propagatedBuildInputs = with self; [];
1293 propagatedBuildInputs = with self; [];
1307 src = fetchurl {
1294 src = fetchurl {
1308 url = "https://pypi.python.org/packages/b4/7c/df59c89a753eb33c7c44e1dd42de0e9bc2ccdd5a4d576e0bfad97cc280cb/python-dateutil-1.5.tar.gz";
1295 url = "https://pypi.python.org/packages/b4/7c/df59c89a753eb33c7c44e1dd42de0e9bc2ccdd5a4d576e0bfad97cc280cb/python-dateutil-1.5.tar.gz";
1309 md5 = "0dcb1de5e5cad69490a3b6ab63f0cfa5";
1296 md5 = "0dcb1de5e5cad69490a3b6ab63f0cfa5";
1310 };
1297 };
1311 meta = {
1298 meta = {
1312 license = [ pkgs.lib.licenses.psfl ];
1299 license = [ pkgs.lib.licenses.psfl ];
1313 };
1300 };
1314 };
1301 };
1315 python-editor = super.buildPythonPackage {
1302 python-editor = super.buildPythonPackage {
1316 name = "python-editor-1.0.1";
1303 name = "python-editor-1.0.1";
1317 buildInputs = with self; [];
1304 buildInputs = with self; [];
1318 doCheck = false;
1305 doCheck = false;
1319 propagatedBuildInputs = with self; [];
1306 propagatedBuildInputs = with self; [];
1320 src = fetchurl {
1307 src = fetchurl {
1321 url = "https://pypi.python.org/packages/2b/c0/df7b87d5cf016f82eab3b05cd35f53287c1178ad8c42bfb6fa61b89b22f6/python-editor-1.0.1.tar.gz";
1308 url = "https://pypi.python.org/packages/2b/c0/df7b87d5cf016f82eab3b05cd35f53287c1178ad8c42bfb6fa61b89b22f6/python-editor-1.0.1.tar.gz";
1322 md5 = "e1fa63535b40e022fa4fd646fd8b511a";
1309 md5 = "e1fa63535b40e022fa4fd646fd8b511a";
1323 };
1310 };
1324 meta = {
1311 meta = {
1325 license = [ pkgs.lib.licenses.asl20 ];
1312 license = [ pkgs.lib.licenses.asl20 ];
1326 };
1313 };
1327 };
1314 };
1328 python-ldap = super.buildPythonPackage {
1315 python-ldap = super.buildPythonPackage {
1329 name = "python-ldap-2.4.19";
1316 name = "python-ldap-2.4.19";
1330 buildInputs = with self; [];
1317 buildInputs = with self; [];
1331 doCheck = false;
1318 doCheck = false;
1332 propagatedBuildInputs = with self; [setuptools];
1319 propagatedBuildInputs = with self; [setuptools];
1333 src = fetchurl {
1320 src = fetchurl {
1334 url = "https://pypi.python.org/packages/42/81/1b64838c82e64f14d4e246ff00b52e650a35c012551b891ada2b85d40737/python-ldap-2.4.19.tar.gz";
1321 url = "https://pypi.python.org/packages/42/81/1b64838c82e64f14d4e246ff00b52e650a35c012551b891ada2b85d40737/python-ldap-2.4.19.tar.gz";
1335 md5 = "b941bf31d09739492aa19ef679e94ae3";
1322 md5 = "b941bf31d09739492aa19ef679e94ae3";
1336 };
1323 };
1337 meta = {
1324 meta = {
1338 license = [ pkgs.lib.licenses.psfl ];
1325 license = [ pkgs.lib.licenses.psfl ];
1339 };
1326 };
1340 };
1327 };
1341 python-memcached = super.buildPythonPackage {
1328 python-memcached = super.buildPythonPackage {
1342 name = "python-memcached-1.57";
1329 name = "python-memcached-1.57";
1343 buildInputs = with self; [];
1330 buildInputs = with self; [];
1344 doCheck = false;
1331 doCheck = false;
1345 propagatedBuildInputs = with self; [six];
1332 propagatedBuildInputs = with self; [six];
1346 src = fetchurl {
1333 src = fetchurl {
1347 url = "https://pypi.python.org/packages/52/9d/eebc0dcbc5c7c66840ad207dfc1baa376dadb74912484bff73819cce01e6/python-memcached-1.57.tar.gz";
1334 url = "https://pypi.python.org/packages/52/9d/eebc0dcbc5c7c66840ad207dfc1baa376dadb74912484bff73819cce01e6/python-memcached-1.57.tar.gz";
1348 md5 = "de21f64b42b2d961f3d4ad7beb5468a1";
1335 md5 = "de21f64b42b2d961f3d4ad7beb5468a1";
1349 };
1336 };
1350 meta = {
1337 meta = {
1351 license = [ pkgs.lib.licenses.psfl ];
1338 license = [ pkgs.lib.licenses.psfl ];
1352 };
1339 };
1353 };
1340 };
1354 python-pam = super.buildPythonPackage {
1341 python-pam = super.buildPythonPackage {
1355 name = "python-pam-1.8.2";
1342 name = "python-pam-1.8.2";
1356 buildInputs = with self; [];
1343 buildInputs = with self; [];
1357 doCheck = false;
1344 doCheck = false;
1358 propagatedBuildInputs = with self; [];
1345 propagatedBuildInputs = with self; [];
1359 src = fetchurl {
1346 src = fetchurl {
1360 url = "https://pypi.python.org/packages/de/8c/f8f5d38b4f26893af267ea0b39023d4951705ab0413a39e0cf7cf4900505/python-pam-1.8.2.tar.gz";
1347 url = "https://pypi.python.org/packages/de/8c/f8f5d38b4f26893af267ea0b39023d4951705ab0413a39e0cf7cf4900505/python-pam-1.8.2.tar.gz";
1361 md5 = "db71b6b999246fb05d78ecfbe166629d";
1348 md5 = "db71b6b999246fb05d78ecfbe166629d";
1362 };
1349 };
1363 meta = {
1350 meta = {
1364 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1351 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1365 };
1352 };
1366 };
1353 };
1367 pytz = super.buildPythonPackage {
1354 pytz = super.buildPythonPackage {
1368 name = "pytz-2015.4";
1355 name = "pytz-2015.4";
1369 buildInputs = with self; [];
1356 buildInputs = with self; [];
1370 doCheck = false;
1357 doCheck = false;
1371 propagatedBuildInputs = with self; [];
1358 propagatedBuildInputs = with self; [];
1372 src = fetchurl {
1359 src = fetchurl {
1373 url = "https://pypi.python.org/packages/7e/1a/f43b5c92df7b156822030fed151327ea096bcf417e45acc23bd1df43472f/pytz-2015.4.zip";
1360 url = "https://pypi.python.org/packages/7e/1a/f43b5c92df7b156822030fed151327ea096bcf417e45acc23bd1df43472f/pytz-2015.4.zip";
1374 md5 = "233f2a2b370d03f9b5911700cc9ebf3c";
1361 md5 = "233f2a2b370d03f9b5911700cc9ebf3c";
1375 };
1362 };
1376 meta = {
1363 meta = {
1377 license = [ pkgs.lib.licenses.mit ];
1364 license = [ pkgs.lib.licenses.mit ];
1378 };
1365 };
1379 };
1366 };
1380 pyzmq = super.buildPythonPackage {
1367 pyzmq = super.buildPythonPackage {
1381 name = "pyzmq-14.6.0";
1368 name = "pyzmq-14.6.0";
1382 buildInputs = with self; [];
1369 buildInputs = with self; [];
1383 doCheck = false;
1370 doCheck = false;
1384 propagatedBuildInputs = with self; [];
1371 propagatedBuildInputs = with self; [];
1385 src = fetchurl {
1372 src = fetchurl {
1386 url = "https://pypi.python.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1373 url = "https://pypi.python.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1387 md5 = "395b5de95a931afa5b14c9349a5b8024";
1374 md5 = "395b5de95a931afa5b14c9349a5b8024";
1388 };
1375 };
1389 meta = {
1376 meta = {
1390 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1377 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1391 };
1378 };
1392 };
1379 };
1393 recaptcha-client = super.buildPythonPackage {
1380 recaptcha-client = super.buildPythonPackage {
1394 name = "recaptcha-client-1.0.6";
1381 name = "recaptcha-client-1.0.6";
1395 buildInputs = with self; [];
1382 buildInputs = with self; [];
1396 doCheck = false;
1383 doCheck = false;
1397 propagatedBuildInputs = with self; [];
1384 propagatedBuildInputs = with self; [];
1398 src = fetchurl {
1385 src = fetchurl {
1399 url = "https://pypi.python.org/packages/0a/ea/5f2fbbfd894bdac1c68ef8d92019066cfcf9fbff5fe3d728d2b5c25c8db4/recaptcha-client-1.0.6.tar.gz";
1386 url = "https://pypi.python.org/packages/0a/ea/5f2fbbfd894bdac1c68ef8d92019066cfcf9fbff5fe3d728d2b5c25c8db4/recaptcha-client-1.0.6.tar.gz";
1400 md5 = "74228180f7e1fb76c4d7089160b0d919";
1387 md5 = "74228180f7e1fb76c4d7089160b0d919";
1401 };
1388 };
1402 meta = {
1389 meta = {
1403 license = [ { fullName = "MIT/X11"; } ];
1390 license = [ { fullName = "MIT/X11"; } ];
1404 };
1391 };
1405 };
1392 };
1406 repoze.lru = super.buildPythonPackage {
1393 repoze.lru = super.buildPythonPackage {
1407 name = "repoze.lru-0.6";
1394 name = "repoze.lru-0.6";
1408 buildInputs = with self; [];
1395 buildInputs = with self; [];
1409 doCheck = false;
1396 doCheck = false;
1410 propagatedBuildInputs = with self; [];
1397 propagatedBuildInputs = with self; [];
1411 src = fetchurl {
1398 src = fetchurl {
1412 url = "https://pypi.python.org/packages/6e/1e/aa15cc90217e086dc8769872c8778b409812ff036bf021b15795638939e4/repoze.lru-0.6.tar.gz";
1399 url = "https://pypi.python.org/packages/6e/1e/aa15cc90217e086dc8769872c8778b409812ff036bf021b15795638939e4/repoze.lru-0.6.tar.gz";
1413 md5 = "2c3b64b17a8e18b405f55d46173e14dd";
1400 md5 = "2c3b64b17a8e18b405f55d46173e14dd";
1414 };
1401 };
1415 meta = {
1402 meta = {
1416 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1403 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1417 };
1404 };
1418 };
1405 };
1419 requests = super.buildPythonPackage {
1406 requests = super.buildPythonPackage {
1420 name = "requests-2.9.1";
1407 name = "requests-2.9.1";
1421 buildInputs = with self; [];
1408 buildInputs = with self; [];
1422 doCheck = false;
1409 doCheck = false;
1423 propagatedBuildInputs = with self; [];
1410 propagatedBuildInputs = with self; [];
1424 src = fetchurl {
1411 src = fetchurl {
1425 url = "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1412 url = "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1426 md5 = "0b7f480d19012ec52bab78292efd976d";
1413 md5 = "0b7f480d19012ec52bab78292efd976d";
1427 };
1414 };
1428 meta = {
1415 meta = {
1429 license = [ pkgs.lib.licenses.asl20 ];
1416 license = [ pkgs.lib.licenses.asl20 ];
1430 };
1417 };
1431 };
1418 };
1432 rhodecode-enterprise-ce = super.buildPythonPackage {
1419 rhodecode-enterprise-ce = super.buildPythonPackage {
1433 name = "rhodecode-enterprise-ce-4.3.1";
1420 name = "rhodecode-enterprise-ce-4.4.0";
1434 buildInputs = with self; [WebTest configobj cssselect flake8 lxml mock pytest pytest-cov pytest-runner];
1421 buildInputs = with self; [WebTest configobj cssselect flake8 lxml mock pytest pytest-cov pytest-runner];
1435 doCheck = true;
1422 doCheck = true;
1436 propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments Pylons Pyro4 Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic backport-ipaddress celery channelstream colander decorator deform docutils gevent gunicorn infrae.cache ipython iso8601 kombu msgpack-python packaging psycopg2 py-gfm pycrypto pycurl pyparsing pyramid pyramid-debugtoolbar pyramid-mako pyramid-beaker pysqlite python-dateutil python-ldap python-memcached python-pam recaptcha-client repoze.lru requests simplejson waitress zope.cachedescriptors dogpile.cache dogpile.core psutil py-bcrypt];
1423 propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments Pylons Pyro4 Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic backport-ipaddress celery channelstream colander decorator deform docutils gevent gunicorn infrae.cache ipython iso8601 kombu msgpack-python packaging psycopg2 py-gfm pycrypto pycurl pyparsing pyramid pyramid-debugtoolbar pyramid-mako pyramid-beaker pysqlite python-dateutil python-ldap python-memcached python-pam recaptcha-client repoze.lru requests simplejson waitress zope.cachedescriptors dogpile.cache dogpile.core psutil py-bcrypt];
1437 src = ./.;
1424 src = ./.;
1438 meta = {
1425 meta = {
1439 license = [ { fullName = "AGPLv3, and Commercial License"; } ];
1426 license = [ { fullName = "AGPLv3, and Commercial License"; } ];
1440 };
1427 };
1441 };
1428 };
1442 rhodecode-tools = super.buildPythonPackage {
1429 rhodecode-tools = super.buildPythonPackage {
1443 name = "rhodecode-tools-0.10.0";
1430 name = "rhodecode-tools-0.10.0";
1444 buildInputs = with self; [];
1431 buildInputs = with self; [];
1445 doCheck = false;
1432 doCheck = false;
1446 propagatedBuildInputs = with self; [click future six Mako MarkupSafe requests Whoosh elasticsearch elasticsearch-dsl];
1433 propagatedBuildInputs = with self; [click future six Mako MarkupSafe requests Whoosh elasticsearch elasticsearch-dsl];
1447 src = fetchurl {
1434 src = fetchurl {
1448 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.0.zip";
1435 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.0.zip";
1449 md5 = "4762391473ded761bead3aa58c748044";
1436 md5 = "4762391473ded761bead3aa58c748044";
1450 };
1437 };
1451 meta = {
1438 meta = {
1452 license = [ { fullName = "AGPLv3 and Proprietary"; } ];
1439 license = [ { fullName = "AGPLv3 and Proprietary"; } ];
1453 };
1440 };
1454 };
1441 };
1455 serpent = super.buildPythonPackage {
1442 serpent = super.buildPythonPackage {
1456 name = "serpent-1.12";
1443 name = "serpent-1.12";
1457 buildInputs = with self; [];
1444 buildInputs = with self; [];
1458 doCheck = false;
1445 doCheck = false;
1459 propagatedBuildInputs = with self; [];
1446 propagatedBuildInputs = with self; [];
1460 src = fetchurl {
1447 src = fetchurl {
1461 url = "https://pypi.python.org/packages/3b/19/1e0e83b47c09edaef8398655088036e7e67386b5c48770218ebb339fbbd5/serpent-1.12.tar.gz";
1448 url = "https://pypi.python.org/packages/3b/19/1e0e83b47c09edaef8398655088036e7e67386b5c48770218ebb339fbbd5/serpent-1.12.tar.gz";
1462 md5 = "05869ac7b062828b34f8f927f0457b65";
1449 md5 = "05869ac7b062828b34f8f927f0457b65";
1463 };
1450 };
1464 meta = {
1451 meta = {
1465 license = [ pkgs.lib.licenses.mit ];
1452 license = [ pkgs.lib.licenses.mit ];
1466 };
1453 };
1467 };
1454 };
1468 setproctitle = super.buildPythonPackage {
1455 setproctitle = super.buildPythonPackage {
1469 name = "setproctitle-1.1.8";
1456 name = "setproctitle-1.1.8";
1470 buildInputs = with self; [];
1457 buildInputs = with self; [];
1471 doCheck = false;
1458 doCheck = false;
1472 propagatedBuildInputs = with self; [];
1459 propagatedBuildInputs = with self; [];
1473 src = fetchurl {
1460 src = fetchurl {
1474 url = "https://pypi.python.org/packages/33/c3/ad367a4f4f1ca90468863ae727ac62f6edb558fc09a003d344a02cfc6ea6/setproctitle-1.1.8.tar.gz";
1461 url = "https://pypi.python.org/packages/33/c3/ad367a4f4f1ca90468863ae727ac62f6edb558fc09a003d344a02cfc6ea6/setproctitle-1.1.8.tar.gz";
1475 md5 = "728f4c8c6031bbe56083a48594027edd";
1462 md5 = "728f4c8c6031bbe56083a48594027edd";
1476 };
1463 };
1477 meta = {
1464 meta = {
1478 license = [ pkgs.lib.licenses.bsdOriginal ];
1465 license = [ pkgs.lib.licenses.bsdOriginal ];
1479 };
1466 };
1480 };
1467 };
1481 setuptools = super.buildPythonPackage {
1468 setuptools = super.buildPythonPackage {
1482 name = "setuptools-20.8.1";
1469 name = "setuptools-20.8.1";
1483 buildInputs = with self; [];
1470 buildInputs = with self; [];
1484 doCheck = false;
1471 doCheck = false;
1485 propagatedBuildInputs = with self; [];
1472 propagatedBuildInputs = with self; [];
1486 src = fetchurl {
1473 src = fetchurl {
1487 url = "https://pypi.python.org/packages/c4/19/c1bdc88b53da654df43770f941079dbab4e4788c2dcb5658fb86259894c7/setuptools-20.8.1.zip";
1474 url = "https://pypi.python.org/packages/c4/19/c1bdc88b53da654df43770f941079dbab4e4788c2dcb5658fb86259894c7/setuptools-20.8.1.zip";
1488 md5 = "fe58a5cac0df20bb83942b252a4b0543";
1475 md5 = "fe58a5cac0df20bb83942b252a4b0543";
1489 };
1476 };
1490 meta = {
1477 meta = {
1491 license = [ pkgs.lib.licenses.mit ];
1478 license = [ pkgs.lib.licenses.mit ];
1492 };
1479 };
1493 };
1480 };
1494 setuptools-scm = super.buildPythonPackage {
1481 setuptools-scm = super.buildPythonPackage {
1495 name = "setuptools-scm-1.11.0";
1482 name = "setuptools-scm-1.11.0";
1496 buildInputs = with self; [];
1483 buildInputs = with self; [];
1497 doCheck = false;
1484 doCheck = false;
1498 propagatedBuildInputs = with self; [];
1485 propagatedBuildInputs = with self; [];
1499 src = fetchurl {
1486 src = fetchurl {
1500 url = "https://pypi.python.org/packages/cd/5f/e3a038292358058d83d764a47d09114aa5a8003ed4529518f9e580f1a94f/setuptools_scm-1.11.0.tar.gz";
1487 url = "https://pypi.python.org/packages/cd/5f/e3a038292358058d83d764a47d09114aa5a8003ed4529518f9e580f1a94f/setuptools_scm-1.11.0.tar.gz";
1501 md5 = "4c5c896ba52e134bbc3507bac6400087";
1488 md5 = "4c5c896ba52e134bbc3507bac6400087";
1502 };
1489 };
1503 meta = {
1490 meta = {
1504 license = [ pkgs.lib.licenses.mit ];
1491 license = [ pkgs.lib.licenses.mit ];
1505 };
1492 };
1506 };
1493 };
1507 simplejson = super.buildPythonPackage {
1494 simplejson = super.buildPythonPackage {
1508 name = "simplejson-3.7.2";
1495 name = "simplejson-3.7.2";
1509 buildInputs = with self; [];
1496 buildInputs = with self; [];
1510 doCheck = false;
1497 doCheck = false;
1511 propagatedBuildInputs = with self; [];
1498 propagatedBuildInputs = with self; [];
1512 src = fetchurl {
1499 src = fetchurl {
1513 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
1500 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
1514 md5 = "a5fc7d05d4cb38492285553def5d4b46";
1501 md5 = "a5fc7d05d4cb38492285553def5d4b46";
1515 };
1502 };
1516 meta = {
1503 meta = {
1517 license = [ pkgs.lib.licenses.mit pkgs.lib.licenses.afl21 ];
1504 license = [ pkgs.lib.licenses.mit pkgs.lib.licenses.afl21 ];
1518 };
1505 };
1519 };
1506 };
1520 six = super.buildPythonPackage {
1507 six = super.buildPythonPackage {
1521 name = "six-1.9.0";
1508 name = "six-1.9.0";
1522 buildInputs = with self; [];
1509 buildInputs = with self; [];
1523 doCheck = false;
1510 doCheck = false;
1524 propagatedBuildInputs = with self; [];
1511 propagatedBuildInputs = with self; [];
1525 src = fetchurl {
1512 src = fetchurl {
1526 url = "https://pypi.python.org/packages/16/64/1dc5e5976b17466fd7d712e59cbe9fb1e18bec153109e5ba3ed6c9102f1a/six-1.9.0.tar.gz";
1513 url = "https://pypi.python.org/packages/16/64/1dc5e5976b17466fd7d712e59cbe9fb1e18bec153109e5ba3ed6c9102f1a/six-1.9.0.tar.gz";
1527 md5 = "476881ef4012262dfc8adc645ee786c4";
1514 md5 = "476881ef4012262dfc8adc645ee786c4";
1528 };
1515 };
1529 meta = {
1516 meta = {
1530 license = [ pkgs.lib.licenses.mit ];
1517 license = [ pkgs.lib.licenses.mit ];
1531 };
1518 };
1532 };
1519 };
1533 subprocess32 = super.buildPythonPackage {
1520 subprocess32 = super.buildPythonPackage {
1534 name = "subprocess32-3.2.6";
1521 name = "subprocess32-3.2.6";
1535 buildInputs = with self; [];
1522 buildInputs = with self; [];
1536 doCheck = false;
1523 doCheck = false;
1537 propagatedBuildInputs = with self; [];
1524 propagatedBuildInputs = with self; [];
1538 src = fetchurl {
1525 src = fetchurl {
1539 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
1526 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
1540 md5 = "754c5ab9f533e764f931136974b618f1";
1527 md5 = "754c5ab9f533e764f931136974b618f1";
1541 };
1528 };
1542 meta = {
1529 meta = {
1543 license = [ pkgs.lib.licenses.psfl ];
1530 license = [ pkgs.lib.licenses.psfl ];
1544 };
1531 };
1545 };
1532 };
1546 supervisor = super.buildPythonPackage {
1533 supervisor = super.buildPythonPackage {
1547 name = "supervisor-3.3.0";
1534 name = "supervisor-3.3.0";
1548 buildInputs = with self; [];
1535 buildInputs = with self; [];
1549 doCheck = false;
1536 doCheck = false;
1550 propagatedBuildInputs = with self; [meld3];
1537 propagatedBuildInputs = with self; [meld3];
1551 src = fetchurl {
1538 src = fetchurl {
1552 url = "https://pypi.python.org/packages/44/80/d28047d120bfcc8158b4e41127706731ee6a3419c661e0a858fb0e7c4b2d/supervisor-3.3.0.tar.gz";
1539 url = "https://pypi.python.org/packages/44/80/d28047d120bfcc8158b4e41127706731ee6a3419c661e0a858fb0e7c4b2d/supervisor-3.3.0.tar.gz";
1553 md5 = "46bac00378d1eddb616752b990c67416";
1540 md5 = "46bac00378d1eddb616752b990c67416";
1554 };
1541 };
1555 meta = {
1542 meta = {
1556 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1543 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1557 };
1544 };
1558 };
1545 };
1559 transifex-client = super.buildPythonPackage {
1546 transifex-client = super.buildPythonPackage {
1560 name = "transifex-client-0.10";
1547 name = "transifex-client-0.10";
1561 buildInputs = with self; [];
1548 buildInputs = with self; [];
1562 doCheck = false;
1549 doCheck = false;
1563 propagatedBuildInputs = with self; [];
1550 propagatedBuildInputs = with self; [];
1564 src = fetchurl {
1551 src = fetchurl {
1565 url = "https://pypi.python.org/packages/f3/4e/7b925192aee656fb3e04fa6381c8b3dc40198047c3b4a356f6cfd642c809/transifex-client-0.10.tar.gz";
1552 url = "https://pypi.python.org/packages/f3/4e/7b925192aee656fb3e04fa6381c8b3dc40198047c3b4a356f6cfd642c809/transifex-client-0.10.tar.gz";
1566 md5 = "5549538d84b8eede6b254cd81ae024fa";
1553 md5 = "5549538d84b8eede6b254cd81ae024fa";
1567 };
1554 };
1568 meta = {
1555 meta = {
1569 license = [ pkgs.lib.licenses.gpl2 ];
1556 license = [ pkgs.lib.licenses.gpl2 ];
1570 };
1557 };
1571 };
1558 };
1572 translationstring = super.buildPythonPackage {
1559 translationstring = super.buildPythonPackage {
1573 name = "translationstring-1.3";
1560 name = "translationstring-1.3";
1574 buildInputs = with self; [];
1561 buildInputs = with self; [];
1575 doCheck = false;
1562 doCheck = false;
1576 propagatedBuildInputs = with self; [];
1563 propagatedBuildInputs = with self; [];
1577 src = fetchurl {
1564 src = fetchurl {
1578 url = "https://pypi.python.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
1565 url = "https://pypi.python.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
1579 md5 = "a4b62e0f3c189c783a1685b3027f7c90";
1566 md5 = "a4b62e0f3c189c783a1685b3027f7c90";
1580 };
1567 };
1581 meta = {
1568 meta = {
1582 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
1569 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
1583 };
1570 };
1584 };
1571 };
1585 trollius = super.buildPythonPackage {
1572 trollius = super.buildPythonPackage {
1586 name = "trollius-1.0.4";
1573 name = "trollius-1.0.4";
1587 buildInputs = with self; [];
1574 buildInputs = with self; [];
1588 doCheck = false;
1575 doCheck = false;
1589 propagatedBuildInputs = with self; [futures];
1576 propagatedBuildInputs = with self; [futures];
1590 src = fetchurl {
1577 src = fetchurl {
1591 url = "https://pypi.python.org/packages/aa/e6/4141db437f55e6ee7a3fb69663239e3fde7841a811b4bef293145ad6c836/trollius-1.0.4.tar.gz";
1578 url = "https://pypi.python.org/packages/aa/e6/4141db437f55e6ee7a3fb69663239e3fde7841a811b4bef293145ad6c836/trollius-1.0.4.tar.gz";
1592 md5 = "3631a464d49d0cbfd30ab2918ef2b783";
1579 md5 = "3631a464d49d0cbfd30ab2918ef2b783";
1593 };
1580 };
1594 meta = {
1581 meta = {
1595 license = [ pkgs.lib.licenses.asl20 ];
1582 license = [ pkgs.lib.licenses.asl20 ];
1596 };
1583 };
1597 };
1584 };
1598 uWSGI = super.buildPythonPackage {
1585 uWSGI = super.buildPythonPackage {
1599 name = "uWSGI-2.0.11.2";
1586 name = "uWSGI-2.0.11.2";
1600 buildInputs = with self; [];
1587 buildInputs = with self; [];
1601 doCheck = false;
1588 doCheck = false;
1602 propagatedBuildInputs = with self; [];
1589 propagatedBuildInputs = with self; [];
1603 src = fetchurl {
1590 src = fetchurl {
1604 url = "https://pypi.python.org/packages/9b/78/918db0cfab0546afa580c1e565209c49aaf1476bbfe491314eadbe47c556/uwsgi-2.0.11.2.tar.gz";
1591 url = "https://pypi.python.org/packages/9b/78/918db0cfab0546afa580c1e565209c49aaf1476bbfe491314eadbe47c556/uwsgi-2.0.11.2.tar.gz";
1605 md5 = "1f02dcbee7f6f61de4b1fd68350cf16f";
1592 md5 = "1f02dcbee7f6f61de4b1fd68350cf16f";
1606 };
1593 };
1607 meta = {
1594 meta = {
1608 license = [ pkgs.lib.licenses.gpl2 ];
1595 license = [ pkgs.lib.licenses.gpl2 ];
1609 };
1596 };
1610 };
1597 };
1611 urllib3 = super.buildPythonPackage {
1598 urllib3 = super.buildPythonPackage {
1612 name = "urllib3-1.16";
1599 name = "urllib3-1.16";
1613 buildInputs = with self; [];
1600 buildInputs = with self; [];
1614 doCheck = false;
1601 doCheck = false;
1615 propagatedBuildInputs = with self; [];
1602 propagatedBuildInputs = with self; [];
1616 src = fetchurl {
1603 src = fetchurl {
1617 url = "https://pypi.python.org/packages/3b/f0/e763169124e3f5db0926bc3dbfcd580a105f9ca44cf5d8e6c7a803c9f6b5/urllib3-1.16.tar.gz";
1604 url = "https://pypi.python.org/packages/3b/f0/e763169124e3f5db0926bc3dbfcd580a105f9ca44cf5d8e6c7a803c9f6b5/urllib3-1.16.tar.gz";
1618 md5 = "fcaab1c5385c57deeb7053d3d7d81d59";
1605 md5 = "fcaab1c5385c57deeb7053d3d7d81d59";
1619 };
1606 };
1620 meta = {
1607 meta = {
1621 license = [ pkgs.lib.licenses.mit ];
1608 license = [ pkgs.lib.licenses.mit ];
1622 };
1609 };
1623 };
1610 };
1624 venusian = super.buildPythonPackage {
1611 venusian = super.buildPythonPackage {
1625 name = "venusian-1.0";
1612 name = "venusian-1.0";
1626 buildInputs = with self; [];
1613 buildInputs = with self; [];
1627 doCheck = false;
1614 doCheck = false;
1628 propagatedBuildInputs = with self; [];
1615 propagatedBuildInputs = with self; [];
1629 src = fetchurl {
1616 src = fetchurl {
1630 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
1617 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
1631 md5 = "dccf2eafb7113759d60c86faf5538756";
1618 md5 = "dccf2eafb7113759d60c86faf5538756";
1632 };
1619 };
1633 meta = {
1620 meta = {
1634 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1621 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1635 };
1622 };
1636 };
1623 };
1637 waitress = super.buildPythonPackage {
1624 waitress = super.buildPythonPackage {
1638 name = "waitress-0.8.9";
1625 name = "waitress-0.8.9";
1639 buildInputs = with self; [];
1626 buildInputs = with self; [];
1640 doCheck = false;
1627 doCheck = false;
1641 propagatedBuildInputs = with self; [setuptools];
1628 propagatedBuildInputs = with self; [setuptools];
1642 src = fetchurl {
1629 src = fetchurl {
1643 url = "https://pypi.python.org/packages/ee/65/fc9dee74a909a1187ca51e4f15ad9c4d35476e4ab5813f73421505c48053/waitress-0.8.9.tar.gz";
1630 url = "https://pypi.python.org/packages/ee/65/fc9dee74a909a1187ca51e4f15ad9c4d35476e4ab5813f73421505c48053/waitress-0.8.9.tar.gz";
1644 md5 = "da3f2e62b3676be5dd630703a68e2a04";
1631 md5 = "da3f2e62b3676be5dd630703a68e2a04";
1645 };
1632 };
1646 meta = {
1633 meta = {
1647 license = [ pkgs.lib.licenses.zpt21 ];
1634 license = [ pkgs.lib.licenses.zpt21 ];
1648 };
1635 };
1649 };
1636 };
1650 ws4py = super.buildPythonPackage {
1637 ws4py = super.buildPythonPackage {
1651 name = "ws4py-0.3.5";
1638 name = "ws4py-0.3.5";
1652 buildInputs = with self; [];
1639 buildInputs = with self; [];
1653 doCheck = false;
1640 doCheck = false;
1654 propagatedBuildInputs = with self; [];
1641 propagatedBuildInputs = with self; [];
1655 src = fetchurl {
1642 src = fetchurl {
1656 url = "https://pypi.python.org/packages/b6/4f/34af703be86939629479e74d6e650e39f3bd73b3b09212c34e5125764cbc/ws4py-0.3.5.zip";
1643 url = "https://pypi.python.org/packages/b6/4f/34af703be86939629479e74d6e650e39f3bd73b3b09212c34e5125764cbc/ws4py-0.3.5.zip";
1657 md5 = "a261b75c20b980e55ce7451a3576a867";
1644 md5 = "a261b75c20b980e55ce7451a3576a867";
1658 };
1645 };
1659 meta = {
1646 meta = {
1660 license = [ pkgs.lib.licenses.bsdOriginal ];
1647 license = [ pkgs.lib.licenses.bsdOriginal ];
1661 };
1648 };
1662 };
1649 };
1663 wsgiref = super.buildPythonPackage {
1650 wsgiref = super.buildPythonPackage {
1664 name = "wsgiref-0.1.2";
1651 name = "wsgiref-0.1.2";
1665 buildInputs = with self; [];
1652 buildInputs = with self; [];
1666 doCheck = false;
1653 doCheck = false;
1667 propagatedBuildInputs = with self; [];
1654 propagatedBuildInputs = with self; [];
1668 src = fetchurl {
1655 src = fetchurl {
1669 url = "https://pypi.python.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
1656 url = "https://pypi.python.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
1670 md5 = "29b146e6ebd0f9fb119fe321f7bcf6cb";
1657 md5 = "29b146e6ebd0f9fb119fe321f7bcf6cb";
1671 };
1658 };
1672 meta = {
1659 meta = {
1673 license = [ { fullName = "PSF or ZPL"; } ];
1660 license = [ { fullName = "PSF or ZPL"; } ];
1674 };
1661 };
1675 };
1662 };
1676 zope.cachedescriptors = super.buildPythonPackage {
1663 zope.cachedescriptors = super.buildPythonPackage {
1677 name = "zope.cachedescriptors-4.0.0";
1664 name = "zope.cachedescriptors-4.0.0";
1678 buildInputs = with self; [];
1665 buildInputs = with self; [];
1679 doCheck = false;
1666 doCheck = false;
1680 propagatedBuildInputs = with self; [setuptools];
1667 propagatedBuildInputs = with self; [setuptools];
1681 src = fetchurl {
1668 src = fetchurl {
1682 url = "https://pypi.python.org/packages/40/33/694b6644c37f28553f4b9f20b3c3a20fb709a22574dff20b5bdffb09ecd5/zope.cachedescriptors-4.0.0.tar.gz";
1669 url = "https://pypi.python.org/packages/40/33/694b6644c37f28553f4b9f20b3c3a20fb709a22574dff20b5bdffb09ecd5/zope.cachedescriptors-4.0.0.tar.gz";
1683 md5 = "8d308de8c936792c8e758058fcb7d0f0";
1670 md5 = "8d308de8c936792c8e758058fcb7d0f0";
1684 };
1671 };
1685 meta = {
1672 meta = {
1686 license = [ pkgs.lib.licenses.zpt21 ];
1673 license = [ pkgs.lib.licenses.zpt21 ];
1687 };
1674 };
1688 };
1675 };
1689 zope.deprecation = super.buildPythonPackage {
1676 zope.deprecation = super.buildPythonPackage {
1690 name = "zope.deprecation-4.1.2";
1677 name = "zope.deprecation-4.1.2";
1691 buildInputs = with self; [];
1678 buildInputs = with self; [];
1692 doCheck = false;
1679 doCheck = false;
1693 propagatedBuildInputs = with self; [setuptools];
1680 propagatedBuildInputs = with self; [setuptools];
1694 src = fetchurl {
1681 src = fetchurl {
1695 url = "https://pypi.python.org/packages/c1/d3/3919492d5e57d8dd01b36f30b34fc8404a30577392b1eb817c303499ad20/zope.deprecation-4.1.2.tar.gz";
1682 url = "https://pypi.python.org/packages/c1/d3/3919492d5e57d8dd01b36f30b34fc8404a30577392b1eb817c303499ad20/zope.deprecation-4.1.2.tar.gz";
1696 md5 = "e9a663ded58f4f9f7881beb56cae2782";
1683 md5 = "e9a663ded58f4f9f7881beb56cae2782";
1697 };
1684 };
1698 meta = {
1685 meta = {
1699 license = [ pkgs.lib.licenses.zpt21 ];
1686 license = [ pkgs.lib.licenses.zpt21 ];
1700 };
1687 };
1701 };
1688 };
1702 zope.event = super.buildPythonPackage {
1689 zope.event = super.buildPythonPackage {
1703 name = "zope.event-4.0.3";
1690 name = "zope.event-4.0.3";
1704 buildInputs = with self; [];
1691 buildInputs = with self; [];
1705 doCheck = false;
1692 doCheck = false;
1706 propagatedBuildInputs = with self; [setuptools];
1693 propagatedBuildInputs = with self; [setuptools];
1707 src = fetchurl {
1694 src = fetchurl {
1708 url = "https://pypi.python.org/packages/c1/29/91ba884d7d6d96691df592e9e9c2bfa57a47040ec1ff47eff18c85137152/zope.event-4.0.3.tar.gz";
1695 url = "https://pypi.python.org/packages/c1/29/91ba884d7d6d96691df592e9e9c2bfa57a47040ec1ff47eff18c85137152/zope.event-4.0.3.tar.gz";
1709 md5 = "9a3780916332b18b8b85f522bcc3e249";
1696 md5 = "9a3780916332b18b8b85f522bcc3e249";
1710 };
1697 };
1711 meta = {
1698 meta = {
1712 license = [ pkgs.lib.licenses.zpt21 ];
1699 license = [ pkgs.lib.licenses.zpt21 ];
1713 };
1700 };
1714 };
1701 };
1715 zope.interface = super.buildPythonPackage {
1702 zope.interface = super.buildPythonPackage {
1716 name = "zope.interface-4.1.3";
1703 name = "zope.interface-4.1.3";
1717 buildInputs = with self; [];
1704 buildInputs = with self; [];
1718 doCheck = false;
1705 doCheck = false;
1719 propagatedBuildInputs = with self; [setuptools];
1706 propagatedBuildInputs = with self; [setuptools];
1720 src = fetchurl {
1707 src = fetchurl {
1721 url = "https://pypi.python.org/packages/9d/81/2509ca3c6f59080123c1a8a97125eb48414022618cec0e64eb1313727bfe/zope.interface-4.1.3.tar.gz";
1708 url = "https://pypi.python.org/packages/9d/81/2509ca3c6f59080123c1a8a97125eb48414022618cec0e64eb1313727bfe/zope.interface-4.1.3.tar.gz";
1722 md5 = "9ae3d24c0c7415deb249dd1a132f0f79";
1709 md5 = "9ae3d24c0c7415deb249dd1a132f0f79";
1723 };
1710 };
1724 meta = {
1711 meta = {
1725 license = [ pkgs.lib.licenses.zpt21 ];
1712 license = [ pkgs.lib.licenses.zpt21 ];
1726 };
1713 };
1727 };
1714 };
1728
1715
1729 ### Test requirements
1716 ### Test requirements
1730
1717
1731
1718
1732 }
1719 }
@@ -1,151 +1,150 b''
1 Babel==1.3
1 Babel==1.3
2 Beaker==1.7.0
2 Beaker==1.7.0
3 CProfileV==1.0.6
3 CProfileV==1.0.6
4 Fabric==1.10.0
5 FormEncode==1.2.4
4 FormEncode==1.2.4
6 Jinja2==2.7.3
5 Jinja2==2.7.3
7 Mako==1.0.1
6 Mako==1.0.1
8 Markdown==2.6.2
7 Markdown==2.6.2
9 MarkupSafe==0.23
8 MarkupSafe==0.23
10 MySQL-python==1.2.5
9 MySQL-python==1.2.5
11 Paste==2.0.2
10 Paste==2.0.2
12 PasteDeploy==1.5.2
11 PasteDeploy==1.5.2
13 PasteScript==1.7.5
12 PasteScript==1.7.5
14 Pygments==2.1.3
13 Pygments==2.1.3
15
14
16 # TODO: This version is not available on PyPI
15 # TODO: This version is not available on PyPI
17 # Pylons==1.0.2.dev20160108
16 # Pylons==1.0.2.dev20160108
18 Pylons==1.0.1
17 Pylons==1.0.1
19
18
20 # TODO: This version is not available, but newer ones are
19 # TODO: This version is not available, but newer ones are
21 # Pyro4==4.35
20 # Pyro4==4.35
22 Pyro4==4.41
21 Pyro4==4.41
23
22
24 # TODO: This should probably not be in here
23 # TODO: This should probably not be in here
25 # -e hg+https://johbo@code.rhodecode.com/johbo/rhodecode-fork@3a454bd1f17c0b2b2a951cf2b111e0320d7942a9#egg=RhodeCodeEnterprise-dev
24 # -e hg+https://johbo@code.rhodecode.com/johbo/rhodecode-fork@3a454bd1f17c0b2b2a951cf2b111e0320d7942a9#egg=RhodeCodeEnterprise-dev
26
25
27 Routes==1.13
26 Routes==1.13
28 SQLAlchemy==0.9.9
27 SQLAlchemy==0.9.9
29 Sphinx==1.2.2
28 Sphinx==1.2.2
30 Tempita==0.5.2
29 Tempita==0.5.2
31 URLObject==2.4.0
30 URLObject==2.4.0
32 WebError==0.10.3
31 WebError==0.10.3
33
32
34 # TODO: This is modified by us, needs a better integration. For now
33 # TODO: This is modified by us, needs a better integration. For now
35 # using the latest version before.
34 # using the latest version before.
36 # WebHelpers==1.3.dev20150807
35 # WebHelpers==1.3.dev20150807
37 WebHelpers==1.3
36 WebHelpers==1.3
38
37
39 WebHelpers2==2.0
38 WebHelpers2==2.0
40 WebOb==1.3.1
39 WebOb==1.3.1
41 WebTest==1.4.3
40 WebTest==1.4.3
42 Whoosh==2.7.0
41 Whoosh==2.7.0
43 alembic==0.8.4
42 alembic==0.8.4
44 amqplib==1.0.2
43 amqplib==1.0.2
45 anyjson==0.3.3
44 anyjson==0.3.3
46 appenlight-client==0.6.14
45 appenlight-client==0.6.14
47 authomatic==0.1.0.post1;
46 authomatic==0.1.0.post1;
48 backport-ipaddress==0.1
47 backport-ipaddress==0.1
49 bottle==0.12.8
48 bottle==0.12.8
50 bumpversion==0.5.3
49 bumpversion==0.5.3
51 celery==2.2.10
50 celery==2.2.10
52 channelstream==0.5.2
51 channelstream==0.5.2
53 click==5.1
52 click==5.1
54 colander==1.2
53 colander==1.2
55 configobj==5.0.6
54 configobj==5.0.6
56 cov-core==1.15.0
55 cov-core==1.15.0
57 coverage==3.7.1
56 coverage==3.7.1
58 cssselect==0.9.1
57 cssselect==0.9.1
59 decorator==3.4.2
58 decorator==3.4.2
60 deform==2.0a2
59 deform==2.0a2
61 docutils==0.12
60 docutils==0.12
62 dogpile.cache==0.6.1
61 dogpile.cache==0.6.1
63 dogpile.core==0.4.1
62 dogpile.core==0.4.1
64 dulwich==0.12.0
63 dulwich==0.12.0
65 ecdsa==0.11
64 ecdsa==0.11
66 flake8==2.4.1
65 flake8==2.4.1
67 future==0.14.3
66 future==0.14.3
68 futures==3.0.2
67 futures==3.0.2
69 gevent==1.1.1
68 gevent==1.1.1
70 gprof2dot==2015.12.1
69 gprof2dot==2015.12.1
71 greenlet==0.4.9
70 greenlet==0.4.9
72 gunicorn==19.6.0
71 gunicorn==19.6.0
73
72
74 # TODO: Needs subvertpy and blows up without Subversion headers,
73 # TODO: Needs subvertpy and blows up without Subversion headers,
75 # actually we should not need this for Enterprise at all.
74 # actually we should not need this for Enterprise at all.
76 # hgsubversion==1.8.2
75 # hgsubversion==1.8.2
77
76
78 gnureadline==6.3.3
77 gnureadline==6.3.3
79 infrae.cache==1.0.1
78 infrae.cache==1.0.1
80 invoke==0.13.0
79 invoke==0.13.0
81 ipdb==0.8
80 ipdb==0.8
82 ipython==3.1.0
81 ipython==3.1.0
83 iso8601==0.1.11
82 iso8601==0.1.11
84 itsdangerous==0.24
83 itsdangerous==0.24
85 kombu==1.5.1
84 kombu==1.5.1
86 lxml==3.4.4
85 lxml==3.4.4
87 mccabe==0.3
86 mccabe==0.3
88 meld3==1.0.2
87 meld3==1.0.2
89 mock==1.0.1
88 mock==1.0.1
90 msgpack-python==0.4.6
89 msgpack-python==0.4.6
91 nose==1.3.6
90 nose==1.3.6
92 objgraph==2.0.0
91 objgraph==2.0.0
93 packaging==15.2
92 packaging==15.2
94 paramiko==1.15.1
93 paramiko==1.15.1
95 pep8==1.5.7
94 pep8==1.5.7
96 psutil==2.2.1
95 psutil==2.2.1
97 psycopg2==2.6.1
96 psycopg2==2.6.1
98 py==1.4.29
97 py==1.4.29
99 py-bcrypt==0.4
98 py-bcrypt==0.4
100 py-gfm==0.1.3
99 py-gfm==0.1.3
101 pycrypto==2.6.1
100 pycrypto==2.6.1
102 pycurl==7.19.5
101 pycurl==7.19.5
103 pyflakes==0.8.1
102 pyflakes==0.8.1
104 pyparsing==1.5.7
103 pyparsing==1.5.7
105 pyramid==1.6.1
104 pyramid==1.6.1
106 pyramid-beaker==0.8
105 pyramid-beaker==0.8
107 pyramid-debugtoolbar==2.4.2
106 pyramid-debugtoolbar==2.4.2
108 pyramid-jinja2==2.5
107 pyramid-jinja2==2.5
109 pyramid-mako==1.0.2
108 pyramid-mako==1.0.2
110 pysqlite==2.6.3
109 pysqlite==2.6.3
111 pytest==2.8.5
110 pytest==2.8.5
112 pytest-runner==2.7.1
111 pytest-runner==2.7.1
113 pytest-catchlog==1.2.2
112 pytest-catchlog==1.2.2
114 pytest-cov==1.8.1
113 pytest-cov==1.8.1
115 pytest-profiling==1.0.1
114 pytest-profiling==1.0.1
116 pytest-timeout==0.4
115 pytest-timeout==0.4
117 python-dateutil==1.5
116 python-dateutil==1.5
118 python-ldap==2.4.19
117 python-ldap==2.4.19
119 python-memcached==1.57
118 python-memcached==1.57
120 python-pam==1.8.2
119 python-pam==1.8.2
121 pytz==2015.4
120 pytz==2015.4
122 pyzmq==14.6.0
121 pyzmq==14.6.0
123
122
124 # TODO: This is not available in public
123 # TODO: This is not available in public
125 # rc-testdata==0.2.0
124 # rc-testdata==0.2.0
126
125
127 https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.0.zip#md5=4762391473ded761bead3aa58c748044
126 https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.0.zip#md5=4762391473ded761bead3aa58c748044
128
127
129
128
130 recaptcha-client==1.0.6
129 recaptcha-client==1.0.6
131 repoze.lru==0.6
130 repoze.lru==0.6
132 requests==2.9.1
131 requests==2.9.1
133 serpent==1.12
132 serpent==1.12
134 setproctitle==1.1.8
133 setproctitle==1.1.8
135 setuptools==20.8.1
134 setuptools==20.8.1
136 setuptools-scm==1.11.0
135 setuptools-scm==1.11.0
137 simplejson==3.7.2
136 simplejson==3.7.2
138 six==1.9.0
137 six==1.9.0
139 subprocess32==3.2.6
138 subprocess32==3.2.6
140 supervisor==3.3.0
139 supervisor==3.3.0
141 transifex-client==0.10
140 transifex-client==0.10
142 translationstring==1.3
141 translationstring==1.3
143 trollius==1.0.4
142 trollius==1.0.4
144 uWSGI==2.0.11.2
143 uWSGI==2.0.11.2
145 venusian==1.0
144 venusian==1.0
146 waitress==0.8.9
145 waitress==0.8.9
147 wsgiref==0.1.2
146 wsgiref==0.1.2
148 zope.cachedescriptors==4.0.0
147 zope.cachedescriptors==4.0.0
149 zope.deprecation==4.1.2
148 zope.deprecation==4.1.2
150 zope.event==4.0.3
149 zope.event==4.0.3
151 zope.interface==4.1.3
150 zope.interface==4.1.3
@@ -1,1 +1,1 b''
1 4.3.1 No newline at end of file
1 4.4.0 No newline at end of file
@@ -1,62 +1,63 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22
22
23 RhodeCode, a web based repository management software
23 RhodeCode, a web based repository management software
24 versioning implementation: http://www.python.org/dev/peps/pep-0386/
24 versioning implementation: http://www.python.org/dev/peps/pep-0386/
25 """
25 """
26
26
27 import os
27 import os
28 import sys
28 import sys
29 import platform
29 import platform
30
30
31 VERSION = tuple(open(os.path.join(
31 VERSION = tuple(open(os.path.join(
32 os.path.dirname(__file__), 'VERSION')).read().split('.'))
32 os.path.dirname(__file__), 'VERSION')).read().split('.'))
33
33
34 BACKENDS = {
34 BACKENDS = {
35 'hg': 'Mercurial repository',
35 'hg': 'Mercurial repository',
36 'git': 'Git repository',
36 'git': 'Git repository',
37 'svn': 'Subversion repository',
37 'svn': 'Subversion repository',
38 }
38 }
39
39
40 CELERY_ENABLED = False
40 CELERY_ENABLED = False
41 CELERY_EAGER = False
41 CELERY_EAGER = False
42
42
43 # link to config for pylons
43 # link to config for pylons
44 CONFIG = {}
44 CONFIG = {}
45
45
46 # Populated with the settings dictionary from application init in
46 # Populated with the settings dictionary from application init in
47 # rhodecode.conf.environment.load_pyramid_environment
47 # rhodecode.conf.environment.load_pyramid_environment
48 PYRAMID_SETTINGS = {}
48 PYRAMID_SETTINGS = {}
49
49
50 # Linked module for extensions
50 # Linked module for extensions
51 EXTENSIONS = {}
51 EXTENSIONS = {}
52
52
53 __version__ = ('.'.join((str(each) for each in VERSION[:3])))
53 __version__ = ('.'.join((str(each) for each in VERSION[:3])))
54 __dbversion__ = 55 # defines current db version for migrations
54 __dbversion__ = 58 # defines current db version for migrations
55 __platform__ = platform.system()
55 __platform__ = platform.system()
56 __license__ = 'AGPLv3, and Commercial License'
56 __license__ = 'AGPLv3, and Commercial License'
57 __author__ = 'RhodeCode GmbH'
57 __author__ = 'RhodeCode GmbH'
58 __url__ = 'http://rhodecode.com'
58 __url__ = 'http://rhodecode.com'
59
59
60 is_windows = __platform__ in ['Windows']
60 is_windows = __platform__ in ['Windows']
61 is_unix = not is_windows
61 is_unix = not is_windows
62 is_test = False
62 is_test = False
63 disable_error_handler = False
@@ -1,79 +1,81 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import os
21 import os
22
22
23 from pyramid.settings import asbool
23 from pyramid.settings import asbool
24
24
25 from rhodecode.config.routing import ADMIN_PREFIX
25 from rhodecode.config.routing import ADMIN_PREFIX
26 from rhodecode.lib.ext_json import json
26 from rhodecode.lib.ext_json import json
27
27
28
28
29 def url_gen(request):
29 def url_gen(request):
30 urls = {
30 urls = {
31 'connect': request.route_url('channelstream_connect'),
31 'connect': request.route_url('channelstream_connect'),
32 'subscribe': request.route_url('channelstream_subscribe')
32 'subscribe': request.route_url('channelstream_subscribe'),
33 'longpoll': request.registry.settings.get('channelstream.longpoll_url', ''),
34 'ws': request.registry.settings.get('channelstream.ws_url', '')
33 }
35 }
34 return json.dumps(urls)
36 return json.dumps(urls)
35
37
36
38
37 PLUGIN_DEFINITION = {
39 PLUGIN_DEFINITION = {
38 'name': 'channelstream',
40 'name': 'channelstream',
39 'config': {
41 'config': {
40 'javascript': [],
42 'javascript': [],
41 'css': [],
43 'css': [],
42 'template_hooks': {
44 'template_hooks': {
43 'plugin_init_template': 'rhodecode:templates/channelstream/plugin_init.html'
45 'plugin_init_template': 'rhodecode:templates/channelstream/plugin_init.html'
44 },
46 },
45 'url_gen': url_gen,
47 'url_gen': url_gen,
46 'static': None,
48 'static': None,
47 'enabled': False,
49 'enabled': False,
48 'server': '',
50 'server': '',
49 'secret': ''
51 'secret': ''
50 }
52 }
51 }
53 }
52
54
53
55
54 def includeme(config):
56 def includeme(config):
55 settings = config.registry.settings
57 settings = config.registry.settings
56 PLUGIN_DEFINITION['config']['enabled'] = asbool(
58 PLUGIN_DEFINITION['config']['enabled'] = asbool(
57 settings.get('channelstream.enabled'))
59 settings.get('channelstream.enabled'))
58 PLUGIN_DEFINITION['config']['server'] = settings.get(
60 PLUGIN_DEFINITION['config']['server'] = settings.get(
59 'channelstream.server', '')
61 'channelstream.server', '')
60 PLUGIN_DEFINITION['config']['secret'] = settings.get(
62 PLUGIN_DEFINITION['config']['secret'] = settings.get(
61 'channelstream.secret', '')
63 'channelstream.secret', '')
62 PLUGIN_DEFINITION['config']['history.location'] = settings.get(
64 PLUGIN_DEFINITION['config']['history.location'] = settings.get(
63 'channelstream.history.location', '')
65 'channelstream.history.location', '')
64 config.register_rhodecode_plugin(
66 config.register_rhodecode_plugin(
65 PLUGIN_DEFINITION['name'],
67 PLUGIN_DEFINITION['name'],
66 PLUGIN_DEFINITION['config']
68 PLUGIN_DEFINITION['config']
67 )
69 )
68 # create plugin history location
70 # create plugin history location
69 history_dir = PLUGIN_DEFINITION['config']['history.location']
71 history_dir = PLUGIN_DEFINITION['config']['history.location']
70 if history_dir and not os.path.exists(history_dir):
72 if history_dir and not os.path.exists(history_dir):
71 os.makedirs(history_dir, 0750)
73 os.makedirs(history_dir, 0750)
72
74
73 config.add_route(
75 config.add_route(
74 name='channelstream_connect',
76 name='channelstream_connect',
75 pattern=ADMIN_PREFIX + '/channelstream/connect')
77 pattern=ADMIN_PREFIX + '/channelstream/connect')
76 config.add_route(
78 config.add_route(
77 name='channelstream_subscribe',
79 name='channelstream_subscribe',
78 pattern=ADMIN_PREFIX + '/channelstream/subscribe')
80 pattern=ADMIN_PREFIX + '/channelstream/subscribe')
79 config.scan('rhodecode.channelstream')
81 config.scan('rhodecode.channelstream')
@@ -1,177 +1,178 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Channel Stream controller for rhodecode
22 Channel Stream controller for rhodecode
23
23
24 :created_on: Oct 10, 2015
24 :created_on: Oct 10, 2015
25 :author: marcinl
25 :author: marcinl
26 :copyright: (c) 2013-2015 RhodeCode GmbH.
26 :copyright: (c) 2013-2015 RhodeCode GmbH.
27 :license: Commercial License, see LICENSE for more details.
27 :license: Commercial License, see LICENSE for more details.
28 """
28 """
29
29
30 import logging
30 import logging
31 import uuid
31 import uuid
32
32
33 from pylons import tmpl_context as c
33 from pylons import tmpl_context as c
34 from pyramid.settings import asbool
34 from pyramid.settings import asbool
35 from pyramid.view import view_config
35 from pyramid.view import view_config
36 from webob.exc import HTTPBadRequest, HTTPForbidden, HTTPBadGateway
36 from webob.exc import HTTPBadRequest, HTTPForbidden, HTTPBadGateway
37
37
38 from rhodecode.lib.channelstream import (
38 from rhodecode.lib.channelstream import (
39 channelstream_request,
39 channelstream_request,
40 ChannelstreamConnectionException,
40 ChannelstreamConnectionException,
41 ChannelstreamPermissionException,
41 ChannelstreamPermissionException,
42 check_channel_permissions,
42 check_channel_permissions,
43 get_connection_validators,
43 get_connection_validators,
44 get_user_data,
44 get_user_data,
45 parse_channels_info,
45 parse_channels_info,
46 update_history_from_logs,
46 update_history_from_logs,
47 STATE_PUBLIC_KEYS)
47 STATE_PUBLIC_KEYS)
48 from rhodecode.lib.auth import NotAnonymous
48 from rhodecode.lib.auth import NotAnonymous
49 from rhodecode.lib.utils2 import str2bool
49 from rhodecode.lib.utils2 import str2bool
50
50
51 log = logging.getLogger(__name__)
51 log = logging.getLogger(__name__)
52
52
53
53
54 class ChannelstreamView(object):
54 class ChannelstreamView(object):
55 def __init__(self, context, request):
55 def __init__(self, context, request):
56 self.context = context
56 self.context = context
57 self.request = request
57 self.request = request
58
58
59 # Some of the decorators rely on this attribute to be present
59 # Some of the decorators rely on this attribute to be present
60 # on the class of the decorated method.
60 # on the class of the decorated method.
61 self._rhodecode_user = request.user
61 self._rhodecode_user = request.user
62 registry = request.registry
62 registry = request.registry
63 self.channelstream_config = registry.rhodecode_plugins['channelstream']
63 self.channelstream_config = registry.rhodecode_plugins['channelstream']
64 if not self.channelstream_config.get('enabled'):
64 if not self.channelstream_config.get('enabled'):
65 log.exception('Channelstream plugin is disabled')
65 log.exception('Channelstream plugin is disabled')
66 raise HTTPBadRequest()
66 raise HTTPBadRequest()
67
67
68 @NotAnonymous()
68 @NotAnonymous()
69 @view_config(route_name='channelstream_connect', renderer='json')
69 @view_config(route_name='channelstream_connect', renderer='json')
70 def connect(self):
70 def connect(self):
71 """ handle authorization of users trying to connect """
71 """ handle authorization of users trying to connect """
72 try:
72 try:
73 json_body = self.request.json_body
73 json_body = self.request.json_body
74 except Exception:
74 except Exception:
75 log.exception('Failed to decode json from request')
75 log.exception('Failed to decode json from request')
76 raise HTTPBadRequest()
76 raise HTTPBadRequest()
77 try:
77 try:
78 channels = check_channel_permissions(
78 channels = check_channel_permissions(
79 json_body.get('channels'),
79 json_body.get('channels'),
80 get_connection_validators(self.request.registry))
80 get_connection_validators(self.request.registry))
81 except ChannelstreamPermissionException:
81 except ChannelstreamPermissionException:
82 log.error('Incorrect permissions for requested channels')
82 log.error('Incorrect permissions for requested channels')
83 raise HTTPForbidden()
83 raise HTTPForbidden()
84
84
85 user = c.rhodecode_user
85 user = c.rhodecode_user
86 if user.user_id:
86 if user.user_id:
87 user_data = get_user_data(user.user_id)
87 user_data = get_user_data(user.user_id)
88 else:
88 else:
89 user_data = {
89 user_data = {
90 'id': None,
90 'id': None,
91 'username': None,
91 'username': None,
92 'first_name': None,
92 'first_name': None,
93 'last_name': None,
93 'last_name': None,
94 'icon_link': None,
94 'icon_link': None,
95 'display_name': None,
95 'display_name': None,
96 'display_link': None,
96 'display_link': None,
97 }
97 }
98 user_data['permissions'] = c.rhodecode_user.permissions
98 payload = {
99 payload = {
99 'username': user.username,
100 'username': user.username,
100 'user_state': user_data,
101 'user_state': user_data,
101 'conn_id': str(uuid.uuid4()),
102 'conn_id': str(uuid.uuid4()),
102 'channels': channels,
103 'channels': channels,
103 'channel_configs': {},
104 'channel_configs': {},
104 'state_public_keys': STATE_PUBLIC_KEYS,
105 'state_public_keys': STATE_PUBLIC_KEYS,
105 'info': {
106 'info': {
106 'exclude_channels': ['broadcast']
107 'exclude_channels': ['broadcast']
107 }
108 }
108 }
109 }
109 filtered_channels = [channel for channel in channels
110 filtered_channels = [channel for channel in channels
110 if channel != 'broadcast']
111 if channel != 'broadcast']
111 for channel in filtered_channels:
112 for channel in filtered_channels:
112 payload['channel_configs'][channel] = {
113 payload['channel_configs'][channel] = {
113 'notify_presence': True,
114 'notify_presence': True,
114 'history_size': 100,
115 'history_size': 100,
115 'store_history': True,
116 'store_history': True,
116 'broadcast_presence_with_user_lists': True
117 'broadcast_presence_with_user_lists': True
117 }
118 }
118 # connect user to server
119 # connect user to server
119 try:
120 try:
120 connect_result = channelstream_request(self.channelstream_config,
121 connect_result = channelstream_request(self.channelstream_config,
121 payload, '/connect')
122 payload, '/connect')
122 except ChannelstreamConnectionException:
123 except ChannelstreamConnectionException:
123 log.exception('Channelstream service is down')
124 log.exception('Channelstream service is down')
124 return HTTPBadGateway()
125 return HTTPBadGateway()
125
126
126 connect_result['channels'] = channels
127 connect_result['channels'] = channels
127 connect_result['channels_info'] = parse_channels_info(
128 connect_result['channels_info'] = parse_channels_info(
128 connect_result['channels_info'],
129 connect_result['channels_info'],
129 include_channel_info=filtered_channels)
130 include_channel_info=filtered_channels)
130 update_history_from_logs(self.channelstream_config,
131 update_history_from_logs(self.channelstream_config,
131 filtered_channels, connect_result)
132 filtered_channels, connect_result)
132 return connect_result
133 return connect_result
133
134
134 @NotAnonymous()
135 @NotAnonymous()
135 @view_config(route_name='channelstream_subscribe', renderer='json')
136 @view_config(route_name='channelstream_subscribe', renderer='json')
136 def subscribe(self):
137 def subscribe(self):
137 """ can be used to subscribe specific connection to other channels """
138 """ can be used to subscribe specific connection to other channels """
138 try:
139 try:
139 json_body = self.request.json_body
140 json_body = self.request.json_body
140 except Exception:
141 except Exception:
141 log.exception('Failed to decode json from request')
142 log.exception('Failed to decode json from request')
142 raise HTTPBadRequest()
143 raise HTTPBadRequest()
143 try:
144 try:
144 channels = check_channel_permissions(
145 channels = check_channel_permissions(
145 json_body.get('channels'),
146 json_body.get('channels'),
146 get_connection_validators(self.request.registry))
147 get_connection_validators(self.request.registry))
147 except ChannelstreamPermissionException:
148 except ChannelstreamPermissionException:
148 log.error('Incorrect permissions for requested channels')
149 log.error('Incorrect permissions for requested channels')
149 raise HTTPForbidden()
150 raise HTTPForbidden()
150 payload = {'conn_id': json_body.get('conn_id', ''),
151 payload = {'conn_id': json_body.get('conn_id', ''),
151 'channels': channels,
152 'channels': channels,
152 'channel_configs': {},
153 'channel_configs': {},
153 'info': {
154 'info': {
154 'exclude_channels': ['broadcast']}
155 'exclude_channels': ['broadcast']}
155 }
156 }
156 filtered_channels = [chan for chan in channels if chan != 'broadcast']
157 filtered_channels = [chan for chan in channels if chan != 'broadcast']
157 for channel in filtered_channels:
158 for channel in filtered_channels:
158 payload['channel_configs'][channel] = {
159 payload['channel_configs'][channel] = {
159 'notify_presence': True,
160 'notify_presence': True,
160 'history_size': 100,
161 'history_size': 100,
161 'store_history': True,
162 'store_history': True,
162 'broadcast_presence_with_user_lists': True
163 'broadcast_presence_with_user_lists': True
163 }
164 }
164 try:
165 try:
165 connect_result = channelstream_request(
166 connect_result = channelstream_request(
166 self.channelstream_config, payload, '/subscribe')
167 self.channelstream_config, payload, '/subscribe')
167 except ChannelstreamConnectionException:
168 except ChannelstreamConnectionException:
168 log.exception('Channelstream service is down')
169 log.exception('Channelstream service is down')
169 return HTTPBadGateway()
170 return HTTPBadGateway()
170 # include_channel_info will limit history only to new channel
171 # include_channel_info will limit history only to new channel
171 # to not overwrite histories on other channels in client
172 # to not overwrite histories on other channels in client
172 connect_result['channels_info'] = parse_channels_info(
173 connect_result['channels_info'] = parse_channels_info(
173 connect_result['channels_info'],
174 connect_result['channels_info'],
174 include_channel_info=filtered_channels)
175 include_channel_info=filtered_channels)
175 update_history_from_logs(self.channelstream_config,
176 update_history_from_logs(self.channelstream_config,
176 filtered_channels, connect_result)
177 filtered_channels, connect_result)
177 return connect_result
178 return connect_result
@@ -1,35 +1,39 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2013-2016 RhodeCode GmbH
3 # Copyright (C) 2013-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Various config settings for RhodeCode
22 Various config settings for RhodeCode
23 """
23 """
24 from rhodecode import EXTENSIONS
24 from rhodecode import EXTENSIONS
25
25
26 from rhodecode.lib.utils2 import __get_lem
26 from rhodecode.lib.utils2 import __get_lem
27
27
28
28
29 # language map is also used by whoosh indexer, which for those specified
29 # language map is also used by whoosh indexer, which for those specified
30 # extensions will index it's content
30 # extensions will index it's content
31 LANGUAGES_EXTENSIONS_MAP = __get_lem()
31 # custom extensions to lexers, format is 'ext': 'LexerClass'
32 extra = {
33 'vbs': 'VbNet'
34 }
35 LANGUAGES_EXTENSIONS_MAP = __get_lem(extra)
32
36
33 DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
37 DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
34
38
35 DATE_FORMAT = "%Y-%m-%d"
39 DATE_FORMAT = "%Y-%m-%d"
@@ -1,188 +1,190 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Pylons environment configuration
22 Pylons environment configuration
23 """
23 """
24
24
25 import os
25 import os
26 import logging
26 import logging
27 import rhodecode
27 import rhodecode
28 import platform
28 import platform
29 import re
29 import re
30 import io
30 import io
31
31
32 from mako.lookup import TemplateLookup
32 from mako.lookup import TemplateLookup
33 from pylons.configuration import PylonsConfig
33 from pylons.configuration import PylonsConfig
34 from pylons.error import handle_mako_error
34 from pylons.error import handle_mako_error
35 from pyramid.settings import asbool
35 from pyramid.settings import asbool
36
36
37 # ------------------------------------------------------------------------------
37 # ------------------------------------------------------------------------------
38 # CELERY magic until refactor - issue #4163 - import order matters here:
38 # CELERY magic until refactor - issue #4163 - import order matters here:
39 from rhodecode.lib import celerypylons # this must be first, celerypylons
39 from rhodecode.lib import celerypylons # this must be first, celerypylons
40 # sets config settings upon import
40 # sets config settings upon import
41
41
42 import rhodecode.integrations # any modules using celery task
42 import rhodecode.integrations # any modules using celery task
43 # decorators should be added afterwards:
43 # decorators should be added afterwards:
44 # ------------------------------------------------------------------------------
44 # ------------------------------------------------------------------------------
45
45
46 from rhodecode.lib import app_globals
46 from rhodecode.lib import app_globals
47 from rhodecode.config import utils
47 from rhodecode.config import utils
48 from rhodecode.config.routing import make_map
48 from rhodecode.config.routing import make_map
49 from rhodecode.config.jsroutes import generate_jsroutes_content
49 from rhodecode.config.jsroutes import generate_jsroutes_content
50
50
51 from rhodecode.lib import helpers
51 from rhodecode.lib import helpers
52 from rhodecode.lib.auth import set_available_permissions
52 from rhodecode.lib.auth import set_available_permissions
53 from rhodecode.lib.utils import (
53 from rhodecode.lib.utils import (
54 repo2db_mapper, make_db_config, set_rhodecode_config,
54 repo2db_mapper, make_db_config, set_rhodecode_config,
55 load_rcextensions)
55 load_rcextensions)
56 from rhodecode.lib.utils2 import str2bool, aslist
56 from rhodecode.lib.utils2 import str2bool, aslist
57 from rhodecode.lib.vcs import connect_vcs, start_vcs_server
57 from rhodecode.lib.vcs import connect_vcs, start_vcs_server
58 from rhodecode.model.scm import ScmModel
58 from rhodecode.model.scm import ScmModel
59
59
60 log = logging.getLogger(__name__)
60 log = logging.getLogger(__name__)
61
61
62 def load_environment(global_conf, app_conf, initial=False,
62 def load_environment(global_conf, app_conf, initial=False,
63 test_env=None, test_index=None):
63 test_env=None, test_index=None):
64 """
64 """
65 Configure the Pylons environment via the ``pylons.config``
65 Configure the Pylons environment via the ``pylons.config``
66 object
66 object
67 """
67 """
68 config = PylonsConfig()
68 config = PylonsConfig()
69
69
70
70
71 # Pylons paths
71 # Pylons paths
72 root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
72 root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
73 paths = {
73 paths = {
74 'root': root,
74 'root': root,
75 'controllers': os.path.join(root, 'controllers'),
75 'controllers': os.path.join(root, 'controllers'),
76 'static_files': os.path.join(root, 'public'),
76 'static_files': os.path.join(root, 'public'),
77 'templates': [os.path.join(root, 'templates')],
77 'templates': [os.path.join(root, 'templates')],
78 }
78 }
79
79
80 # Initialize config with the basic options
80 # Initialize config with the basic options
81 config.init_app(global_conf, app_conf, package='rhodecode', paths=paths)
81 config.init_app(global_conf, app_conf, package='rhodecode', paths=paths)
82
82
83 # store some globals into rhodecode
83 # store some globals into rhodecode
84 rhodecode.CELERY_ENABLED = str2bool(config['app_conf'].get('use_celery'))
84 rhodecode.CELERY_ENABLED = str2bool(config['app_conf'].get('use_celery'))
85 rhodecode.CELERY_EAGER = str2bool(
85 rhodecode.CELERY_EAGER = str2bool(
86 config['app_conf'].get('celery.always.eager'))
86 config['app_conf'].get('celery.always.eager'))
87
87
88 config['routes.map'] = make_map(config)
88 config['routes.map'] = make_map(config)
89
89
90 if asbool(config.get('generate_js_files', 'false')):
90 if asbool(config.get('generate_js_files', 'false')):
91 jsroutes = config['routes.map'].jsroutes()
91 jsroutes = config['routes.map'].jsroutes()
92 jsroutes_file_content = generate_jsroutes_content(jsroutes)
92 jsroutes_file_content = generate_jsroutes_content(jsroutes)
93 jsroutes_file_path = os.path.join(
93 jsroutes_file_path = os.path.join(
94 paths['static_files'], 'js', 'rhodecode', 'routes.js')
94 paths['static_files'], 'js', 'rhodecode', 'routes.js')
95
95
96 with io.open(jsroutes_file_path, 'w', encoding='utf-8') as f:
96 with io.open(jsroutes_file_path, 'w', encoding='utf-8') as f:
97 f.write(jsroutes_file_content)
97 f.write(jsroutes_file_content)
98
98
99 config['pylons.app_globals'] = app_globals.Globals(config)
99 config['pylons.app_globals'] = app_globals.Globals(config)
100 config['pylons.h'] = helpers
100 config['pylons.h'] = helpers
101 rhodecode.CONFIG = config
101 rhodecode.CONFIG = config
102
102
103 load_rcextensions(root_path=config['here'])
103 load_rcextensions(root_path=config['here'])
104
104
105 # Setup cache object as early as possible
105 # Setup cache object as early as possible
106 import pylons
106 import pylons
107 pylons.cache._push_object(config['pylons.app_globals'].cache)
107 pylons.cache._push_object(config['pylons.app_globals'].cache)
108
108
109 # Create the Mako TemplateLookup, with the default auto-escaping
109 # Create the Mako TemplateLookup, with the default auto-escaping
110 config['pylons.app_globals'].mako_lookup = TemplateLookup(
110 config['pylons.app_globals'].mako_lookup = TemplateLookup(
111 directories=paths['templates'],
111 directories=paths['templates'],
112 error_handler=handle_mako_error,
112 error_handler=handle_mako_error,
113 module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
113 module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
114 input_encoding='utf-8', default_filters=['escape'],
114 input_encoding='utf-8', default_filters=['escape'],
115 imports=['from webhelpers.html import escape'])
115 imports=['from webhelpers.html import escape'])
116
116
117 # sets the c attribute access when don't existing attribute are accessed
117 # sets the c attribute access when don't existing attribute are accessed
118 config['pylons.strict_tmpl_context'] = True
118 config['pylons.strict_tmpl_context'] = True
119
119
120 # configure channelstream
120 # configure channelstream
121 config['channelstream_config'] = {
121 config['channelstream_config'] = {
122 'enabled': asbool(config.get('channelstream.enabled', False)),
122 'enabled': asbool(config.get('channelstream.enabled', False)),
123 'server': config.get('channelstream.server'),
123 'server': config.get('channelstream.server'),
124 'secret': config.get('channelstream.secret')
124 'secret': config.get('channelstream.secret')
125 }
125 }
126
126
127 set_available_permissions(config)
127 set_available_permissions(config)
128 db_cfg = make_db_config(clear_session=True)
128 db_cfg = make_db_config(clear_session=True)
129
129
130 repos_path = list(db_cfg.items('paths'))[0][1]
130 repos_path = list(db_cfg.items('paths'))[0][1]
131 config['base_path'] = repos_path
131 config['base_path'] = repos_path
132
132
133 # store db config also in main global CONFIG
133 # store db config also in main global CONFIG
134 set_rhodecode_config(config)
134 set_rhodecode_config(config)
135
135
136 # configure instance id
136 # configure instance id
137 utils.set_instance_id(config)
137 utils.set_instance_id(config)
138
138
139 # CONFIGURATION OPTIONS HERE (note: all config options will override
139 # CONFIGURATION OPTIONS HERE (note: all config options will override
140 # any Pylons config options)
140 # any Pylons config options)
141
141
142 # store config reference into our module to skip import magic of pylons
142 # store config reference into our module to skip import magic of pylons
143 rhodecode.CONFIG.update(config)
143 rhodecode.CONFIG.update(config)
144
144
145 return config
145 return config
146
146
147
147
148 def load_pyramid_environment(global_config, settings):
148 def load_pyramid_environment(global_config, settings):
149 # Some parts of the code expect a merge of global and app settings.
149 # Some parts of the code expect a merge of global and app settings.
150 settings_merged = global_config.copy()
150 settings_merged = global_config.copy()
151 settings_merged.update(settings)
151 settings_merged.update(settings)
152
152
153 # Store the settings to make them available to other modules.
153 # Store the settings to make them available to other modules.
154 rhodecode.PYRAMID_SETTINGS = settings_merged
154 rhodecode.PYRAMID_SETTINGS = settings_merged
155
155
156 # If this is a test run we prepare the test environment like
156 # If this is a test run we prepare the test environment like
157 # creating a test database, test search index and test repositories.
157 # creating a test database, test search index and test repositories.
158 # This has to be done before the database connection is initialized.
158 # This has to be done before the database connection is initialized.
159 if settings['is_test']:
159 if settings['is_test']:
160 rhodecode.is_test = True
160 rhodecode.is_test = True
161 rhodecode.disable_error_handler = True
162
161 utils.initialize_test_environment(settings_merged)
163 utils.initialize_test_environment(settings_merged)
162
164
163 # Initialize the database connection.
165 # Initialize the database connection.
164 utils.initialize_database(settings_merged)
166 utils.initialize_database(settings_merged)
165
167
166 # Limit backends to `vcs.backends` from configuration
168 # Limit backends to `vcs.backends` from configuration
167 for alias in rhodecode.BACKENDS.keys():
169 for alias in rhodecode.BACKENDS.keys():
168 if alias not in settings['vcs.backends']:
170 if alias not in settings['vcs.backends']:
169 del rhodecode.BACKENDS[alias]
171 del rhodecode.BACKENDS[alias]
170 log.info('Enabled VCS backends: %s', rhodecode.BACKENDS.keys())
172 log.info('Enabled VCS backends: %s', rhodecode.BACKENDS.keys())
171
173
172 # initialize vcs client and optionally run the server if enabled
174 # initialize vcs client and optionally run the server if enabled
173 vcs_server_uri = settings['vcs.server']
175 vcs_server_uri = settings['vcs.server']
174 vcs_server_enabled = settings['vcs.server.enable']
176 vcs_server_enabled = settings['vcs.server.enable']
175 start_server = (
177 start_server = (
176 settings['vcs.start_server'] and
178 settings['vcs.start_server'] and
177 not int(os.environ.get('RC_VCSSERVER_TEST_DISABLE', '0')))
179 not int(os.environ.get('RC_VCSSERVER_TEST_DISABLE', '0')))
178
180
179 if vcs_server_enabled and start_server:
181 if vcs_server_enabled and start_server:
180 log.info("Starting vcsserver")
182 log.info("Starting vcsserver")
181 start_vcs_server(server_and_port=vcs_server_uri,
183 start_vcs_server(server_and_port=vcs_server_uri,
182 protocol=utils.get_vcs_server_protocol(settings),
184 protocol=utils.get_vcs_server_protocol(settings),
183 log_level=settings['vcs.server.log_level'])
185 log_level=settings['vcs.server.log_level'])
184
186
185 utils.configure_pyro4(settings)
187 utils.configure_pyro4(settings)
186 utils.configure_vcs(settings)
188 utils.configure_vcs(settings)
187 if vcs_server_enabled:
189 if vcs_server_enabled:
188 connect_vcs(vcs_server_uri, utils.get_vcs_server_protocol(settings))
190 connect_vcs(vcs_server_uri, utils.get_vcs_server_protocol(settings))
@@ -1,497 +1,505 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Pylons middleware initialization
22 Pylons middleware initialization
23 """
23 """
24 import logging
24 import logging
25 from collections import OrderedDict
25 from collections import OrderedDict
26
26
27 from paste.registry import RegistryManager
27 from paste.registry import RegistryManager
28 from paste.gzipper import make_gzip_middleware
28 from paste.gzipper import make_gzip_middleware
29 from pylons.wsgiapp import PylonsApp
29 from pylons.wsgiapp import PylonsApp
30 from pyramid.authorization import ACLAuthorizationPolicy
30 from pyramid.authorization import ACLAuthorizationPolicy
31 from pyramid.config import Configurator
31 from pyramid.config import Configurator
32 from pyramid.settings import asbool, aslist
32 from pyramid.settings import asbool, aslist
33 from pyramid.wsgi import wsgiapp
33 from pyramid.wsgi import wsgiapp
34 from pyramid.httpexceptions import HTTPError, HTTPInternalServerError, HTTPFound
34 from pyramid.httpexceptions import HTTPError, HTTPInternalServerError, HTTPFound
35 from pyramid.events import ApplicationCreated
35 from pyramid.events import ApplicationCreated
36 import pyramid.httpexceptions as httpexceptions
36 import pyramid.httpexceptions as httpexceptions
37 from pyramid.renderers import render_to_response
37 from pyramid.renderers import render_to_response
38 from routes.middleware import RoutesMiddleware
38 from routes.middleware import RoutesMiddleware
39 import routes.util
39 import routes.util
40
40
41 import rhodecode
41 import rhodecode
42 from rhodecode.model import meta
42 from rhodecode.model import meta
43 from rhodecode.config import patches
43 from rhodecode.config import patches
44 from rhodecode.config.routing import STATIC_FILE_PREFIX
44 from rhodecode.config.routing import STATIC_FILE_PREFIX
45 from rhodecode.config.environment import (
45 from rhodecode.config.environment import (
46 load_environment, load_pyramid_environment)
46 load_environment, load_pyramid_environment)
47 from rhodecode.lib.exceptions import VCSServerUnavailable
48 from rhodecode.lib.vcs.exceptions import VCSCommunicationError
47 from rhodecode.lib.middleware import csrf
49 from rhodecode.lib.middleware import csrf
48 from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled
50 from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled
49 from rhodecode.lib.middleware.disable_vcs import DisableVCSPagesWrapper
50 from rhodecode.lib.middleware.https_fixup import HttpsFixup
51 from rhodecode.lib.middleware.https_fixup import HttpsFixup
51 from rhodecode.lib.middleware.vcs import VCSMiddleware
52 from rhodecode.lib.middleware.vcs import VCSMiddleware
52 from rhodecode.lib.plugins.utils import register_rhodecode_plugin
53 from rhodecode.lib.plugins.utils import register_rhodecode_plugin
53 from rhodecode.lib.utils2 import aslist as rhodecode_aslist
54 from rhodecode.lib.utils2 import aslist as rhodecode_aslist
54 from rhodecode.subscribers import scan_repositories_if_enabled
55 from rhodecode.subscribers import scan_repositories_if_enabled
55
56
56
57
57 log = logging.getLogger(__name__)
58 log = logging.getLogger(__name__)
58
59
59
60
60 # this is used to avoid avoid the route lookup overhead in routesmiddleware
61 # this is used to avoid avoid the route lookup overhead in routesmiddleware
61 # for certain routes which won't go to pylons to - eg. static files, debugger
62 # for certain routes which won't go to pylons to - eg. static files, debugger
62 # it is only needed for the pylons migration and can be removed once complete
63 # it is only needed for the pylons migration and can be removed once complete
63 class SkippableRoutesMiddleware(RoutesMiddleware):
64 class SkippableRoutesMiddleware(RoutesMiddleware):
64 """ Routes middleware that allows you to skip prefixes """
65 """ Routes middleware that allows you to skip prefixes """
65
66
66 def __init__(self, *args, **kw):
67 def __init__(self, *args, **kw):
67 self.skip_prefixes = kw.pop('skip_prefixes', [])
68 self.skip_prefixes = kw.pop('skip_prefixes', [])
68 super(SkippableRoutesMiddleware, self).__init__(*args, **kw)
69 super(SkippableRoutesMiddleware, self).__init__(*args, **kw)
69
70
70 def __call__(self, environ, start_response):
71 def __call__(self, environ, start_response):
71 for prefix in self.skip_prefixes:
72 for prefix in self.skip_prefixes:
72 if environ['PATH_INFO'].startswith(prefix):
73 if environ['PATH_INFO'].startswith(prefix):
73 # added to avoid the case when a missing /_static route falls
74 # added to avoid the case when a missing /_static route falls
74 # through to pylons and causes an exception as pylons is
75 # through to pylons and causes an exception as pylons is
75 # expecting wsgiorg.routingargs to be set in the environ
76 # expecting wsgiorg.routingargs to be set in the environ
76 # by RoutesMiddleware.
77 # by RoutesMiddleware.
77 if 'wsgiorg.routing_args' not in environ:
78 if 'wsgiorg.routing_args' not in environ:
78 environ['wsgiorg.routing_args'] = (None, {})
79 environ['wsgiorg.routing_args'] = (None, {})
79 return self.app(environ, start_response)
80 return self.app(environ, start_response)
80
81
81 return super(SkippableRoutesMiddleware, self).__call__(
82 return super(SkippableRoutesMiddleware, self).__call__(
82 environ, start_response)
83 environ, start_response)
83
84
84
85
85 def make_app(global_conf, static_files=True, **app_conf):
86 def make_app(global_conf, static_files=True, **app_conf):
86 """Create a Pylons WSGI application and return it
87 """Create a Pylons WSGI application and return it
87
88
88 ``global_conf``
89 ``global_conf``
89 The inherited configuration for this application. Normally from
90 The inherited configuration for this application. Normally from
90 the [DEFAULT] section of the Paste ini file.
91 the [DEFAULT] section of the Paste ini file.
91
92
92 ``app_conf``
93 ``app_conf``
93 The application's local configuration. Normally specified in
94 The application's local configuration. Normally specified in
94 the [app:<name>] section of the Paste ini file (where <name>
95 the [app:<name>] section of the Paste ini file (where <name>
95 defaults to main).
96 defaults to main).
96
97
97 """
98 """
98 # Apply compatibility patches
99 # Apply compatibility patches
99 patches.kombu_1_5_1_python_2_7_11()
100 patches.kombu_1_5_1_python_2_7_11()
100 patches.inspect_getargspec()
101 patches.inspect_getargspec()
101
102
102 # Configure the Pylons environment
103 # Configure the Pylons environment
103 config = load_environment(global_conf, app_conf)
104 config = load_environment(global_conf, app_conf)
104
105
105 # The Pylons WSGI app
106 # The Pylons WSGI app
106 app = PylonsApp(config=config)
107 app = PylonsApp(config=config)
107 if rhodecode.is_test:
108 if rhodecode.is_test:
108 app = csrf.CSRFDetector(app)
109 app = csrf.CSRFDetector(app)
109
110
110 expected_origin = config.get('expected_origin')
111 expected_origin = config.get('expected_origin')
111 if expected_origin:
112 if expected_origin:
112 # The API can be accessed from other Origins.
113 # The API can be accessed from other Origins.
113 app = csrf.OriginChecker(app, expected_origin,
114 app = csrf.OriginChecker(app, expected_origin,
114 skip_urls=[routes.util.url_for('api')])
115 skip_urls=[routes.util.url_for('api')])
115
116
116 # Establish the Registry for this application
117 # Establish the Registry for this application
117 app = RegistryManager(app)
118 app = RegistryManager(app)
118
119
119 app.config = config
120 app.config = config
120
121
121 return app
122 return app
122
123
123
124
124 def make_pyramid_app(global_config, **settings):
125 def make_pyramid_app(global_config, **settings):
125 """
126 """
126 Constructs the WSGI application based on Pyramid and wraps the Pylons based
127 Constructs the WSGI application based on Pyramid and wraps the Pylons based
127 application.
128 application.
128
129
129 Specials:
130 Specials:
130
131
131 * We migrate from Pylons to Pyramid. While doing this, we keep both
132 * We migrate from Pylons to Pyramid. While doing this, we keep both
132 frameworks functional. This involves moving some WSGI middlewares around
133 frameworks functional. This involves moving some WSGI middlewares around
133 and providing access to some data internals, so that the old code is
134 and providing access to some data internals, so that the old code is
134 still functional.
135 still functional.
135
136
136 * The application can also be integrated like a plugin via the call to
137 * The application can also be integrated like a plugin via the call to
137 `includeme`. This is accompanied with the other utility functions which
138 `includeme`. This is accompanied with the other utility functions which
138 are called. Changing this should be done with great care to not break
139 are called. Changing this should be done with great care to not break
139 cases when these fragments are assembled from another place.
140 cases when these fragments are assembled from another place.
140
141
141 """
142 """
142 # The edition string should be available in pylons too, so we add it here
143 # The edition string should be available in pylons too, so we add it here
143 # before copying the settings.
144 # before copying the settings.
144 settings.setdefault('rhodecode.edition', 'Community Edition')
145 settings.setdefault('rhodecode.edition', 'Community Edition')
145
146
146 # As long as our Pylons application does expect "unprepared" settings, make
147 # As long as our Pylons application does expect "unprepared" settings, make
147 # sure that we keep an unmodified copy. This avoids unintentional change of
148 # sure that we keep an unmodified copy. This avoids unintentional change of
148 # behavior in the old application.
149 # behavior in the old application.
149 settings_pylons = settings.copy()
150 settings_pylons = settings.copy()
150
151
151 sanitize_settings_and_apply_defaults(settings)
152 sanitize_settings_and_apply_defaults(settings)
152 config = Configurator(settings=settings)
153 config = Configurator(settings=settings)
153 add_pylons_compat_data(config.registry, global_config, settings_pylons)
154 add_pylons_compat_data(config.registry, global_config, settings_pylons)
154
155
155 load_pyramid_environment(global_config, settings)
156 load_pyramid_environment(global_config, settings)
156
157
157 includeme_first(config)
158 includeme_first(config)
158 includeme(config)
159 includeme(config)
159 pyramid_app = config.make_wsgi_app()
160 pyramid_app = config.make_wsgi_app()
160 pyramid_app = wrap_app_in_wsgi_middlewares(pyramid_app, config)
161 pyramid_app = wrap_app_in_wsgi_middlewares(pyramid_app, config)
161 pyramid_app.config = config
162 pyramid_app.config = config
162
163
163 # creating the app uses a connection - return it after we are done
164 # creating the app uses a connection - return it after we are done
164 meta.Session.remove()
165 meta.Session.remove()
165
166
166 return pyramid_app
167 return pyramid_app
167
168
168
169
169 def make_not_found_view(config):
170 def make_not_found_view(config):
170 """
171 """
171 This creates the view which should be registered as not-found-view to
172 This creates the view which should be registered as not-found-view to
172 pyramid. Basically it contains of the old pylons app, converted to a view.
173 pyramid. Basically it contains of the old pylons app, converted to a view.
173 Additionally it is wrapped by some other middlewares.
174 Additionally it is wrapped by some other middlewares.
174 """
175 """
175 settings = config.registry.settings
176 settings = config.registry.settings
176 vcs_server_enabled = settings['vcs.server.enable']
177 vcs_server_enabled = settings['vcs.server.enable']
177
178
178 # Make pylons app from unprepared settings.
179 # Make pylons app from unprepared settings.
179 pylons_app = make_app(
180 pylons_app = make_app(
180 config.registry._pylons_compat_global_config,
181 config.registry._pylons_compat_global_config,
181 **config.registry._pylons_compat_settings)
182 **config.registry._pylons_compat_settings)
182 config.registry._pylons_compat_config = pylons_app.config
183 config.registry._pylons_compat_config = pylons_app.config
183
184
184 # Appenlight monitoring.
185 # Appenlight monitoring.
185 pylons_app, appenlight_client = wrap_in_appenlight_if_enabled(
186 pylons_app, appenlight_client = wrap_in_appenlight_if_enabled(
186 pylons_app, settings)
187 pylons_app, settings)
187
188
188 # The VCSMiddleware shall operate like a fallback if pyramid doesn't find
189 # The VCSMiddleware shall operate like a fallback if pyramid doesn't find
189 # a view to handle the request. Therefore we wrap it around the pylons app.
190 # a view to handle the request. Therefore we wrap it around the pylons app.
190 if vcs_server_enabled:
191 if vcs_server_enabled:
191 pylons_app = VCSMiddleware(
192 pylons_app = VCSMiddleware(
192 pylons_app, settings, appenlight_client, registry=config.registry)
193 pylons_app, settings, appenlight_client, registry=config.registry)
193
194
194 pylons_app_as_view = wsgiapp(pylons_app)
195 pylons_app_as_view = wsgiapp(pylons_app)
195
196
196 # Protect from VCS Server error related pages when server is not available
197 if not vcs_server_enabled:
198 pylons_app_as_view = DisableVCSPagesWrapper(pylons_app_as_view)
199
200 def pylons_app_with_error_handler(context, request):
197 def pylons_app_with_error_handler(context, request):
201 """
198 """
202 Handle exceptions from rc pylons app:
199 Handle exceptions from rc pylons app:
203
200
204 - old webob type exceptions get converted to pyramid exceptions
201 - old webob type exceptions get converted to pyramid exceptions
205 - pyramid exceptions are passed to the error handler view
202 - pyramid exceptions are passed to the error handler view
206 """
203 """
207 def is_vcs_response(response):
204 def is_vcs_response(response):
208 return 'X-RhodeCode-Backend' in response.headers
205 return 'X-RhodeCode-Backend' in response.headers
209
206
210 def is_http_error(response):
207 def is_http_error(response):
211 # webob type error responses
208 # webob type error responses
212 return (400 <= response.status_int <= 599)
209 return (400 <= response.status_int <= 599)
213
210
214 def is_error_handling_needed(response):
211 def is_error_handling_needed(response):
215 return is_http_error(response) and not is_vcs_response(response)
212 return is_http_error(response) and not is_vcs_response(response)
216
213
217 try:
214 try:
218 response = pylons_app_as_view(context, request)
215 response = pylons_app_as_view(context, request)
219 if is_error_handling_needed(response):
216 if is_error_handling_needed(response):
220 response = webob_to_pyramid_http_response(response)
217 response = webob_to_pyramid_http_response(response)
221 return error_handler(response, request)
218 return error_handler(response, request)
222 except HTTPError as e: # pyramid type exceptions
219 except HTTPError as e: # pyramid type exceptions
223 return error_handler(e, request)
220 return error_handler(e, request)
224 except Exception:
221 except Exception as e:
225 if settings.get('debugtoolbar.enabled', False):
222 log.exception(e)
223
224 if (settings.get('debugtoolbar.enabled', False) or
225 rhodecode.disable_error_handler):
226 raise
226 raise
227
228 if isinstance(e, VCSCommunicationError):
229 return error_handler(VCSServerUnavailable(), request)
230
227 return error_handler(HTTPInternalServerError(), request)
231 return error_handler(HTTPInternalServerError(), request)
232
228 return response
233 return response
229
234
230 return pylons_app_with_error_handler
235 return pylons_app_with_error_handler
231
236
232
237
233 def add_pylons_compat_data(registry, global_config, settings):
238 def add_pylons_compat_data(registry, global_config, settings):
234 """
239 """
235 Attach data to the registry to support the Pylons integration.
240 Attach data to the registry to support the Pylons integration.
236 """
241 """
237 registry._pylons_compat_global_config = global_config
242 registry._pylons_compat_global_config = global_config
238 registry._pylons_compat_settings = settings
243 registry._pylons_compat_settings = settings
239
244
240
245
241 def webob_to_pyramid_http_response(webob_response):
246 def webob_to_pyramid_http_response(webob_response):
242 ResponseClass = httpexceptions.status_map[webob_response.status_int]
247 ResponseClass = httpexceptions.status_map[webob_response.status_int]
243 pyramid_response = ResponseClass(webob_response.status)
248 pyramid_response = ResponseClass(webob_response.status)
244 pyramid_response.status = webob_response.status
249 pyramid_response.status = webob_response.status
245 pyramid_response.headers.update(webob_response.headers)
250 pyramid_response.headers.update(webob_response.headers)
246 if pyramid_response.headers['content-type'] == 'text/html':
251 if pyramid_response.headers['content-type'] == 'text/html':
247 pyramid_response.headers['content-type'] = 'text/html; charset=UTF-8'
252 pyramid_response.headers['content-type'] = 'text/html; charset=UTF-8'
248 return pyramid_response
253 return pyramid_response
249
254
250
255
251 def error_handler(exception, request):
256 def error_handler(exception, request):
252 # TODO: dan: replace the old pylons error controller with this
253 from rhodecode.model.settings import SettingsModel
257 from rhodecode.model.settings import SettingsModel
254 from rhodecode.lib.utils2 import AttributeDict
258 from rhodecode.lib.utils2 import AttributeDict
255
259
256 try:
260 try:
257 rc_config = SettingsModel().get_all_settings()
261 rc_config = SettingsModel().get_all_settings()
258 except Exception:
262 except Exception:
259 log.exception('failed to fetch settings')
263 log.exception('failed to fetch settings')
260 rc_config = {}
264 rc_config = {}
261
265
262 base_response = HTTPInternalServerError()
266 base_response = HTTPInternalServerError()
263 # prefer original exception for the response since it may have headers set
267 # prefer original exception for the response since it may have headers set
264 if isinstance(exception, HTTPError):
268 if isinstance(exception, HTTPError):
265 base_response = exception
269 base_response = exception
266
270
267 c = AttributeDict()
271 c = AttributeDict()
268 c.error_message = base_response.status
272 c.error_message = base_response.status
269 c.error_explanation = base_response.explanation or str(base_response)
273 c.error_explanation = base_response.explanation or str(base_response)
270 c.visual = AttributeDict()
274 c.visual = AttributeDict()
271
275
272 c.visual.rhodecode_support_url = (
276 c.visual.rhodecode_support_url = (
273 request.registry.settings.get('rhodecode_support_url') or
277 request.registry.settings.get('rhodecode_support_url') or
274 request.route_url('rhodecode_support')
278 request.route_url('rhodecode_support')
275 )
279 )
276 c.redirect_time = 0
280 c.redirect_time = 0
277 c.rhodecode_name = rc_config.get('rhodecode_title', '')
281 c.rhodecode_name = rc_config.get('rhodecode_title', '')
278 if not c.rhodecode_name:
282 if not c.rhodecode_name:
279 c.rhodecode_name = 'Rhodecode'
283 c.rhodecode_name = 'Rhodecode'
280
284
285 c.causes = []
286 if hasattr(base_response, 'causes'):
287 c.causes = base_response.causes
288
281 response = render_to_response(
289 response = render_to_response(
282 '/errors/error_document.html', {'c': c}, request=request,
290 '/errors/error_document.html', {'c': c}, request=request,
283 response=base_response)
291 response=base_response)
284
292
285 return response
293 return response
286
294
287
295
288 def includeme(config):
296 def includeme(config):
289 settings = config.registry.settings
297 settings = config.registry.settings
290
298
291 # plugin information
299 # plugin information
292 config.registry.rhodecode_plugins = OrderedDict()
300 config.registry.rhodecode_plugins = OrderedDict()
293
301
294 config.add_directive(
302 config.add_directive(
295 'register_rhodecode_plugin', register_rhodecode_plugin)
303 'register_rhodecode_plugin', register_rhodecode_plugin)
296
304
297 if asbool(settings.get('appenlight', 'false')):
305 if asbool(settings.get('appenlight', 'false')):
298 config.include('appenlight_client.ext.pyramid_tween')
306 config.include('appenlight_client.ext.pyramid_tween')
299
307
300 # Includes which are required. The application would fail without them.
308 # Includes which are required. The application would fail without them.
301 config.include('pyramid_mako')
309 config.include('pyramid_mako')
302 config.include('pyramid_beaker')
310 config.include('pyramid_beaker')
303 config.include('rhodecode.channelstream')
311 config.include('rhodecode.channelstream')
304 config.include('rhodecode.admin')
312 config.include('rhodecode.admin')
305 config.include('rhodecode.authentication')
313 config.include('rhodecode.authentication')
306 config.include('rhodecode.integrations')
314 config.include('rhodecode.integrations')
307 config.include('rhodecode.login')
315 config.include('rhodecode.login')
308 config.include('rhodecode.tweens')
316 config.include('rhodecode.tweens')
309 config.include('rhodecode.api')
317 config.include('rhodecode.api')
310 config.include('rhodecode.svn_support')
318 config.include('rhodecode.svn_support')
311 config.add_route(
319 config.add_route(
312 'rhodecode_support', 'https://rhodecode.com/help/', static=True)
320 'rhodecode_support', 'https://rhodecode.com/help/', static=True)
313
321
314 # Add subscribers.
322 # Add subscribers.
315 config.add_subscriber(scan_repositories_if_enabled, ApplicationCreated)
323 config.add_subscriber(scan_repositories_if_enabled, ApplicationCreated)
316
324
317 # Set the authorization policy.
325 # Set the authorization policy.
318 authz_policy = ACLAuthorizationPolicy()
326 authz_policy = ACLAuthorizationPolicy()
319 config.set_authorization_policy(authz_policy)
327 config.set_authorization_policy(authz_policy)
320
328
321 # Set the default renderer for HTML templates to mako.
329 # Set the default renderer for HTML templates to mako.
322 config.add_mako_renderer('.html')
330 config.add_mako_renderer('.html')
323
331
324 # include RhodeCode plugins
332 # include RhodeCode plugins
325 includes = aslist(settings.get('rhodecode.includes', []))
333 includes = aslist(settings.get('rhodecode.includes', []))
326 for inc in includes:
334 for inc in includes:
327 config.include(inc)
335 config.include(inc)
328
336
329 # This is the glue which allows us to migrate in chunks. By registering the
337 # This is the glue which allows us to migrate in chunks. By registering the
330 # pylons based application as the "Not Found" view in Pyramid, we will
338 # pylons based application as the "Not Found" view in Pyramid, we will
331 # fallback to the old application each time the new one does not yet know
339 # fallback to the old application each time the new one does not yet know
332 # how to handle a request.
340 # how to handle a request.
333 config.add_notfound_view(make_not_found_view(config))
341 config.add_notfound_view(make_not_found_view(config))
334
342
335 if not settings.get('debugtoolbar.enabled', False):
343 if not settings.get('debugtoolbar.enabled', False):
336 # if no toolbar, then any exception gets caught and rendered
344 # if no toolbar, then any exception gets caught and rendered
337 config.add_view(error_handler, context=Exception)
345 config.add_view(error_handler, context=Exception)
338
346
339 config.add_view(error_handler, context=HTTPError)
347 config.add_view(error_handler, context=HTTPError)
340
348
341
349
342 def includeme_first(config):
350 def includeme_first(config):
343 # redirect automatic browser favicon.ico requests to correct place
351 # redirect automatic browser favicon.ico requests to correct place
344 def favicon_redirect(context, request):
352 def favicon_redirect(context, request):
345 return HTTPFound(
353 return HTTPFound(
346 request.static_path('rhodecode:public/images/favicon.ico'))
354 request.static_path('rhodecode:public/images/favicon.ico'))
347
355
348 config.add_view(favicon_redirect, route_name='favicon')
356 config.add_view(favicon_redirect, route_name='favicon')
349 config.add_route('favicon', '/favicon.ico')
357 config.add_route('favicon', '/favicon.ico')
350
358
351 config.add_static_view(
359 config.add_static_view(
352 '_static/deform', 'deform:static')
360 '_static/deform', 'deform:static')
353 config.add_static_view(
361 config.add_static_view(
354 '_static/rhodecode', path='rhodecode:public', cache_max_age=3600 * 24)
362 '_static/rhodecode', path='rhodecode:public', cache_max_age=3600 * 24)
355
363
356
364
357 def wrap_app_in_wsgi_middlewares(pyramid_app, config):
365 def wrap_app_in_wsgi_middlewares(pyramid_app, config):
358 """
366 """
359 Apply outer WSGI middlewares around the application.
367 Apply outer WSGI middlewares around the application.
360
368
361 Part of this has been moved up from the Pylons layer, so that the
369 Part of this has been moved up from the Pylons layer, so that the
362 data is also available if old Pylons code is hit through an already ported
370 data is also available if old Pylons code is hit through an already ported
363 view.
371 view.
364 """
372 """
365 settings = config.registry.settings
373 settings = config.registry.settings
366
374
367 # enable https redirects based on HTTP_X_URL_SCHEME set by proxy
375 # enable https redirects based on HTTP_X_URL_SCHEME set by proxy
368 pyramid_app = HttpsFixup(pyramid_app, settings)
376 pyramid_app = HttpsFixup(pyramid_app, settings)
369
377
370 # Add RoutesMiddleware to support the pylons compatibility tween during
378 # Add RoutesMiddleware to support the pylons compatibility tween during
371 # migration to pyramid.
379 # migration to pyramid.
372 pyramid_app = SkippableRoutesMiddleware(
380 pyramid_app = SkippableRoutesMiddleware(
373 pyramid_app, config.registry._pylons_compat_config['routes.map'],
381 pyramid_app, config.registry._pylons_compat_config['routes.map'],
374 skip_prefixes=(STATIC_FILE_PREFIX, '/_debug_toolbar'))
382 skip_prefixes=(STATIC_FILE_PREFIX, '/_debug_toolbar'))
375
383
376 pyramid_app, _ = wrap_in_appenlight_if_enabled(pyramid_app, settings)
384 pyramid_app, _ = wrap_in_appenlight_if_enabled(pyramid_app, settings)
377
385
378 if settings['gzip_responses']:
386 if settings['gzip_responses']:
379 pyramid_app = make_gzip_middleware(
387 pyramid_app = make_gzip_middleware(
380 pyramid_app, settings, compress_level=1)
388 pyramid_app, settings, compress_level=1)
381
389
382
390
383 # this should be the outer most middleware in the wsgi stack since
391 # this should be the outer most middleware in the wsgi stack since
384 # middleware like Routes make database calls
392 # middleware like Routes make database calls
385 def pyramid_app_with_cleanup(environ, start_response):
393 def pyramid_app_with_cleanup(environ, start_response):
386 try:
394 try:
387 return pyramid_app(environ, start_response)
395 return pyramid_app(environ, start_response)
388 finally:
396 finally:
389 # Dispose current database session and rollback uncommitted
397 # Dispose current database session and rollback uncommitted
390 # transactions.
398 # transactions.
391 meta.Session.remove()
399 meta.Session.remove()
392
400
393 # In a single threaded mode server, on non sqlite db we should have
401 # In a single threaded mode server, on non sqlite db we should have
394 # '0 Current Checked out connections' at the end of a request,
402 # '0 Current Checked out connections' at the end of a request,
395 # if not, then something, somewhere is leaving a connection open
403 # if not, then something, somewhere is leaving a connection open
396 pool = meta.Base.metadata.bind.engine.pool
404 pool = meta.Base.metadata.bind.engine.pool
397 log.debug('sa pool status: %s', pool.status())
405 log.debug('sa pool status: %s', pool.status())
398
406
399
407
400 return pyramid_app_with_cleanup
408 return pyramid_app_with_cleanup
401
409
402
410
403 def sanitize_settings_and_apply_defaults(settings):
411 def sanitize_settings_and_apply_defaults(settings):
404 """
412 """
405 Applies settings defaults and does all type conversion.
413 Applies settings defaults and does all type conversion.
406
414
407 We would move all settings parsing and preparation into this place, so that
415 We would move all settings parsing and preparation into this place, so that
408 we have only one place left which deals with this part. The remaining parts
416 we have only one place left which deals with this part. The remaining parts
409 of the application would start to rely fully on well prepared settings.
417 of the application would start to rely fully on well prepared settings.
410
418
411 This piece would later be split up per topic to avoid a big fat monster
419 This piece would later be split up per topic to avoid a big fat monster
412 function.
420 function.
413 """
421 """
414
422
415 # Pyramid's mako renderer has to search in the templates folder so that the
423 # Pyramid's mako renderer has to search in the templates folder so that the
416 # old templates still work. Ported and new templates are expected to use
424 # old templates still work. Ported and new templates are expected to use
417 # real asset specifications for the includes.
425 # real asset specifications for the includes.
418 mako_directories = settings.setdefault('mako.directories', [
426 mako_directories = settings.setdefault('mako.directories', [
419 # Base templates of the original Pylons application
427 # Base templates of the original Pylons application
420 'rhodecode:templates',
428 'rhodecode:templates',
421 ])
429 ])
422 log.debug(
430 log.debug(
423 "Using the following Mako template directories: %s",
431 "Using the following Mako template directories: %s",
424 mako_directories)
432 mako_directories)
425
433
426 # Default includes, possible to change as a user
434 # Default includes, possible to change as a user
427 pyramid_includes = settings.setdefault('pyramid.includes', [
435 pyramid_includes = settings.setdefault('pyramid.includes', [
428 'rhodecode.lib.middleware.request_wrapper',
436 'rhodecode.lib.middleware.request_wrapper',
429 ])
437 ])
430 log.debug(
438 log.debug(
431 "Using the following pyramid.includes: %s",
439 "Using the following pyramid.includes: %s",
432 pyramid_includes)
440 pyramid_includes)
433
441
434 # TODO: johbo: Re-think this, usually the call to config.include
442 # TODO: johbo: Re-think this, usually the call to config.include
435 # should allow to pass in a prefix.
443 # should allow to pass in a prefix.
436 settings.setdefault('rhodecode.api.url', '/_admin/api')
444 settings.setdefault('rhodecode.api.url', '/_admin/api')
437
445
438 # Sanitize generic settings.
446 # Sanitize generic settings.
439 _list_setting(settings, 'default_encoding', 'UTF-8')
447 _list_setting(settings, 'default_encoding', 'UTF-8')
440 _bool_setting(settings, 'is_test', 'false')
448 _bool_setting(settings, 'is_test', 'false')
441 _bool_setting(settings, 'gzip_responses', 'false')
449 _bool_setting(settings, 'gzip_responses', 'false')
442
450
443 # Call split out functions that sanitize settings for each topic.
451 # Call split out functions that sanitize settings for each topic.
444 _sanitize_appenlight_settings(settings)
452 _sanitize_appenlight_settings(settings)
445 _sanitize_vcs_settings(settings)
453 _sanitize_vcs_settings(settings)
446
454
447 return settings
455 return settings
448
456
449
457
450 def _sanitize_appenlight_settings(settings):
458 def _sanitize_appenlight_settings(settings):
451 _bool_setting(settings, 'appenlight', 'false')
459 _bool_setting(settings, 'appenlight', 'false')
452
460
453
461
454 def _sanitize_vcs_settings(settings):
462 def _sanitize_vcs_settings(settings):
455 """
463 """
456 Applies settings defaults and does type conversion for all VCS related
464 Applies settings defaults and does type conversion for all VCS related
457 settings.
465 settings.
458 """
466 """
459 _string_setting(settings, 'vcs.svn.compatible_version', '')
467 _string_setting(settings, 'vcs.svn.compatible_version', '')
460 _string_setting(settings, 'git_rev_filter', '--all')
468 _string_setting(settings, 'git_rev_filter', '--all')
461 _string_setting(settings, 'vcs.hooks.protocol', 'pyro4')
469 _string_setting(settings, 'vcs.hooks.protocol', 'pyro4')
462 _string_setting(settings, 'vcs.server', '')
470 _string_setting(settings, 'vcs.server', '')
463 _string_setting(settings, 'vcs.server.log_level', 'debug')
471 _string_setting(settings, 'vcs.server.log_level', 'debug')
464 _string_setting(settings, 'vcs.server.protocol', 'pyro4')
472 _string_setting(settings, 'vcs.server.protocol', 'pyro4')
465 _bool_setting(settings, 'startup.import_repos', 'false')
473 _bool_setting(settings, 'startup.import_repos', 'false')
466 _bool_setting(settings, 'vcs.hooks.direct_calls', 'false')
474 _bool_setting(settings, 'vcs.hooks.direct_calls', 'false')
467 _bool_setting(settings, 'vcs.server.enable', 'true')
475 _bool_setting(settings, 'vcs.server.enable', 'true')
468 _bool_setting(settings, 'vcs.start_server', 'false')
476 _bool_setting(settings, 'vcs.start_server', 'false')
469 _list_setting(settings, 'vcs.backends', 'hg, git, svn')
477 _list_setting(settings, 'vcs.backends', 'hg, git, svn')
470 _int_setting(settings, 'vcs.connection_timeout', 3600)
478 _int_setting(settings, 'vcs.connection_timeout', 3600)
471
479
472
480
473 def _int_setting(settings, name, default):
481 def _int_setting(settings, name, default):
474 settings[name] = int(settings.get(name, default))
482 settings[name] = int(settings.get(name, default))
475
483
476
484
477 def _bool_setting(settings, name, default):
485 def _bool_setting(settings, name, default):
478 input = settings.get(name, default)
486 input = settings.get(name, default)
479 if isinstance(input, unicode):
487 if isinstance(input, unicode):
480 input = input.encode('utf8')
488 input = input.encode('utf8')
481 settings[name] = asbool(input)
489 settings[name] = asbool(input)
482
490
483
491
484 def _list_setting(settings, name, default):
492 def _list_setting(settings, name, default):
485 raw_value = settings.get(name, default)
493 raw_value = settings.get(name, default)
486
494
487 old_separator = ','
495 old_separator = ','
488 if old_separator in raw_value:
496 if old_separator in raw_value:
489 # If we get a comma separated list, pass it to our own function.
497 # If we get a comma separated list, pass it to our own function.
490 settings[name] = rhodecode_aslist(raw_value, sep=old_separator)
498 settings[name] = rhodecode_aslist(raw_value, sep=old_separator)
491 else:
499 else:
492 # Otherwise we assume it uses pyramids space/newline separation.
500 # Otherwise we assume it uses pyramids space/newline separation.
493 settings[name] = aslist(raw_value)
501 settings[name] = aslist(raw_value)
494
502
495
503
496 def _string_setting(settings, name, default):
504 def _string_setting(settings, name, default):
497 settings[name] = settings.get(name, default).lower()
505 settings[name] = settings.get(name, default).lower()
@@ -1,1161 +1,1160 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 Routes configuration
22 Routes configuration
23
23
24 The more specific and detailed routes should be defined first so they
24 The more specific and detailed routes should be defined first so they
25 may take precedent over the more generic routes. For more information
25 may take precedent over the more generic routes. For more information
26 refer to the routes manual at http://routes.groovie.org/docs/
26 refer to the routes manual at http://routes.groovie.org/docs/
27
27
28 IMPORTANT: if you change any routing here, make sure to take a look at lib/base.py
28 IMPORTANT: if you change any routing here, make sure to take a look at lib/base.py
29 and _route_name variable which uses some of stored naming here to do redirects.
29 and _route_name variable which uses some of stored naming here to do redirects.
30 """
30 """
31 import os
31 import os
32 import re
32 import re
33 from routes import Mapper
33 from routes import Mapper
34
34
35 from rhodecode.config import routing_links
35 from rhodecode.config import routing_links
36
36
37 # prefix for non repository related links needs to be prefixed with `/`
37 # prefix for non repository related links needs to be prefixed with `/`
38 ADMIN_PREFIX = '/_admin'
38 ADMIN_PREFIX = '/_admin'
39 STATIC_FILE_PREFIX = '/_static'
39 STATIC_FILE_PREFIX = '/_static'
40
40
41 # Default requirements for URL parts
41 # Default requirements for URL parts
42 URL_NAME_REQUIREMENTS = {
42 URL_NAME_REQUIREMENTS = {
43 # group name can have a slash in them, but they must not end with a slash
43 # group name can have a slash in them, but they must not end with a slash
44 'group_name': r'.*?[^/]',
44 'group_name': r'.*?[^/]',
45 'repo_group_name': r'.*?[^/]',
45 # repo names can have a slash in them, but they must not end with a slash
46 # repo names can have a slash in them, but they must not end with a slash
46 'repo_name': r'.*?[^/]',
47 'repo_name': r'.*?[^/]',
47 # file path eats up everything at the end
48 # file path eats up everything at the end
48 'f_path': r'.*',
49 'f_path': r'.*',
49 # reference types
50 # reference types
50 'source_ref_type': '(branch|book|tag|rev|\%\(source_ref_type\)s)',
51 'source_ref_type': '(branch|book|tag|rev|\%\(source_ref_type\)s)',
51 'target_ref_type': '(branch|book|tag|rev|\%\(target_ref_type\)s)',
52 'target_ref_type': '(branch|book|tag|rev|\%\(target_ref_type\)s)',
52 }
53 }
53
54
54
55
55 def add_route_requirements(route_path, requirements):
56 def add_route_requirements(route_path, requirements):
56 """
57 """
57 Adds regex requirements to pyramid routes using a mapping dict
58 Adds regex requirements to pyramid routes using a mapping dict
58
59
59 >>> add_route_requirements('/{action}/{id}', {'id': r'\d+'})
60 >>> add_route_requirements('/{action}/{id}', {'id': r'\d+'})
60 '/{action}/{id:\d+}'
61 '/{action}/{id:\d+}'
61
62
62 """
63 """
63 for key, regex in requirements.items():
64 for key, regex in requirements.items():
64 route_path = route_path.replace('{%s}' % key, '{%s:%s}' % (key, regex))
65 route_path = route_path.replace('{%s}' % key, '{%s:%s}' % (key, regex))
65 return route_path
66 return route_path
66
67
67
68
68 class JSRoutesMapper(Mapper):
69 class JSRoutesMapper(Mapper):
69 """
70 """
70 Wrapper for routes.Mapper to make pyroutes compatible url definitions
71 Wrapper for routes.Mapper to make pyroutes compatible url definitions
71 """
72 """
72 _named_route_regex = re.compile(r'^[a-z-_0-9A-Z]+$')
73 _named_route_regex = re.compile(r'^[a-z-_0-9A-Z]+$')
73 _argument_prog = re.compile('\{(.*?)\}|:\((.*)\)')
74 _argument_prog = re.compile('\{(.*?)\}|:\((.*)\)')
74 def __init__(self, *args, **kw):
75 def __init__(self, *args, **kw):
75 super(JSRoutesMapper, self).__init__(*args, **kw)
76 super(JSRoutesMapper, self).__init__(*args, **kw)
76 self._jsroutes = []
77 self._jsroutes = []
77
78
78 def connect(self, *args, **kw):
79 def connect(self, *args, **kw):
79 """
80 """
80 Wrapper for connect to take an extra argument jsroute=True
81 Wrapper for connect to take an extra argument jsroute=True
81
82
82 :param jsroute: boolean, if True will add the route to the pyroutes list
83 :param jsroute: boolean, if True will add the route to the pyroutes list
83 """
84 """
84 if kw.pop('jsroute', False):
85 if kw.pop('jsroute', False):
85 if not self._named_route_regex.match(args[0]):
86 if not self._named_route_regex.match(args[0]):
86 raise Exception('only named routes can be added to pyroutes')
87 raise Exception('only named routes can be added to pyroutes')
87 self._jsroutes.append(args[0])
88 self._jsroutes.append(args[0])
88
89
89 super(JSRoutesMapper, self).connect(*args, **kw)
90 super(JSRoutesMapper, self).connect(*args, **kw)
90
91
91 def _extract_route_information(self, route):
92 def _extract_route_information(self, route):
92 """
93 """
93 Convert a route into tuple(name, path, args), eg:
94 Convert a route into tuple(name, path, args), eg:
94 ('user_profile', '/profile/%(username)s', ['username'])
95 ('user_profile', '/profile/%(username)s', ['username'])
95 """
96 """
96 routepath = route.routepath
97 routepath = route.routepath
97 def replace(matchobj):
98 def replace(matchobj):
98 if matchobj.group(1):
99 if matchobj.group(1):
99 return "%%(%s)s" % matchobj.group(1).split(':')[0]
100 return "%%(%s)s" % matchobj.group(1).split(':')[0]
100 else:
101 else:
101 return "%%(%s)s" % matchobj.group(2)
102 return "%%(%s)s" % matchobj.group(2)
102
103
103 routepath = self._argument_prog.sub(replace, routepath)
104 routepath = self._argument_prog.sub(replace, routepath)
104 return (
105 return (
105 route.name,
106 route.name,
106 routepath,
107 routepath,
107 [(arg[0].split(':')[0] if arg[0] != '' else arg[1])
108 [(arg[0].split(':')[0] if arg[0] != '' else arg[1])
108 for arg in self._argument_prog.findall(route.routepath)]
109 for arg in self._argument_prog.findall(route.routepath)]
109 )
110 )
110
111
111 def jsroutes(self):
112 def jsroutes(self):
112 """
113 """
113 Return a list of pyroutes.js compatible routes
114 Return a list of pyroutes.js compatible routes
114 """
115 """
115 for route_name in self._jsroutes:
116 for route_name in self._jsroutes:
116 yield self._extract_route_information(self._routenames[route_name])
117 yield self._extract_route_information(self._routenames[route_name])
117
118
118
119
119 def make_map(config):
120 def make_map(config):
120 """Create, configure and return the routes Mapper"""
121 """Create, configure and return the routes Mapper"""
121 rmap = JSRoutesMapper(directory=config['pylons.paths']['controllers'],
122 rmap = JSRoutesMapper(directory=config['pylons.paths']['controllers'],
122 always_scan=config['debug'])
123 always_scan=config['debug'])
123 rmap.minimization = False
124 rmap.minimization = False
124 rmap.explicit = False
125 rmap.explicit = False
125
126
126 from rhodecode.lib.utils2 import str2bool
127 from rhodecode.lib.utils2 import str2bool
127 from rhodecode.model import repo, repo_group
128 from rhodecode.model import repo, repo_group
128
129
129 def check_repo(environ, match_dict):
130 def check_repo(environ, match_dict):
130 """
131 """
131 check for valid repository for proper 404 handling
132 check for valid repository for proper 404 handling
132
133
133 :param environ:
134 :param environ:
134 :param match_dict:
135 :param match_dict:
135 """
136 """
136 repo_name = match_dict.get('repo_name')
137 repo_name = match_dict.get('repo_name')
137
138
138 if match_dict.get('f_path'):
139 if match_dict.get('f_path'):
139 # fix for multiple initial slashes that causes errors
140 # fix for multiple initial slashes that causes errors
140 match_dict['f_path'] = match_dict['f_path'].lstrip('/')
141 match_dict['f_path'] = match_dict['f_path'].lstrip('/')
141 repo_model = repo.RepoModel()
142 repo_model = repo.RepoModel()
142 by_name_match = repo_model.get_by_repo_name(repo_name)
143 by_name_match = repo_model.get_by_repo_name(repo_name)
143 # if we match quickly from database, short circuit the operation,
144 # if we match quickly from database, short circuit the operation,
144 # and validate repo based on the type.
145 # and validate repo based on the type.
145 if by_name_match:
146 if by_name_match:
146 return True
147 return True
147
148
148 by_id_match = repo_model.get_repo_by_id(repo_name)
149 by_id_match = repo_model.get_repo_by_id(repo_name)
149 if by_id_match:
150 if by_id_match:
150 repo_name = by_id_match.repo_name
151 repo_name = by_id_match.repo_name
151 match_dict['repo_name'] = repo_name
152 match_dict['repo_name'] = repo_name
152 return True
153 return True
153
154
154 return False
155 return False
155
156
156 def check_group(environ, match_dict):
157 def check_group(environ, match_dict):
157 """
158 """
158 check for valid repository group path for proper 404 handling
159 check for valid repository group path for proper 404 handling
159
160
160 :param environ:
161 :param environ:
161 :param match_dict:
162 :param match_dict:
162 """
163 """
163 repo_group_name = match_dict.get('group_name')
164 repo_group_name = match_dict.get('group_name')
164 repo_group_model = repo_group.RepoGroupModel()
165 repo_group_model = repo_group.RepoGroupModel()
165 by_name_match = repo_group_model.get_by_group_name(repo_group_name)
166 by_name_match = repo_group_model.get_by_group_name(repo_group_name)
166 if by_name_match:
167 if by_name_match:
167 return True
168 return True
168
169
169 return False
170 return False
170
171
171 def check_user_group(environ, match_dict):
172 def check_user_group(environ, match_dict):
172 """
173 """
173 check for valid user group for proper 404 handling
174 check for valid user group for proper 404 handling
174
175
175 :param environ:
176 :param environ:
176 :param match_dict:
177 :param match_dict:
177 """
178 """
178 return True
179 return True
179
180
180 def check_int(environ, match_dict):
181 def check_int(environ, match_dict):
181 return match_dict.get('id').isdigit()
182 return match_dict.get('id').isdigit()
182
183
183
184
184 #==========================================================================
185 #==========================================================================
185 # CUSTOM ROUTES HERE
186 # CUSTOM ROUTES HERE
186 #==========================================================================
187 #==========================================================================
187
188
188 # MAIN PAGE
189 # MAIN PAGE
189 rmap.connect('home', '/', controller='home', action='index', jsroute=True)
190 rmap.connect('home', '/', controller='home', action='index', jsroute=True)
190 rmap.connect('goto_switcher_data', '/_goto_data', controller='home',
191 rmap.connect('goto_switcher_data', '/_goto_data', controller='home',
191 action='goto_switcher_data')
192 action='goto_switcher_data')
192 rmap.connect('repo_list_data', '/_repos', controller='home',
193 rmap.connect('repo_list_data', '/_repos', controller='home',
193 action='repo_list_data')
194 action='repo_list_data')
194
195
195 rmap.connect('user_autocomplete_data', '/_users', controller='home',
196 rmap.connect('user_autocomplete_data', '/_users', controller='home',
196 action='user_autocomplete_data', jsroute=True)
197 action='user_autocomplete_data', jsroute=True)
197 rmap.connect('user_group_autocomplete_data', '/_user_groups', controller='home',
198 rmap.connect('user_group_autocomplete_data', '/_user_groups', controller='home',
198 action='user_group_autocomplete_data')
199 action='user_group_autocomplete_data')
199
200
200 rmap.connect(
201 rmap.connect(
201 'user_profile', '/_profiles/{username}', controller='users',
202 'user_profile', '/_profiles/{username}', controller='users',
202 action='user_profile')
203 action='user_profile')
203
204
204 # TODO: johbo: Static links, to be replaced by our redirection mechanism
205 # TODO: johbo: Static links, to be replaced by our redirection mechanism
205 rmap.connect('rst_help',
206 rmap.connect('rst_help',
206 'http://docutils.sourceforge.net/docs/user/rst/quickref.html',
207 'http://docutils.sourceforge.net/docs/user/rst/quickref.html',
207 _static=True)
208 _static=True)
208 rmap.connect('markdown_help',
209 rmap.connect('markdown_help',
209 'http://daringfireball.net/projects/markdown/syntax',
210 'http://daringfireball.net/projects/markdown/syntax',
210 _static=True)
211 _static=True)
211 rmap.connect('rhodecode_official', 'https://rhodecode.com', _static=True)
212 rmap.connect('rhodecode_official', 'https://rhodecode.com', _static=True)
212 rmap.connect('rhodecode_support', 'https://rhodecode.com/help/', _static=True)
213 rmap.connect('rhodecode_support', 'https://rhodecode.com/help/', _static=True)
213 rmap.connect('rhodecode_translations', 'https://rhodecode.com/translate/enterprise', _static=True)
214 rmap.connect('rhodecode_translations', 'https://rhodecode.com/translate/enterprise', _static=True)
214 # TODO: anderson - making this a static link since redirect won't play
215 # TODO: anderson - making this a static link since redirect won't play
215 # nice with POST requests
216 # nice with POST requests
216 rmap.connect('enterprise_license_convert_from_old',
217 rmap.connect('enterprise_license_convert_from_old',
217 'https://rhodecode.com/u/license-upgrade',
218 'https://rhodecode.com/u/license-upgrade',
218 _static=True)
219 _static=True)
219
220
220 routing_links.connect_redirection_links(rmap)
221 routing_links.connect_redirection_links(rmap)
221
222
222 rmap.connect('ping', '%s/ping' % (ADMIN_PREFIX,), controller='home', action='ping')
223 rmap.connect('ping', '%s/ping' % (ADMIN_PREFIX,), controller='home', action='ping')
223 rmap.connect('error_test', '%s/error_test' % (ADMIN_PREFIX,), controller='home', action='error_test')
224 rmap.connect('error_test', '%s/error_test' % (ADMIN_PREFIX,), controller='home', action='error_test')
224
225
225 # ADMIN REPOSITORY ROUTES
226 # ADMIN REPOSITORY ROUTES
226 with rmap.submapper(path_prefix=ADMIN_PREFIX,
227 with rmap.submapper(path_prefix=ADMIN_PREFIX,
227 controller='admin/repos') as m:
228 controller='admin/repos') as m:
228 m.connect('repos', '/repos',
229 m.connect('repos', '/repos',
229 action='create', conditions={'method': ['POST']})
230 action='create', conditions={'method': ['POST']})
230 m.connect('repos', '/repos',
231 m.connect('repos', '/repos',
231 action='index', conditions={'method': ['GET']})
232 action='index', conditions={'method': ['GET']})
232 m.connect('new_repo', '/create_repository', jsroute=True,
233 m.connect('new_repo', '/create_repository', jsroute=True,
233 action='create_repository', conditions={'method': ['GET']})
234 action='create_repository', conditions={'method': ['GET']})
234 m.connect('/repos/{repo_name}',
235 m.connect('/repos/{repo_name}',
235 action='update', conditions={'method': ['PUT'],
236 action='update', conditions={'method': ['PUT'],
236 'function': check_repo},
237 'function': check_repo},
237 requirements=URL_NAME_REQUIREMENTS)
238 requirements=URL_NAME_REQUIREMENTS)
238 m.connect('delete_repo', '/repos/{repo_name}',
239 m.connect('delete_repo', '/repos/{repo_name}',
239 action='delete', conditions={'method': ['DELETE']},
240 action='delete', conditions={'method': ['DELETE']},
240 requirements=URL_NAME_REQUIREMENTS)
241 requirements=URL_NAME_REQUIREMENTS)
241 m.connect('repo', '/repos/{repo_name}',
242 m.connect('repo', '/repos/{repo_name}',
242 action='show', conditions={'method': ['GET'],
243 action='show', conditions={'method': ['GET'],
243 'function': check_repo},
244 'function': check_repo},
244 requirements=URL_NAME_REQUIREMENTS)
245 requirements=URL_NAME_REQUIREMENTS)
245
246
246 # ADMIN REPOSITORY GROUPS ROUTES
247 # ADMIN REPOSITORY GROUPS ROUTES
247 with rmap.submapper(path_prefix=ADMIN_PREFIX,
248 with rmap.submapper(path_prefix=ADMIN_PREFIX,
248 controller='admin/repo_groups') as m:
249 controller='admin/repo_groups') as m:
249 m.connect('repo_groups', '/repo_groups',
250 m.connect('repo_groups', '/repo_groups',
250 action='create', conditions={'method': ['POST']})
251 action='create', conditions={'method': ['POST']})
251 m.connect('repo_groups', '/repo_groups',
252 m.connect('repo_groups', '/repo_groups',
252 action='index', conditions={'method': ['GET']})
253 action='index', conditions={'method': ['GET']})
253 m.connect('new_repo_group', '/repo_groups/new',
254 m.connect('new_repo_group', '/repo_groups/new',
254 action='new', conditions={'method': ['GET']})
255 action='new', conditions={'method': ['GET']})
255 m.connect('update_repo_group', '/repo_groups/{group_name}',
256 m.connect('update_repo_group', '/repo_groups/{group_name}',
256 action='update', conditions={'method': ['PUT'],
257 action='update', conditions={'method': ['PUT'],
257 'function': check_group},
258 'function': check_group},
258 requirements=URL_NAME_REQUIREMENTS)
259 requirements=URL_NAME_REQUIREMENTS)
259
260
260 # EXTRAS REPO GROUP ROUTES
261 # EXTRAS REPO GROUP ROUTES
261 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
262 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
262 action='edit',
263 action='edit',
263 conditions={'method': ['GET'], 'function': check_group},
264 conditions={'method': ['GET'], 'function': check_group},
264 requirements=URL_NAME_REQUIREMENTS)
265 requirements=URL_NAME_REQUIREMENTS)
265 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
266 m.connect('edit_repo_group', '/repo_groups/{group_name}/edit',
266 action='edit',
267 action='edit',
267 conditions={'method': ['PUT'], 'function': check_group},
268 conditions={'method': ['PUT'], 'function': check_group},
268 requirements=URL_NAME_REQUIREMENTS)
269 requirements=URL_NAME_REQUIREMENTS)
269
270
270 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
271 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
271 action='edit_repo_group_advanced',
272 action='edit_repo_group_advanced',
272 conditions={'method': ['GET'], 'function': check_group},
273 conditions={'method': ['GET'], 'function': check_group},
273 requirements=URL_NAME_REQUIREMENTS)
274 requirements=URL_NAME_REQUIREMENTS)
274 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
275 m.connect('edit_repo_group_advanced', '/repo_groups/{group_name}/edit/advanced',
275 action='edit_repo_group_advanced',
276 action='edit_repo_group_advanced',
276 conditions={'method': ['PUT'], 'function': check_group},
277 conditions={'method': ['PUT'], 'function': check_group},
277 requirements=URL_NAME_REQUIREMENTS)
278 requirements=URL_NAME_REQUIREMENTS)
278
279
279 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
280 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
280 action='edit_repo_group_perms',
281 action='edit_repo_group_perms',
281 conditions={'method': ['GET'], 'function': check_group},
282 conditions={'method': ['GET'], 'function': check_group},
282 requirements=URL_NAME_REQUIREMENTS)
283 requirements=URL_NAME_REQUIREMENTS)
283 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
284 m.connect('edit_repo_group_perms', '/repo_groups/{group_name}/edit/permissions',
284 action='update_perms',
285 action='update_perms',
285 conditions={'method': ['PUT'], 'function': check_group},
286 conditions={'method': ['PUT'], 'function': check_group},
286 requirements=URL_NAME_REQUIREMENTS)
287 requirements=URL_NAME_REQUIREMENTS)
287
288
288 m.connect('delete_repo_group', '/repo_groups/{group_name}',
289 m.connect('delete_repo_group', '/repo_groups/{group_name}',
289 action='delete', conditions={'method': ['DELETE'],
290 action='delete', conditions={'method': ['DELETE'],
290 'function': check_group},
291 'function': check_group},
291 requirements=URL_NAME_REQUIREMENTS)
292 requirements=URL_NAME_REQUIREMENTS)
292
293
293 # ADMIN USER ROUTES
294 # ADMIN USER ROUTES
294 with rmap.submapper(path_prefix=ADMIN_PREFIX,
295 with rmap.submapper(path_prefix=ADMIN_PREFIX,
295 controller='admin/users') as m:
296 controller='admin/users') as m:
296 m.connect('users', '/users',
297 m.connect('users', '/users',
297 action='create', conditions={'method': ['POST']})
298 action='create', conditions={'method': ['POST']})
298 m.connect('users', '/users',
299 m.connect('users', '/users',
299 action='index', conditions={'method': ['GET']})
300 action='index', conditions={'method': ['GET']})
300 m.connect('new_user', '/users/new',
301 m.connect('new_user', '/users/new',
301 action='new', conditions={'method': ['GET']})
302 action='new', conditions={'method': ['GET']})
302 m.connect('update_user', '/users/{user_id}',
303 m.connect('update_user', '/users/{user_id}',
303 action='update', conditions={'method': ['PUT']})
304 action='update', conditions={'method': ['PUT']})
304 m.connect('delete_user', '/users/{user_id}',
305 m.connect('delete_user', '/users/{user_id}',
305 action='delete', conditions={'method': ['DELETE']})
306 action='delete', conditions={'method': ['DELETE']})
306 m.connect('edit_user', '/users/{user_id}/edit',
307 m.connect('edit_user', '/users/{user_id}/edit',
307 action='edit', conditions={'method': ['GET']})
308 action='edit', conditions={'method': ['GET']})
308 m.connect('user', '/users/{user_id}',
309 m.connect('user', '/users/{user_id}',
309 action='show', conditions={'method': ['GET']})
310 action='show', conditions={'method': ['GET']})
310 m.connect('force_password_reset_user', '/users/{user_id}/password_reset',
311 m.connect('force_password_reset_user', '/users/{user_id}/password_reset',
311 action='reset_password', conditions={'method': ['POST']})
312 action='reset_password', conditions={'method': ['POST']})
312 m.connect('create_personal_repo_group', '/users/{user_id}/create_repo_group',
313 m.connect('create_personal_repo_group', '/users/{user_id}/create_repo_group',
313 action='create_personal_repo_group', conditions={'method': ['POST']})
314 action='create_personal_repo_group', conditions={'method': ['POST']})
314
315
315 # EXTRAS USER ROUTES
316 # EXTRAS USER ROUTES
316 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
317 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
317 action='edit_advanced', conditions={'method': ['GET']})
318 action='edit_advanced', conditions={'method': ['GET']})
318 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
319 m.connect('edit_user_advanced', '/users/{user_id}/edit/advanced',
319 action='update_advanced', conditions={'method': ['PUT']})
320 action='update_advanced', conditions={'method': ['PUT']})
320
321
321 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
322 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
322 action='edit_auth_tokens', conditions={'method': ['GET']})
323 action='edit_auth_tokens', conditions={'method': ['GET']})
323 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
324 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
324 action='add_auth_token', conditions={'method': ['PUT']})
325 action='add_auth_token', conditions={'method': ['PUT']})
325 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
326 m.connect('edit_user_auth_tokens', '/users/{user_id}/edit/auth_tokens',
326 action='delete_auth_token', conditions={'method': ['DELETE']})
327 action='delete_auth_token', conditions={'method': ['DELETE']})
327
328
328 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
329 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
329 action='edit_global_perms', conditions={'method': ['GET']})
330 action='edit_global_perms', conditions={'method': ['GET']})
330 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
331 m.connect('edit_user_global_perms', '/users/{user_id}/edit/global_permissions',
331 action='update_global_perms', conditions={'method': ['PUT']})
332 action='update_global_perms', conditions={'method': ['PUT']})
332
333
333 m.connect('edit_user_perms_summary', '/users/{user_id}/edit/permissions_summary',
334 m.connect('edit_user_perms_summary', '/users/{user_id}/edit/permissions_summary',
334 action='edit_perms_summary', conditions={'method': ['GET']})
335 action='edit_perms_summary', conditions={'method': ['GET']})
335
336
336 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
337 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
337 action='edit_emails', conditions={'method': ['GET']})
338 action='edit_emails', conditions={'method': ['GET']})
338 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
339 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
339 action='add_email', conditions={'method': ['PUT']})
340 action='add_email', conditions={'method': ['PUT']})
340 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
341 m.connect('edit_user_emails', '/users/{user_id}/edit/emails',
341 action='delete_email', conditions={'method': ['DELETE']})
342 action='delete_email', conditions={'method': ['DELETE']})
342
343
343 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
344 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
344 action='edit_ips', conditions={'method': ['GET']})
345 action='edit_ips', conditions={'method': ['GET']})
345 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
346 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
346 action='add_ip', conditions={'method': ['PUT']})
347 action='add_ip', conditions={'method': ['PUT']})
347 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
348 m.connect('edit_user_ips', '/users/{user_id}/edit/ips',
348 action='delete_ip', conditions={'method': ['DELETE']})
349 action='delete_ip', conditions={'method': ['DELETE']})
349
350
350 # ADMIN USER GROUPS REST ROUTES
351 # ADMIN USER GROUPS REST ROUTES
351 with rmap.submapper(path_prefix=ADMIN_PREFIX,
352 with rmap.submapper(path_prefix=ADMIN_PREFIX,
352 controller='admin/user_groups') as m:
353 controller='admin/user_groups') as m:
353 m.connect('users_groups', '/user_groups',
354 m.connect('users_groups', '/user_groups',
354 action='create', conditions={'method': ['POST']})
355 action='create', conditions={'method': ['POST']})
355 m.connect('users_groups', '/user_groups',
356 m.connect('users_groups', '/user_groups',
356 action='index', conditions={'method': ['GET']})
357 action='index', conditions={'method': ['GET']})
357 m.connect('new_users_group', '/user_groups/new',
358 m.connect('new_users_group', '/user_groups/new',
358 action='new', conditions={'method': ['GET']})
359 action='new', conditions={'method': ['GET']})
359 m.connect('update_users_group', '/user_groups/{user_group_id}',
360 m.connect('update_users_group', '/user_groups/{user_group_id}',
360 action='update', conditions={'method': ['PUT']})
361 action='update', conditions={'method': ['PUT']})
361 m.connect('delete_users_group', '/user_groups/{user_group_id}',
362 m.connect('delete_users_group', '/user_groups/{user_group_id}',
362 action='delete', conditions={'method': ['DELETE']})
363 action='delete', conditions={'method': ['DELETE']})
363 m.connect('edit_users_group', '/user_groups/{user_group_id}/edit',
364 m.connect('edit_users_group', '/user_groups/{user_group_id}/edit',
364 action='edit', conditions={'method': ['GET']},
365 action='edit', conditions={'method': ['GET']},
365 function=check_user_group)
366 function=check_user_group)
366
367
367 # EXTRAS USER GROUP ROUTES
368 # EXTRAS USER GROUP ROUTES
368 m.connect('edit_user_group_global_perms',
369 m.connect('edit_user_group_global_perms',
369 '/user_groups/{user_group_id}/edit/global_permissions',
370 '/user_groups/{user_group_id}/edit/global_permissions',
370 action='edit_global_perms', conditions={'method': ['GET']})
371 action='edit_global_perms', conditions={'method': ['GET']})
371 m.connect('edit_user_group_global_perms',
372 m.connect('edit_user_group_global_perms',
372 '/user_groups/{user_group_id}/edit/global_permissions',
373 '/user_groups/{user_group_id}/edit/global_permissions',
373 action='update_global_perms', conditions={'method': ['PUT']})
374 action='update_global_perms', conditions={'method': ['PUT']})
374 m.connect('edit_user_group_perms_summary',
375 m.connect('edit_user_group_perms_summary',
375 '/user_groups/{user_group_id}/edit/permissions_summary',
376 '/user_groups/{user_group_id}/edit/permissions_summary',
376 action='edit_perms_summary', conditions={'method': ['GET']})
377 action='edit_perms_summary', conditions={'method': ['GET']})
377
378
378 m.connect('edit_user_group_perms',
379 m.connect('edit_user_group_perms',
379 '/user_groups/{user_group_id}/edit/permissions',
380 '/user_groups/{user_group_id}/edit/permissions',
380 action='edit_perms', conditions={'method': ['GET']})
381 action='edit_perms', conditions={'method': ['GET']})
381 m.connect('edit_user_group_perms',
382 m.connect('edit_user_group_perms',
382 '/user_groups/{user_group_id}/edit/permissions',
383 '/user_groups/{user_group_id}/edit/permissions',
383 action='update_perms', conditions={'method': ['PUT']})
384 action='update_perms', conditions={'method': ['PUT']})
384
385
385 m.connect('edit_user_group_advanced',
386 m.connect('edit_user_group_advanced',
386 '/user_groups/{user_group_id}/edit/advanced',
387 '/user_groups/{user_group_id}/edit/advanced',
387 action='edit_advanced', conditions={'method': ['GET']})
388 action='edit_advanced', conditions={'method': ['GET']})
388
389
389 m.connect('edit_user_group_members',
390 m.connect('edit_user_group_members',
390 '/user_groups/{user_group_id}/edit/members', jsroute=True,
391 '/user_groups/{user_group_id}/edit/members', jsroute=True,
391 action='edit_members', conditions={'method': ['GET']})
392 action='edit_members', conditions={'method': ['GET']})
392
393
393 # ADMIN PERMISSIONS ROUTES
394 # ADMIN PERMISSIONS ROUTES
394 with rmap.submapper(path_prefix=ADMIN_PREFIX,
395 with rmap.submapper(path_prefix=ADMIN_PREFIX,
395 controller='admin/permissions') as m:
396 controller='admin/permissions') as m:
396 m.connect('admin_permissions_application', '/permissions/application',
397 m.connect('admin_permissions_application', '/permissions/application',
397 action='permission_application_update', conditions={'method': ['POST']})
398 action='permission_application_update', conditions={'method': ['POST']})
398 m.connect('admin_permissions_application', '/permissions/application',
399 m.connect('admin_permissions_application', '/permissions/application',
399 action='permission_application', conditions={'method': ['GET']})
400 action='permission_application', conditions={'method': ['GET']})
400
401
401 m.connect('admin_permissions_global', '/permissions/global',
402 m.connect('admin_permissions_global', '/permissions/global',
402 action='permission_global_update', conditions={'method': ['POST']})
403 action='permission_global_update', conditions={'method': ['POST']})
403 m.connect('admin_permissions_global', '/permissions/global',
404 m.connect('admin_permissions_global', '/permissions/global',
404 action='permission_global', conditions={'method': ['GET']})
405 action='permission_global', conditions={'method': ['GET']})
405
406
406 m.connect('admin_permissions_object', '/permissions/object',
407 m.connect('admin_permissions_object', '/permissions/object',
407 action='permission_objects_update', conditions={'method': ['POST']})
408 action='permission_objects_update', conditions={'method': ['POST']})
408 m.connect('admin_permissions_object', '/permissions/object',
409 m.connect('admin_permissions_object', '/permissions/object',
409 action='permission_objects', conditions={'method': ['GET']})
410 action='permission_objects', conditions={'method': ['GET']})
410
411
411 m.connect('admin_permissions_ips', '/permissions/ips',
412 m.connect('admin_permissions_ips', '/permissions/ips',
412 action='permission_ips', conditions={'method': ['POST']})
413 action='permission_ips', conditions={'method': ['POST']})
413 m.connect('admin_permissions_ips', '/permissions/ips',
414 m.connect('admin_permissions_ips', '/permissions/ips',
414 action='permission_ips', conditions={'method': ['GET']})
415 action='permission_ips', conditions={'method': ['GET']})
415
416
416 m.connect('admin_permissions_overview', '/permissions/overview',
417 m.connect('admin_permissions_overview', '/permissions/overview',
417 action='permission_perms', conditions={'method': ['GET']})
418 action='permission_perms', conditions={'method': ['GET']})
418
419
419 # ADMIN DEFAULTS REST ROUTES
420 # ADMIN DEFAULTS REST ROUTES
420 with rmap.submapper(path_prefix=ADMIN_PREFIX,
421 with rmap.submapper(path_prefix=ADMIN_PREFIX,
421 controller='admin/defaults') as m:
422 controller='admin/defaults') as m:
422 m.connect('admin_defaults_repositories', '/defaults/repositories',
423 m.connect('admin_defaults_repositories', '/defaults/repositories',
423 action='update_repository_defaults', conditions={'method': ['POST']})
424 action='update_repository_defaults', conditions={'method': ['POST']})
424 m.connect('admin_defaults_repositories', '/defaults/repositories',
425 m.connect('admin_defaults_repositories', '/defaults/repositories',
425 action='index', conditions={'method': ['GET']})
426 action='index', conditions={'method': ['GET']})
426
427
427 # ADMIN DEBUG STYLE ROUTES
428 # ADMIN DEBUG STYLE ROUTES
428 if str2bool(config.get('debug_style')):
429 if str2bool(config.get('debug_style')):
429 with rmap.submapper(path_prefix=ADMIN_PREFIX + '/debug_style',
430 with rmap.submapper(path_prefix=ADMIN_PREFIX + '/debug_style',
430 controller='debug_style') as m:
431 controller='debug_style') as m:
431 m.connect('debug_style_home', '',
432 m.connect('debug_style_home', '',
432 action='index', conditions={'method': ['GET']})
433 action='index', conditions={'method': ['GET']})
433 m.connect('debug_style_template', '/t/{t_path}',
434 m.connect('debug_style_template', '/t/{t_path}',
434 action='template', conditions={'method': ['GET']})
435 action='template', conditions={'method': ['GET']})
435
436
436 # ADMIN SETTINGS ROUTES
437 # ADMIN SETTINGS ROUTES
437 with rmap.submapper(path_prefix=ADMIN_PREFIX,
438 with rmap.submapper(path_prefix=ADMIN_PREFIX,
438 controller='admin/settings') as m:
439 controller='admin/settings') as m:
439
440
440 # default
441 # default
441 m.connect('admin_settings', '/settings',
442 m.connect('admin_settings', '/settings',
442 action='settings_global_update',
443 action='settings_global_update',
443 conditions={'method': ['POST']})
444 conditions={'method': ['POST']})
444 m.connect('admin_settings', '/settings',
445 m.connect('admin_settings', '/settings',
445 action='settings_global', conditions={'method': ['GET']})
446 action='settings_global', conditions={'method': ['GET']})
446
447
447 m.connect('admin_settings_vcs', '/settings/vcs',
448 m.connect('admin_settings_vcs', '/settings/vcs',
448 action='settings_vcs_update',
449 action='settings_vcs_update',
449 conditions={'method': ['POST']})
450 conditions={'method': ['POST']})
450 m.connect('admin_settings_vcs', '/settings/vcs',
451 m.connect('admin_settings_vcs', '/settings/vcs',
451 action='settings_vcs',
452 action='settings_vcs',
452 conditions={'method': ['GET']})
453 conditions={'method': ['GET']})
453 m.connect('admin_settings_vcs', '/settings/vcs',
454 m.connect('admin_settings_vcs', '/settings/vcs',
454 action='delete_svn_pattern',
455 action='delete_svn_pattern',
455 conditions={'method': ['DELETE']})
456 conditions={'method': ['DELETE']})
456
457
457 m.connect('admin_settings_mapping', '/settings/mapping',
458 m.connect('admin_settings_mapping', '/settings/mapping',
458 action='settings_mapping_update',
459 action='settings_mapping_update',
459 conditions={'method': ['POST']})
460 conditions={'method': ['POST']})
460 m.connect('admin_settings_mapping', '/settings/mapping',
461 m.connect('admin_settings_mapping', '/settings/mapping',
461 action='settings_mapping', conditions={'method': ['GET']})
462 action='settings_mapping', conditions={'method': ['GET']})
462
463
463 m.connect('admin_settings_global', '/settings/global',
464 m.connect('admin_settings_global', '/settings/global',
464 action='settings_global_update',
465 action='settings_global_update',
465 conditions={'method': ['POST']})
466 conditions={'method': ['POST']})
466 m.connect('admin_settings_global', '/settings/global',
467 m.connect('admin_settings_global', '/settings/global',
467 action='settings_global', conditions={'method': ['GET']})
468 action='settings_global', conditions={'method': ['GET']})
468
469
469 m.connect('admin_settings_visual', '/settings/visual',
470 m.connect('admin_settings_visual', '/settings/visual',
470 action='settings_visual_update',
471 action='settings_visual_update',
471 conditions={'method': ['POST']})
472 conditions={'method': ['POST']})
472 m.connect('admin_settings_visual', '/settings/visual',
473 m.connect('admin_settings_visual', '/settings/visual',
473 action='settings_visual', conditions={'method': ['GET']})
474 action='settings_visual', conditions={'method': ['GET']})
474
475
475 m.connect('admin_settings_issuetracker',
476 m.connect('admin_settings_issuetracker',
476 '/settings/issue-tracker', action='settings_issuetracker',
477 '/settings/issue-tracker', action='settings_issuetracker',
477 conditions={'method': ['GET']})
478 conditions={'method': ['GET']})
478 m.connect('admin_settings_issuetracker_save',
479 m.connect('admin_settings_issuetracker_save',
479 '/settings/issue-tracker/save',
480 '/settings/issue-tracker/save',
480 action='settings_issuetracker_save',
481 action='settings_issuetracker_save',
481 conditions={'method': ['POST']})
482 conditions={'method': ['POST']})
482 m.connect('admin_issuetracker_test', '/settings/issue-tracker/test',
483 m.connect('admin_issuetracker_test', '/settings/issue-tracker/test',
483 action='settings_issuetracker_test',
484 action='settings_issuetracker_test',
484 conditions={'method': ['POST']})
485 conditions={'method': ['POST']})
485 m.connect('admin_issuetracker_delete',
486 m.connect('admin_issuetracker_delete',
486 '/settings/issue-tracker/delete',
487 '/settings/issue-tracker/delete',
487 action='settings_issuetracker_delete',
488 action='settings_issuetracker_delete',
488 conditions={'method': ['DELETE']})
489 conditions={'method': ['DELETE']})
489
490
490 m.connect('admin_settings_email', '/settings/email',
491 m.connect('admin_settings_email', '/settings/email',
491 action='settings_email_update',
492 action='settings_email_update',
492 conditions={'method': ['POST']})
493 conditions={'method': ['POST']})
493 m.connect('admin_settings_email', '/settings/email',
494 m.connect('admin_settings_email', '/settings/email',
494 action='settings_email', conditions={'method': ['GET']})
495 action='settings_email', conditions={'method': ['GET']})
495
496
496 m.connect('admin_settings_hooks', '/settings/hooks',
497 m.connect('admin_settings_hooks', '/settings/hooks',
497 action='settings_hooks_update',
498 action='settings_hooks_update',
498 conditions={'method': ['POST', 'DELETE']})
499 conditions={'method': ['POST', 'DELETE']})
499 m.connect('admin_settings_hooks', '/settings/hooks',
500 m.connect('admin_settings_hooks', '/settings/hooks',
500 action='settings_hooks', conditions={'method': ['GET']})
501 action='settings_hooks', conditions={'method': ['GET']})
501
502
502 m.connect('admin_settings_search', '/settings/search',
503 m.connect('admin_settings_search', '/settings/search',
503 action='settings_search', conditions={'method': ['GET']})
504 action='settings_search', conditions={'method': ['GET']})
504
505
505 m.connect('admin_settings_system', '/settings/system',
506 m.connect('admin_settings_system', '/settings/system',
506 action='settings_system', conditions={'method': ['GET']})
507 action='settings_system', conditions={'method': ['GET']})
507
508
508 m.connect('admin_settings_system_update', '/settings/system/updates',
509 m.connect('admin_settings_system_update', '/settings/system/updates',
509 action='settings_system_update', conditions={'method': ['GET']})
510 action='settings_system_update', conditions={'method': ['GET']})
510
511
511 m.connect('admin_settings_supervisor', '/settings/supervisor',
512 m.connect('admin_settings_supervisor', '/settings/supervisor',
512 action='settings_supervisor', conditions={'method': ['GET']})
513 action='settings_supervisor', conditions={'method': ['GET']})
513 m.connect('admin_settings_supervisor_log', '/settings/supervisor/{procid}/log',
514 m.connect('admin_settings_supervisor_log', '/settings/supervisor/{procid}/log',
514 action='settings_supervisor_log', conditions={'method': ['GET']})
515 action='settings_supervisor_log', conditions={'method': ['GET']})
515
516
516 m.connect('admin_settings_labs', '/settings/labs',
517 m.connect('admin_settings_labs', '/settings/labs',
517 action='settings_labs_update',
518 action='settings_labs_update',
518 conditions={'method': ['POST']})
519 conditions={'method': ['POST']})
519 m.connect('admin_settings_labs', '/settings/labs',
520 m.connect('admin_settings_labs', '/settings/labs',
520 action='settings_labs', conditions={'method': ['GET']})
521 action='settings_labs', conditions={'method': ['GET']})
521
522
522 # ADMIN MY ACCOUNT
523 # ADMIN MY ACCOUNT
523 with rmap.submapper(path_prefix=ADMIN_PREFIX,
524 with rmap.submapper(path_prefix=ADMIN_PREFIX,
524 controller='admin/my_account') as m:
525 controller='admin/my_account') as m:
525
526
526 m.connect('my_account', '/my_account',
527 m.connect('my_account', '/my_account',
527 action='my_account', conditions={'method': ['GET']})
528 action='my_account', conditions={'method': ['GET']})
528 m.connect('my_account_edit', '/my_account/edit',
529 m.connect('my_account_edit', '/my_account/edit',
529 action='my_account_edit', conditions={'method': ['GET']})
530 action='my_account_edit', conditions={'method': ['GET']})
530 m.connect('my_account', '/my_account',
531 m.connect('my_account', '/my_account',
531 action='my_account_update', conditions={'method': ['POST']})
532 action='my_account_update', conditions={'method': ['POST']})
532
533
533 m.connect('my_account_password', '/my_account/password',
534 m.connect('my_account_password', '/my_account/password',
534 action='my_account_password', conditions={'method': ['GET']})
535 action='my_account_password', conditions={'method': ['GET', 'POST']})
535 m.connect('my_account_password', '/my_account/password',
536 action='my_account_password_update', conditions={'method': ['POST']})
537
536
538 m.connect('my_account_repos', '/my_account/repos',
537 m.connect('my_account_repos', '/my_account/repos',
539 action='my_account_repos', conditions={'method': ['GET']})
538 action='my_account_repos', conditions={'method': ['GET']})
540
539
541 m.connect('my_account_watched', '/my_account/watched',
540 m.connect('my_account_watched', '/my_account/watched',
542 action='my_account_watched', conditions={'method': ['GET']})
541 action='my_account_watched', conditions={'method': ['GET']})
543
542
544 m.connect('my_account_pullrequests', '/my_account/pull_requests',
543 m.connect('my_account_pullrequests', '/my_account/pull_requests',
545 action='my_account_pullrequests', conditions={'method': ['GET']})
544 action='my_account_pullrequests', conditions={'method': ['GET']})
546
545
547 m.connect('my_account_perms', '/my_account/perms',
546 m.connect('my_account_perms', '/my_account/perms',
548 action='my_account_perms', conditions={'method': ['GET']})
547 action='my_account_perms', conditions={'method': ['GET']})
549
548
550 m.connect('my_account_emails', '/my_account/emails',
549 m.connect('my_account_emails', '/my_account/emails',
551 action='my_account_emails', conditions={'method': ['GET']})
550 action='my_account_emails', conditions={'method': ['GET']})
552 m.connect('my_account_emails', '/my_account/emails',
551 m.connect('my_account_emails', '/my_account/emails',
553 action='my_account_emails_add', conditions={'method': ['POST']})
552 action='my_account_emails_add', conditions={'method': ['POST']})
554 m.connect('my_account_emails', '/my_account/emails',
553 m.connect('my_account_emails', '/my_account/emails',
555 action='my_account_emails_delete', conditions={'method': ['DELETE']})
554 action='my_account_emails_delete', conditions={'method': ['DELETE']})
556
555
557 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
556 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
558 action='my_account_auth_tokens', conditions={'method': ['GET']})
557 action='my_account_auth_tokens', conditions={'method': ['GET']})
559 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
558 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
560 action='my_account_auth_tokens_add', conditions={'method': ['POST']})
559 action='my_account_auth_tokens_add', conditions={'method': ['POST']})
561 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
560 m.connect('my_account_auth_tokens', '/my_account/auth_tokens',
562 action='my_account_auth_tokens_delete', conditions={'method': ['DELETE']})
561 action='my_account_auth_tokens_delete', conditions={'method': ['DELETE']})
563 m.connect('my_account_notifications', '/my_account/notifications',
562 m.connect('my_account_notifications', '/my_account/notifications',
564 action='my_notifications',
563 action='my_notifications',
565 conditions={'method': ['GET']})
564 conditions={'method': ['GET']})
566 m.connect('my_account_notifications_toggle_visibility',
565 m.connect('my_account_notifications_toggle_visibility',
567 '/my_account/toggle_visibility',
566 '/my_account/toggle_visibility',
568 action='my_notifications_toggle_visibility',
567 action='my_notifications_toggle_visibility',
569 conditions={'method': ['POST']})
568 conditions={'method': ['POST']})
570
569
571 # NOTIFICATION REST ROUTES
570 # NOTIFICATION REST ROUTES
572 with rmap.submapper(path_prefix=ADMIN_PREFIX,
571 with rmap.submapper(path_prefix=ADMIN_PREFIX,
573 controller='admin/notifications') as m:
572 controller='admin/notifications') as m:
574 m.connect('notifications', '/notifications',
573 m.connect('notifications', '/notifications',
575 action='index', conditions={'method': ['GET']})
574 action='index', conditions={'method': ['GET']})
576 m.connect('notifications_mark_all_read', '/notifications/mark_all_read',
575 m.connect('notifications_mark_all_read', '/notifications/mark_all_read',
577 action='mark_all_read', conditions={'method': ['POST']})
576 action='mark_all_read', conditions={'method': ['POST']})
578 m.connect('/notifications/{notification_id}',
577 m.connect('/notifications/{notification_id}',
579 action='update', conditions={'method': ['PUT']})
578 action='update', conditions={'method': ['PUT']})
580 m.connect('/notifications/{notification_id}',
579 m.connect('/notifications/{notification_id}',
581 action='delete', conditions={'method': ['DELETE']})
580 action='delete', conditions={'method': ['DELETE']})
582 m.connect('notification', '/notifications/{notification_id}',
581 m.connect('notification', '/notifications/{notification_id}',
583 action='show', conditions={'method': ['GET']})
582 action='show', conditions={'method': ['GET']})
584
583
585 # ADMIN GIST
584 # ADMIN GIST
586 with rmap.submapper(path_prefix=ADMIN_PREFIX,
585 with rmap.submapper(path_prefix=ADMIN_PREFIX,
587 controller='admin/gists') as m:
586 controller='admin/gists') as m:
588 m.connect('gists', '/gists',
587 m.connect('gists', '/gists',
589 action='create', conditions={'method': ['POST']})
588 action='create', conditions={'method': ['POST']})
590 m.connect('gists', '/gists', jsroute=True,
589 m.connect('gists', '/gists', jsroute=True,
591 action='index', conditions={'method': ['GET']})
590 action='index', conditions={'method': ['GET']})
592 m.connect('new_gist', '/gists/new', jsroute=True,
591 m.connect('new_gist', '/gists/new', jsroute=True,
593 action='new', conditions={'method': ['GET']})
592 action='new', conditions={'method': ['GET']})
594
593
595 m.connect('/gists/{gist_id}',
594 m.connect('/gists/{gist_id}',
596 action='delete', conditions={'method': ['DELETE']})
595 action='delete', conditions={'method': ['DELETE']})
597 m.connect('edit_gist', '/gists/{gist_id}/edit',
596 m.connect('edit_gist', '/gists/{gist_id}/edit',
598 action='edit_form', conditions={'method': ['GET']})
597 action='edit_form', conditions={'method': ['GET']})
599 m.connect('edit_gist', '/gists/{gist_id}/edit',
598 m.connect('edit_gist', '/gists/{gist_id}/edit',
600 action='edit', conditions={'method': ['POST']})
599 action='edit', conditions={'method': ['POST']})
601 m.connect(
600 m.connect(
602 'edit_gist_check_revision', '/gists/{gist_id}/edit/check_revision',
601 'edit_gist_check_revision', '/gists/{gist_id}/edit/check_revision',
603 action='check_revision', conditions={'method': ['GET']})
602 action='check_revision', conditions={'method': ['GET']})
604
603
605 m.connect('gist', '/gists/{gist_id}',
604 m.connect('gist', '/gists/{gist_id}',
606 action='show', conditions={'method': ['GET']})
605 action='show', conditions={'method': ['GET']})
607 m.connect('gist_rev', '/gists/{gist_id}/{revision}',
606 m.connect('gist_rev', '/gists/{gist_id}/{revision}',
608 revision='tip',
607 revision='tip',
609 action='show', conditions={'method': ['GET']})
608 action='show', conditions={'method': ['GET']})
610 m.connect('formatted_gist', '/gists/{gist_id}/{revision}/{format}',
609 m.connect('formatted_gist', '/gists/{gist_id}/{revision}/{format}',
611 revision='tip',
610 revision='tip',
612 action='show', conditions={'method': ['GET']})
611 action='show', conditions={'method': ['GET']})
613 m.connect('formatted_gist_file', '/gists/{gist_id}/{revision}/{format}/{f_path}',
612 m.connect('formatted_gist_file', '/gists/{gist_id}/{revision}/{format}/{f_path}',
614 revision='tip',
613 revision='tip',
615 action='show', conditions={'method': ['GET']},
614 action='show', conditions={'method': ['GET']},
616 requirements=URL_NAME_REQUIREMENTS)
615 requirements=URL_NAME_REQUIREMENTS)
617
616
618 # ADMIN MAIN PAGES
617 # ADMIN MAIN PAGES
619 with rmap.submapper(path_prefix=ADMIN_PREFIX,
618 with rmap.submapper(path_prefix=ADMIN_PREFIX,
620 controller='admin/admin') as m:
619 controller='admin/admin') as m:
621 m.connect('admin_home', '', action='index')
620 m.connect('admin_home', '', action='index')
622 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
621 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
623 action='add_repo')
622 action='add_repo')
624 m.connect(
623 m.connect(
625 'pull_requests_global_0', '/pull_requests/{pull_request_id:[0-9]+}',
624 'pull_requests_global_0', '/pull_requests/{pull_request_id:[0-9]+}',
626 action='pull_requests')
625 action='pull_requests')
627 m.connect(
626 m.connect(
628 'pull_requests_global', '/pull-requests/{pull_request_id:[0-9]+}',
627 'pull_requests_global', '/pull-requests/{pull_request_id:[0-9]+}',
629 action='pull_requests')
628 action='pull_requests')
630
629
631
630
632 # USER JOURNAL
631 # USER JOURNAL
633 rmap.connect('journal', '%s/journal' % (ADMIN_PREFIX,),
632 rmap.connect('journal', '%s/journal' % (ADMIN_PREFIX,),
634 controller='journal', action='index')
633 controller='journal', action='index')
635 rmap.connect('journal_rss', '%s/journal/rss' % (ADMIN_PREFIX,),
634 rmap.connect('journal_rss', '%s/journal/rss' % (ADMIN_PREFIX,),
636 controller='journal', action='journal_rss')
635 controller='journal', action='journal_rss')
637 rmap.connect('journal_atom', '%s/journal/atom' % (ADMIN_PREFIX,),
636 rmap.connect('journal_atom', '%s/journal/atom' % (ADMIN_PREFIX,),
638 controller='journal', action='journal_atom')
637 controller='journal', action='journal_atom')
639
638
640 rmap.connect('public_journal', '%s/public_journal' % (ADMIN_PREFIX,),
639 rmap.connect('public_journal', '%s/public_journal' % (ADMIN_PREFIX,),
641 controller='journal', action='public_journal')
640 controller='journal', action='public_journal')
642
641
643 rmap.connect('public_journal_rss', '%s/public_journal/rss' % (ADMIN_PREFIX,),
642 rmap.connect('public_journal_rss', '%s/public_journal/rss' % (ADMIN_PREFIX,),
644 controller='journal', action='public_journal_rss')
643 controller='journal', action='public_journal_rss')
645
644
646 rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % (ADMIN_PREFIX,),
645 rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % (ADMIN_PREFIX,),
647 controller='journal', action='public_journal_rss')
646 controller='journal', action='public_journal_rss')
648
647
649 rmap.connect('public_journal_atom',
648 rmap.connect('public_journal_atom',
650 '%s/public_journal/atom' % (ADMIN_PREFIX,), controller='journal',
649 '%s/public_journal/atom' % (ADMIN_PREFIX,), controller='journal',
651 action='public_journal_atom')
650 action='public_journal_atom')
652
651
653 rmap.connect('public_journal_atom_old',
652 rmap.connect('public_journal_atom_old',
654 '%s/public_journal_atom' % (ADMIN_PREFIX,), controller='journal',
653 '%s/public_journal_atom' % (ADMIN_PREFIX,), controller='journal',
655 action='public_journal_atom')
654 action='public_journal_atom')
656
655
657 rmap.connect('toggle_following', '%s/toggle_following' % (ADMIN_PREFIX,),
656 rmap.connect('toggle_following', '%s/toggle_following' % (ADMIN_PREFIX,),
658 controller='journal', action='toggle_following', jsroute=True,
657 controller='journal', action='toggle_following', jsroute=True,
659 conditions={'method': ['POST']})
658 conditions={'method': ['POST']})
660
659
661 # FULL TEXT SEARCH
660 # FULL TEXT SEARCH
662 rmap.connect('search', '%s/search' % (ADMIN_PREFIX,),
661 rmap.connect('search', '%s/search' % (ADMIN_PREFIX,),
663 controller='search')
662 controller='search')
664 rmap.connect('search_repo_home', '/{repo_name}/search',
663 rmap.connect('search_repo_home', '/{repo_name}/search',
665 controller='search',
664 controller='search',
666 action='index',
665 action='index',
667 conditions={'function': check_repo},
666 conditions={'function': check_repo},
668 requirements=URL_NAME_REQUIREMENTS)
667 requirements=URL_NAME_REQUIREMENTS)
669
668
670 # FEEDS
669 # FEEDS
671 rmap.connect('rss_feed_home', '/{repo_name}/feed/rss',
670 rmap.connect('rss_feed_home', '/{repo_name}/feed/rss',
672 controller='feed', action='rss',
671 controller='feed', action='rss',
673 conditions={'function': check_repo},
672 conditions={'function': check_repo},
674 requirements=URL_NAME_REQUIREMENTS)
673 requirements=URL_NAME_REQUIREMENTS)
675
674
676 rmap.connect('atom_feed_home', '/{repo_name}/feed/atom',
675 rmap.connect('atom_feed_home', '/{repo_name}/feed/atom',
677 controller='feed', action='atom',
676 controller='feed', action='atom',
678 conditions={'function': check_repo},
677 conditions={'function': check_repo},
679 requirements=URL_NAME_REQUIREMENTS)
678 requirements=URL_NAME_REQUIREMENTS)
680
679
681 #==========================================================================
680 #==========================================================================
682 # REPOSITORY ROUTES
681 # REPOSITORY ROUTES
683 #==========================================================================
682 #==========================================================================
684
683
685 rmap.connect('repo_creating_home', '/{repo_name}/repo_creating',
684 rmap.connect('repo_creating_home', '/{repo_name}/repo_creating',
686 controller='admin/repos', action='repo_creating',
685 controller='admin/repos', action='repo_creating',
687 requirements=URL_NAME_REQUIREMENTS)
686 requirements=URL_NAME_REQUIREMENTS)
688 rmap.connect('repo_check_home', '/{repo_name}/crepo_check',
687 rmap.connect('repo_check_home', '/{repo_name}/crepo_check',
689 controller='admin/repos', action='repo_check',
688 controller='admin/repos', action='repo_check',
690 requirements=URL_NAME_REQUIREMENTS)
689 requirements=URL_NAME_REQUIREMENTS)
691
690
692 rmap.connect('repo_stats', '/{repo_name}/repo_stats/{commit_id}',
691 rmap.connect('repo_stats', '/{repo_name}/repo_stats/{commit_id}',
693 controller='summary', action='repo_stats',
692 controller='summary', action='repo_stats',
694 conditions={'function': check_repo},
693 conditions={'function': check_repo},
695 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
694 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
696
695
697 rmap.connect('repo_refs_data', '/{repo_name}/refs-data',
696 rmap.connect('repo_refs_data', '/{repo_name}/refs-data',
698 controller='summary', action='repo_refs_data', jsroute=True,
697 controller='summary', action='repo_refs_data', jsroute=True,
699 requirements=URL_NAME_REQUIREMENTS)
698 requirements=URL_NAME_REQUIREMENTS)
700 rmap.connect('repo_refs_changelog_data', '/{repo_name}/refs-data-changelog',
699 rmap.connect('repo_refs_changelog_data', '/{repo_name}/refs-data-changelog',
701 controller='summary', action='repo_refs_changelog_data',
700 controller='summary', action='repo_refs_changelog_data',
702 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
701 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
703
702
704 rmap.connect('changeset_home', '/{repo_name}/changeset/{revision}',
703 rmap.connect('changeset_home', '/{repo_name}/changeset/{revision}',
705 controller='changeset', revision='tip', jsroute=True,
704 controller='changeset', revision='tip', jsroute=True,
706 conditions={'function': check_repo},
705 conditions={'function': check_repo},
707 requirements=URL_NAME_REQUIREMENTS)
706 requirements=URL_NAME_REQUIREMENTS)
708 rmap.connect('changeset_children', '/{repo_name}/changeset_children/{revision}',
707 rmap.connect('changeset_children', '/{repo_name}/changeset_children/{revision}',
709 controller='changeset', revision='tip', action='changeset_children',
708 controller='changeset', revision='tip', action='changeset_children',
710 conditions={'function': check_repo},
709 conditions={'function': check_repo},
711 requirements=URL_NAME_REQUIREMENTS)
710 requirements=URL_NAME_REQUIREMENTS)
712 rmap.connect('changeset_parents', '/{repo_name}/changeset_parents/{revision}',
711 rmap.connect('changeset_parents', '/{repo_name}/changeset_parents/{revision}',
713 controller='changeset', revision='tip', action='changeset_parents',
712 controller='changeset', revision='tip', action='changeset_parents',
714 conditions={'function': check_repo},
713 conditions={'function': check_repo},
715 requirements=URL_NAME_REQUIREMENTS)
714 requirements=URL_NAME_REQUIREMENTS)
716
715
717 # repo edit options
716 # repo edit options
718 rmap.connect('edit_repo', '/{repo_name}/settings', jsroute=True,
717 rmap.connect('edit_repo', '/{repo_name}/settings', jsroute=True,
719 controller='admin/repos', action='edit',
718 controller='admin/repos', action='edit',
720 conditions={'method': ['GET'], 'function': check_repo},
719 conditions={'method': ['GET'], 'function': check_repo},
721 requirements=URL_NAME_REQUIREMENTS)
720 requirements=URL_NAME_REQUIREMENTS)
722
721
723 rmap.connect('edit_repo_perms', '/{repo_name}/settings/permissions',
722 rmap.connect('edit_repo_perms', '/{repo_name}/settings/permissions',
724 jsroute=True,
723 jsroute=True,
725 controller='admin/repos', action='edit_permissions',
724 controller='admin/repos', action='edit_permissions',
726 conditions={'method': ['GET'], 'function': check_repo},
725 conditions={'method': ['GET'], 'function': check_repo},
727 requirements=URL_NAME_REQUIREMENTS)
726 requirements=URL_NAME_REQUIREMENTS)
728 rmap.connect('edit_repo_perms_update', '/{repo_name}/settings/permissions',
727 rmap.connect('edit_repo_perms_update', '/{repo_name}/settings/permissions',
729 controller='admin/repos', action='edit_permissions_update',
728 controller='admin/repos', action='edit_permissions_update',
730 conditions={'method': ['PUT'], 'function': check_repo},
729 conditions={'method': ['PUT'], 'function': check_repo},
731 requirements=URL_NAME_REQUIREMENTS)
730 requirements=URL_NAME_REQUIREMENTS)
732
731
733 rmap.connect('edit_repo_fields', '/{repo_name}/settings/fields',
732 rmap.connect('edit_repo_fields', '/{repo_name}/settings/fields',
734 controller='admin/repos', action='edit_fields',
733 controller='admin/repos', action='edit_fields',
735 conditions={'method': ['GET'], 'function': check_repo},
734 conditions={'method': ['GET'], 'function': check_repo},
736 requirements=URL_NAME_REQUIREMENTS)
735 requirements=URL_NAME_REQUIREMENTS)
737 rmap.connect('create_repo_fields', '/{repo_name}/settings/fields/new',
736 rmap.connect('create_repo_fields', '/{repo_name}/settings/fields/new',
738 controller='admin/repos', action='create_repo_field',
737 controller='admin/repos', action='create_repo_field',
739 conditions={'method': ['PUT'], 'function': check_repo},
738 conditions={'method': ['PUT'], 'function': check_repo},
740 requirements=URL_NAME_REQUIREMENTS)
739 requirements=URL_NAME_REQUIREMENTS)
741 rmap.connect('delete_repo_fields', '/{repo_name}/settings/fields/{field_id}',
740 rmap.connect('delete_repo_fields', '/{repo_name}/settings/fields/{field_id}',
742 controller='admin/repos', action='delete_repo_field',
741 controller='admin/repos', action='delete_repo_field',
743 conditions={'method': ['DELETE'], 'function': check_repo},
742 conditions={'method': ['DELETE'], 'function': check_repo},
744 requirements=URL_NAME_REQUIREMENTS)
743 requirements=URL_NAME_REQUIREMENTS)
745
744
746 rmap.connect('edit_repo_advanced', '/{repo_name}/settings/advanced',
745 rmap.connect('edit_repo_advanced', '/{repo_name}/settings/advanced',
747 controller='admin/repos', action='edit_advanced',
746 controller='admin/repos', action='edit_advanced',
748 conditions={'method': ['GET'], 'function': check_repo},
747 conditions={'method': ['GET'], 'function': check_repo},
749 requirements=URL_NAME_REQUIREMENTS)
748 requirements=URL_NAME_REQUIREMENTS)
750
749
751 rmap.connect('edit_repo_advanced_locking', '/{repo_name}/settings/advanced/locking',
750 rmap.connect('edit_repo_advanced_locking', '/{repo_name}/settings/advanced/locking',
752 controller='admin/repos', action='edit_advanced_locking',
751 controller='admin/repos', action='edit_advanced_locking',
753 conditions={'method': ['PUT'], 'function': check_repo},
752 conditions={'method': ['PUT'], 'function': check_repo},
754 requirements=URL_NAME_REQUIREMENTS)
753 requirements=URL_NAME_REQUIREMENTS)
755 rmap.connect('toggle_locking', '/{repo_name}/settings/advanced/locking_toggle',
754 rmap.connect('toggle_locking', '/{repo_name}/settings/advanced/locking_toggle',
756 controller='admin/repos', action='toggle_locking',
755 controller='admin/repos', action='toggle_locking',
757 conditions={'method': ['GET'], 'function': check_repo},
756 conditions={'method': ['GET'], 'function': check_repo},
758 requirements=URL_NAME_REQUIREMENTS)
757 requirements=URL_NAME_REQUIREMENTS)
759
758
760 rmap.connect('edit_repo_advanced_journal', '/{repo_name}/settings/advanced/journal',
759 rmap.connect('edit_repo_advanced_journal', '/{repo_name}/settings/advanced/journal',
761 controller='admin/repos', action='edit_advanced_journal',
760 controller='admin/repos', action='edit_advanced_journal',
762 conditions={'method': ['PUT'], 'function': check_repo},
761 conditions={'method': ['PUT'], 'function': check_repo},
763 requirements=URL_NAME_REQUIREMENTS)
762 requirements=URL_NAME_REQUIREMENTS)
764
763
765 rmap.connect('edit_repo_advanced_fork', '/{repo_name}/settings/advanced/fork',
764 rmap.connect('edit_repo_advanced_fork', '/{repo_name}/settings/advanced/fork',
766 controller='admin/repos', action='edit_advanced_fork',
765 controller='admin/repos', action='edit_advanced_fork',
767 conditions={'method': ['PUT'], 'function': check_repo},
766 conditions={'method': ['PUT'], 'function': check_repo},
768 requirements=URL_NAME_REQUIREMENTS)
767 requirements=URL_NAME_REQUIREMENTS)
769
768
770 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
769 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
771 controller='admin/repos', action='edit_caches_form',
770 controller='admin/repos', action='edit_caches_form',
772 conditions={'method': ['GET'], 'function': check_repo},
771 conditions={'method': ['GET'], 'function': check_repo},
773 requirements=URL_NAME_REQUIREMENTS)
772 requirements=URL_NAME_REQUIREMENTS)
774 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
773 rmap.connect('edit_repo_caches', '/{repo_name}/settings/caches',
775 controller='admin/repos', action='edit_caches',
774 controller='admin/repos', action='edit_caches',
776 conditions={'method': ['PUT'], 'function': check_repo},
775 conditions={'method': ['PUT'], 'function': check_repo},
777 requirements=URL_NAME_REQUIREMENTS)
776 requirements=URL_NAME_REQUIREMENTS)
778
777
779 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
778 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
780 controller='admin/repos', action='edit_remote_form',
779 controller='admin/repos', action='edit_remote_form',
781 conditions={'method': ['GET'], 'function': check_repo},
780 conditions={'method': ['GET'], 'function': check_repo},
782 requirements=URL_NAME_REQUIREMENTS)
781 requirements=URL_NAME_REQUIREMENTS)
783 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
782 rmap.connect('edit_repo_remote', '/{repo_name}/settings/remote',
784 controller='admin/repos', action='edit_remote',
783 controller='admin/repos', action='edit_remote',
785 conditions={'method': ['PUT'], 'function': check_repo},
784 conditions={'method': ['PUT'], 'function': check_repo},
786 requirements=URL_NAME_REQUIREMENTS)
785 requirements=URL_NAME_REQUIREMENTS)
787
786
788 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
787 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
789 controller='admin/repos', action='edit_statistics_form',
788 controller='admin/repos', action='edit_statistics_form',
790 conditions={'method': ['GET'], 'function': check_repo},
789 conditions={'method': ['GET'], 'function': check_repo},
791 requirements=URL_NAME_REQUIREMENTS)
790 requirements=URL_NAME_REQUIREMENTS)
792 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
791 rmap.connect('edit_repo_statistics', '/{repo_name}/settings/statistics',
793 controller='admin/repos', action='edit_statistics',
792 controller='admin/repos', action='edit_statistics',
794 conditions={'method': ['PUT'], 'function': check_repo},
793 conditions={'method': ['PUT'], 'function': check_repo},
795 requirements=URL_NAME_REQUIREMENTS)
794 requirements=URL_NAME_REQUIREMENTS)
796 rmap.connect('repo_settings_issuetracker',
795 rmap.connect('repo_settings_issuetracker',
797 '/{repo_name}/settings/issue-tracker',
796 '/{repo_name}/settings/issue-tracker',
798 controller='admin/repos', action='repo_issuetracker',
797 controller='admin/repos', action='repo_issuetracker',
799 conditions={'method': ['GET'], 'function': check_repo},
798 conditions={'method': ['GET'], 'function': check_repo},
800 requirements=URL_NAME_REQUIREMENTS)
799 requirements=URL_NAME_REQUIREMENTS)
801 rmap.connect('repo_issuetracker_test',
800 rmap.connect('repo_issuetracker_test',
802 '/{repo_name}/settings/issue-tracker/test',
801 '/{repo_name}/settings/issue-tracker/test',
803 controller='admin/repos', action='repo_issuetracker_test',
802 controller='admin/repos', action='repo_issuetracker_test',
804 conditions={'method': ['POST'], 'function': check_repo},
803 conditions={'method': ['POST'], 'function': check_repo},
805 requirements=URL_NAME_REQUIREMENTS)
804 requirements=URL_NAME_REQUIREMENTS)
806 rmap.connect('repo_issuetracker_delete',
805 rmap.connect('repo_issuetracker_delete',
807 '/{repo_name}/settings/issue-tracker/delete',
806 '/{repo_name}/settings/issue-tracker/delete',
808 controller='admin/repos', action='repo_issuetracker_delete',
807 controller='admin/repos', action='repo_issuetracker_delete',
809 conditions={'method': ['DELETE'], 'function': check_repo},
808 conditions={'method': ['DELETE'], 'function': check_repo},
810 requirements=URL_NAME_REQUIREMENTS)
809 requirements=URL_NAME_REQUIREMENTS)
811 rmap.connect('repo_issuetracker_save',
810 rmap.connect('repo_issuetracker_save',
812 '/{repo_name}/settings/issue-tracker/save',
811 '/{repo_name}/settings/issue-tracker/save',
813 controller='admin/repos', action='repo_issuetracker_save',
812 controller='admin/repos', action='repo_issuetracker_save',
814 conditions={'method': ['POST'], 'function': check_repo},
813 conditions={'method': ['POST'], 'function': check_repo},
815 requirements=URL_NAME_REQUIREMENTS)
814 requirements=URL_NAME_REQUIREMENTS)
816 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
815 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
817 controller='admin/repos', action='repo_settings_vcs_update',
816 controller='admin/repos', action='repo_settings_vcs_update',
818 conditions={'method': ['POST'], 'function': check_repo},
817 conditions={'method': ['POST'], 'function': check_repo},
819 requirements=URL_NAME_REQUIREMENTS)
818 requirements=URL_NAME_REQUIREMENTS)
820 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
819 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
821 controller='admin/repos', action='repo_settings_vcs',
820 controller='admin/repos', action='repo_settings_vcs',
822 conditions={'method': ['GET'], 'function': check_repo},
821 conditions={'method': ['GET'], 'function': check_repo},
823 requirements=URL_NAME_REQUIREMENTS)
822 requirements=URL_NAME_REQUIREMENTS)
824 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
823 rmap.connect('repo_vcs_settings', '/{repo_name}/settings/vcs',
825 controller='admin/repos', action='repo_delete_svn_pattern',
824 controller='admin/repos', action='repo_delete_svn_pattern',
826 conditions={'method': ['DELETE'], 'function': check_repo},
825 conditions={'method': ['DELETE'], 'function': check_repo},
827 requirements=URL_NAME_REQUIREMENTS)
826 requirements=URL_NAME_REQUIREMENTS)
828
827
829 # still working url for backward compat.
828 # still working url for backward compat.
830 rmap.connect('raw_changeset_home_depraced',
829 rmap.connect('raw_changeset_home_depraced',
831 '/{repo_name}/raw-changeset/{revision}',
830 '/{repo_name}/raw-changeset/{revision}',
832 controller='changeset', action='changeset_raw',
831 controller='changeset', action='changeset_raw',
833 revision='tip', conditions={'function': check_repo},
832 revision='tip', conditions={'function': check_repo},
834 requirements=URL_NAME_REQUIREMENTS)
833 requirements=URL_NAME_REQUIREMENTS)
835
834
836 # new URLs
835 # new URLs
837 rmap.connect('changeset_raw_home',
836 rmap.connect('changeset_raw_home',
838 '/{repo_name}/changeset-diff/{revision}',
837 '/{repo_name}/changeset-diff/{revision}',
839 controller='changeset', action='changeset_raw',
838 controller='changeset', action='changeset_raw',
840 revision='tip', conditions={'function': check_repo},
839 revision='tip', conditions={'function': check_repo},
841 requirements=URL_NAME_REQUIREMENTS)
840 requirements=URL_NAME_REQUIREMENTS)
842
841
843 rmap.connect('changeset_patch_home',
842 rmap.connect('changeset_patch_home',
844 '/{repo_name}/changeset-patch/{revision}',
843 '/{repo_name}/changeset-patch/{revision}',
845 controller='changeset', action='changeset_patch',
844 controller='changeset', action='changeset_patch',
846 revision='tip', conditions={'function': check_repo},
845 revision='tip', conditions={'function': check_repo},
847 requirements=URL_NAME_REQUIREMENTS)
846 requirements=URL_NAME_REQUIREMENTS)
848
847
849 rmap.connect('changeset_download_home',
848 rmap.connect('changeset_download_home',
850 '/{repo_name}/changeset-download/{revision}',
849 '/{repo_name}/changeset-download/{revision}',
851 controller='changeset', action='changeset_download',
850 controller='changeset', action='changeset_download',
852 revision='tip', conditions={'function': check_repo},
851 revision='tip', conditions={'function': check_repo},
853 requirements=URL_NAME_REQUIREMENTS)
852 requirements=URL_NAME_REQUIREMENTS)
854
853
855 rmap.connect('changeset_comment',
854 rmap.connect('changeset_comment',
856 '/{repo_name}/changeset/{revision}/comment', jsroute=True,
855 '/{repo_name}/changeset/{revision}/comment', jsroute=True,
857 controller='changeset', revision='tip', action='comment',
856 controller='changeset', revision='tip', action='comment',
858 conditions={'function': check_repo},
857 conditions={'function': check_repo},
859 requirements=URL_NAME_REQUIREMENTS)
858 requirements=URL_NAME_REQUIREMENTS)
860
859
861 rmap.connect('changeset_comment_preview',
860 rmap.connect('changeset_comment_preview',
862 '/{repo_name}/changeset/comment/preview', jsroute=True,
861 '/{repo_name}/changeset/comment/preview', jsroute=True,
863 controller='changeset', action='preview_comment',
862 controller='changeset', action='preview_comment',
864 conditions={'function': check_repo, 'method': ['POST']},
863 conditions={'function': check_repo, 'method': ['POST']},
865 requirements=URL_NAME_REQUIREMENTS)
864 requirements=URL_NAME_REQUIREMENTS)
866
865
867 rmap.connect('changeset_comment_delete',
866 rmap.connect('changeset_comment_delete',
868 '/{repo_name}/changeset/comment/{comment_id}/delete',
867 '/{repo_name}/changeset/comment/{comment_id}/delete',
869 controller='changeset', action='delete_comment',
868 controller='changeset', action='delete_comment',
870 conditions={'function': check_repo, 'method': ['DELETE']},
869 conditions={'function': check_repo, 'method': ['DELETE']},
871 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
870 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
872
871
873 rmap.connect('changeset_info', '/{repo_name}/changeset_info/{revision}',
872 rmap.connect('changeset_info', '/{repo_name}/changeset_info/{revision}',
874 controller='changeset', action='changeset_info',
873 controller='changeset', action='changeset_info',
875 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
874 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
876
875
877 rmap.connect('compare_home',
876 rmap.connect('compare_home',
878 '/{repo_name}/compare',
877 '/{repo_name}/compare',
879 controller='compare', action='index',
878 controller='compare', action='index',
880 conditions={'function': check_repo},
879 conditions={'function': check_repo},
881 requirements=URL_NAME_REQUIREMENTS)
880 requirements=URL_NAME_REQUIREMENTS)
882
881
883 rmap.connect('compare_url',
882 rmap.connect('compare_url',
884 '/{repo_name}/compare/{source_ref_type}@{source_ref:.*?}...{target_ref_type}@{target_ref:.*?}',
883 '/{repo_name}/compare/{source_ref_type}@{source_ref:.*?}...{target_ref_type}@{target_ref:.*?}',
885 controller='compare', action='compare',
884 controller='compare', action='compare',
886 conditions={'function': check_repo},
885 conditions={'function': check_repo},
887 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
886 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
888
887
889 rmap.connect('pullrequest_home',
888 rmap.connect('pullrequest_home',
890 '/{repo_name}/pull-request/new', controller='pullrequests',
889 '/{repo_name}/pull-request/new', controller='pullrequests',
891 action='index', conditions={'function': check_repo,
890 action='index', conditions={'function': check_repo,
892 'method': ['GET']},
891 'method': ['GET']},
893 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
892 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
894
893
895 rmap.connect('pullrequest',
894 rmap.connect('pullrequest',
896 '/{repo_name}/pull-request/new', controller='pullrequests',
895 '/{repo_name}/pull-request/new', controller='pullrequests',
897 action='create', conditions={'function': check_repo,
896 action='create', conditions={'function': check_repo,
898 'method': ['POST']},
897 'method': ['POST']},
899 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
898 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
900
899
901 rmap.connect('pullrequest_repo_refs',
900 rmap.connect('pullrequest_repo_refs',
902 '/{repo_name}/pull-request/refs/{target_repo_name:.*?[^/]}',
901 '/{repo_name}/pull-request/refs/{target_repo_name:.*?[^/]}',
903 controller='pullrequests',
902 controller='pullrequests',
904 action='get_repo_refs',
903 action='get_repo_refs',
905 conditions={'function': check_repo, 'method': ['GET']},
904 conditions={'function': check_repo, 'method': ['GET']},
906 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
905 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
907
906
908 rmap.connect('pullrequest_repo_destinations',
907 rmap.connect('pullrequest_repo_destinations',
909 '/{repo_name}/pull-request/repo-destinations',
908 '/{repo_name}/pull-request/repo-destinations',
910 controller='pullrequests',
909 controller='pullrequests',
911 action='get_repo_destinations',
910 action='get_repo_destinations',
912 conditions={'function': check_repo, 'method': ['GET']},
911 conditions={'function': check_repo, 'method': ['GET']},
913 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
912 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
914
913
915 rmap.connect('pullrequest_show',
914 rmap.connect('pullrequest_show',
916 '/{repo_name}/pull-request/{pull_request_id}',
915 '/{repo_name}/pull-request/{pull_request_id}',
917 controller='pullrequests',
916 controller='pullrequests',
918 action='show', conditions={'function': check_repo,
917 action='show', conditions={'function': check_repo,
919 'method': ['GET']},
918 'method': ['GET']},
920 requirements=URL_NAME_REQUIREMENTS)
919 requirements=URL_NAME_REQUIREMENTS)
921
920
922 rmap.connect('pullrequest_update',
921 rmap.connect('pullrequest_update',
923 '/{repo_name}/pull-request/{pull_request_id}',
922 '/{repo_name}/pull-request/{pull_request_id}',
924 controller='pullrequests',
923 controller='pullrequests',
925 action='update', conditions={'function': check_repo,
924 action='update', conditions={'function': check_repo,
926 'method': ['PUT']},
925 'method': ['PUT']},
927 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
926 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
928
927
929 rmap.connect('pullrequest_merge',
928 rmap.connect('pullrequest_merge',
930 '/{repo_name}/pull-request/{pull_request_id}',
929 '/{repo_name}/pull-request/{pull_request_id}',
931 controller='pullrequests',
930 controller='pullrequests',
932 action='merge', conditions={'function': check_repo,
931 action='merge', conditions={'function': check_repo,
933 'method': ['POST']},
932 'method': ['POST']},
934 requirements=URL_NAME_REQUIREMENTS)
933 requirements=URL_NAME_REQUIREMENTS)
935
934
936 rmap.connect('pullrequest_delete',
935 rmap.connect('pullrequest_delete',
937 '/{repo_name}/pull-request/{pull_request_id}',
936 '/{repo_name}/pull-request/{pull_request_id}',
938 controller='pullrequests',
937 controller='pullrequests',
939 action='delete', conditions={'function': check_repo,
938 action='delete', conditions={'function': check_repo,
940 'method': ['DELETE']},
939 'method': ['DELETE']},
941 requirements=URL_NAME_REQUIREMENTS)
940 requirements=URL_NAME_REQUIREMENTS)
942
941
943 rmap.connect('pullrequest_show_all',
942 rmap.connect('pullrequest_show_all',
944 '/{repo_name}/pull-request',
943 '/{repo_name}/pull-request',
945 controller='pullrequests',
944 controller='pullrequests',
946 action='show_all', conditions={'function': check_repo,
945 action='show_all', conditions={'function': check_repo,
947 'method': ['GET']},
946 'method': ['GET']},
948 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
947 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
949
948
950 rmap.connect('pullrequest_comment',
949 rmap.connect('pullrequest_comment',
951 '/{repo_name}/pull-request-comment/{pull_request_id}',
950 '/{repo_name}/pull-request-comment/{pull_request_id}',
952 controller='pullrequests',
951 controller='pullrequests',
953 action='comment', conditions={'function': check_repo,
952 action='comment', conditions={'function': check_repo,
954 'method': ['POST']},
953 'method': ['POST']},
955 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
954 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
956
955
957 rmap.connect('pullrequest_comment_delete',
956 rmap.connect('pullrequest_comment_delete',
958 '/{repo_name}/pull-request-comment/{comment_id}/delete',
957 '/{repo_name}/pull-request-comment/{comment_id}/delete',
959 controller='pullrequests', action='delete_comment',
958 controller='pullrequests', action='delete_comment',
960 conditions={'function': check_repo, 'method': ['DELETE']},
959 conditions={'function': check_repo, 'method': ['DELETE']},
961 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
960 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
962
961
963 rmap.connect('summary_home_explicit', '/{repo_name}/summary',
962 rmap.connect('summary_home_explicit', '/{repo_name}/summary',
964 controller='summary', conditions={'function': check_repo},
963 controller='summary', conditions={'function': check_repo},
965 requirements=URL_NAME_REQUIREMENTS)
964 requirements=URL_NAME_REQUIREMENTS)
966
965
967 rmap.connect('branches_home', '/{repo_name}/branches',
966 rmap.connect('branches_home', '/{repo_name}/branches',
968 controller='branches', conditions={'function': check_repo},
967 controller='branches', conditions={'function': check_repo},
969 requirements=URL_NAME_REQUIREMENTS)
968 requirements=URL_NAME_REQUIREMENTS)
970
969
971 rmap.connect('tags_home', '/{repo_name}/tags',
970 rmap.connect('tags_home', '/{repo_name}/tags',
972 controller='tags', conditions={'function': check_repo},
971 controller='tags', conditions={'function': check_repo},
973 requirements=URL_NAME_REQUIREMENTS)
972 requirements=URL_NAME_REQUIREMENTS)
974
973
975 rmap.connect('bookmarks_home', '/{repo_name}/bookmarks',
974 rmap.connect('bookmarks_home', '/{repo_name}/bookmarks',
976 controller='bookmarks', conditions={'function': check_repo},
975 controller='bookmarks', conditions={'function': check_repo},
977 requirements=URL_NAME_REQUIREMENTS)
976 requirements=URL_NAME_REQUIREMENTS)
978
977
979 rmap.connect('changelog_home', '/{repo_name}/changelog', jsroute=True,
978 rmap.connect('changelog_home', '/{repo_name}/changelog', jsroute=True,
980 controller='changelog', conditions={'function': check_repo},
979 controller='changelog', conditions={'function': check_repo},
981 requirements=URL_NAME_REQUIREMENTS)
980 requirements=URL_NAME_REQUIREMENTS)
982
981
983 rmap.connect('changelog_summary_home', '/{repo_name}/changelog_summary',
982 rmap.connect('changelog_summary_home', '/{repo_name}/changelog_summary',
984 controller='changelog', action='changelog_summary',
983 controller='changelog', action='changelog_summary',
985 conditions={'function': check_repo},
984 conditions={'function': check_repo},
986 requirements=URL_NAME_REQUIREMENTS)
985 requirements=URL_NAME_REQUIREMENTS)
987
986
988 rmap.connect('changelog_file_home',
987 rmap.connect('changelog_file_home',
989 '/{repo_name}/changelog/{revision}/{f_path}',
988 '/{repo_name}/changelog/{revision}/{f_path}',
990 controller='changelog', f_path=None,
989 controller='changelog', f_path=None,
991 conditions={'function': check_repo},
990 conditions={'function': check_repo},
992 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
991 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
993
992
994 rmap.connect('changelog_details', '/{repo_name}/changelog_details/{cs}',
993 rmap.connect('changelog_details', '/{repo_name}/changelog_details/{cs}',
995 controller='changelog', action='changelog_details',
994 controller='changelog', action='changelog_details',
996 conditions={'function': check_repo},
995 conditions={'function': check_repo},
997 requirements=URL_NAME_REQUIREMENTS)
996 requirements=URL_NAME_REQUIREMENTS)
998
997
999 rmap.connect('files_home', '/{repo_name}/files/{revision}/{f_path}',
998 rmap.connect('files_home', '/{repo_name}/files/{revision}/{f_path}',
1000 controller='files', revision='tip', f_path='',
999 controller='files', revision='tip', f_path='',
1001 conditions={'function': check_repo},
1000 conditions={'function': check_repo},
1002 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1001 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1003
1002
1004 rmap.connect('files_home_simple_catchrev',
1003 rmap.connect('files_home_simple_catchrev',
1005 '/{repo_name}/files/{revision}',
1004 '/{repo_name}/files/{revision}',
1006 controller='files', revision='tip', f_path='',
1005 controller='files', revision='tip', f_path='',
1007 conditions={'function': check_repo},
1006 conditions={'function': check_repo},
1008 requirements=URL_NAME_REQUIREMENTS)
1007 requirements=URL_NAME_REQUIREMENTS)
1009
1008
1010 rmap.connect('files_home_simple_catchall',
1009 rmap.connect('files_home_simple_catchall',
1011 '/{repo_name}/files',
1010 '/{repo_name}/files',
1012 controller='files', revision='tip', f_path='',
1011 controller='files', revision='tip', f_path='',
1013 conditions={'function': check_repo},
1012 conditions={'function': check_repo},
1014 requirements=URL_NAME_REQUIREMENTS)
1013 requirements=URL_NAME_REQUIREMENTS)
1015
1014
1016 rmap.connect('files_history_home',
1015 rmap.connect('files_history_home',
1017 '/{repo_name}/history/{revision}/{f_path}',
1016 '/{repo_name}/history/{revision}/{f_path}',
1018 controller='files', action='history', revision='tip', f_path='',
1017 controller='files', action='history', revision='tip', f_path='',
1019 conditions={'function': check_repo},
1018 conditions={'function': check_repo},
1020 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1019 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1021
1020
1022 rmap.connect('files_authors_home',
1021 rmap.connect('files_authors_home',
1023 '/{repo_name}/authors/{revision}/{f_path}',
1022 '/{repo_name}/authors/{revision}/{f_path}',
1024 controller='files', action='authors', revision='tip', f_path='',
1023 controller='files', action='authors', revision='tip', f_path='',
1025 conditions={'function': check_repo},
1024 conditions={'function': check_repo},
1026 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1025 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1027
1026
1028 rmap.connect('files_diff_home', '/{repo_name}/diff/{f_path}',
1027 rmap.connect('files_diff_home', '/{repo_name}/diff/{f_path}',
1029 controller='files', action='diff', f_path='',
1028 controller='files', action='diff', f_path='',
1030 conditions={'function': check_repo},
1029 conditions={'function': check_repo},
1031 requirements=URL_NAME_REQUIREMENTS)
1030 requirements=URL_NAME_REQUIREMENTS)
1032
1031
1033 rmap.connect('files_diff_2way_home',
1032 rmap.connect('files_diff_2way_home',
1034 '/{repo_name}/diff-2way/{f_path}',
1033 '/{repo_name}/diff-2way/{f_path}',
1035 controller='files', action='diff_2way', f_path='',
1034 controller='files', action='diff_2way', f_path='',
1036 conditions={'function': check_repo},
1035 conditions={'function': check_repo},
1037 requirements=URL_NAME_REQUIREMENTS)
1036 requirements=URL_NAME_REQUIREMENTS)
1038
1037
1039 rmap.connect('files_rawfile_home',
1038 rmap.connect('files_rawfile_home',
1040 '/{repo_name}/rawfile/{revision}/{f_path}',
1039 '/{repo_name}/rawfile/{revision}/{f_path}',
1041 controller='files', action='rawfile', revision='tip',
1040 controller='files', action='rawfile', revision='tip',
1042 f_path='', conditions={'function': check_repo},
1041 f_path='', conditions={'function': check_repo},
1043 requirements=URL_NAME_REQUIREMENTS)
1042 requirements=URL_NAME_REQUIREMENTS)
1044
1043
1045 rmap.connect('files_raw_home',
1044 rmap.connect('files_raw_home',
1046 '/{repo_name}/raw/{revision}/{f_path}',
1045 '/{repo_name}/raw/{revision}/{f_path}',
1047 controller='files', action='raw', revision='tip', f_path='',
1046 controller='files', action='raw', revision='tip', f_path='',
1048 conditions={'function': check_repo},
1047 conditions={'function': check_repo},
1049 requirements=URL_NAME_REQUIREMENTS)
1048 requirements=URL_NAME_REQUIREMENTS)
1050
1049
1051 rmap.connect('files_render_home',
1050 rmap.connect('files_render_home',
1052 '/{repo_name}/render/{revision}/{f_path}',
1051 '/{repo_name}/render/{revision}/{f_path}',
1053 controller='files', action='index', revision='tip', f_path='',
1052 controller='files', action='index', revision='tip', f_path='',
1054 rendered=True, conditions={'function': check_repo},
1053 rendered=True, conditions={'function': check_repo},
1055 requirements=URL_NAME_REQUIREMENTS)
1054 requirements=URL_NAME_REQUIREMENTS)
1056
1055
1057 rmap.connect('files_annotate_home',
1056 rmap.connect('files_annotate_home',
1058 '/{repo_name}/annotate/{revision}/{f_path}',
1057 '/{repo_name}/annotate/{revision}/{f_path}',
1059 controller='files', action='index', revision='tip',
1058 controller='files', action='index', revision='tip',
1060 f_path='', annotate=True, conditions={'function': check_repo},
1059 f_path='', annotate=True, conditions={'function': check_repo},
1061 requirements=URL_NAME_REQUIREMENTS)
1060 requirements=URL_NAME_REQUIREMENTS)
1062
1061
1063 rmap.connect('files_edit',
1062 rmap.connect('files_edit',
1064 '/{repo_name}/edit/{revision}/{f_path}',
1063 '/{repo_name}/edit/{revision}/{f_path}',
1065 controller='files', action='edit', revision='tip',
1064 controller='files', action='edit', revision='tip',
1066 f_path='',
1065 f_path='',
1067 conditions={'function': check_repo, 'method': ['POST']},
1066 conditions={'function': check_repo, 'method': ['POST']},
1068 requirements=URL_NAME_REQUIREMENTS)
1067 requirements=URL_NAME_REQUIREMENTS)
1069
1068
1070 rmap.connect('files_edit_home',
1069 rmap.connect('files_edit_home',
1071 '/{repo_name}/edit/{revision}/{f_path}',
1070 '/{repo_name}/edit/{revision}/{f_path}',
1072 controller='files', action='edit_home', revision='tip',
1071 controller='files', action='edit_home', revision='tip',
1073 f_path='', conditions={'function': check_repo},
1072 f_path='', conditions={'function': check_repo},
1074 requirements=URL_NAME_REQUIREMENTS)
1073 requirements=URL_NAME_REQUIREMENTS)
1075
1074
1076 rmap.connect('files_add',
1075 rmap.connect('files_add',
1077 '/{repo_name}/add/{revision}/{f_path}',
1076 '/{repo_name}/add/{revision}/{f_path}',
1078 controller='files', action='add', revision='tip',
1077 controller='files', action='add', revision='tip',
1079 f_path='',
1078 f_path='',
1080 conditions={'function': check_repo, 'method': ['POST']},
1079 conditions={'function': check_repo, 'method': ['POST']},
1081 requirements=URL_NAME_REQUIREMENTS)
1080 requirements=URL_NAME_REQUIREMENTS)
1082
1081
1083 rmap.connect('files_add_home',
1082 rmap.connect('files_add_home',
1084 '/{repo_name}/add/{revision}/{f_path}',
1083 '/{repo_name}/add/{revision}/{f_path}',
1085 controller='files', action='add_home', revision='tip',
1084 controller='files', action='add_home', revision='tip',
1086 f_path='', conditions={'function': check_repo},
1085 f_path='', conditions={'function': check_repo},
1087 requirements=URL_NAME_REQUIREMENTS)
1086 requirements=URL_NAME_REQUIREMENTS)
1088
1087
1089 rmap.connect('files_delete',
1088 rmap.connect('files_delete',
1090 '/{repo_name}/delete/{revision}/{f_path}',
1089 '/{repo_name}/delete/{revision}/{f_path}',
1091 controller='files', action='delete', revision='tip',
1090 controller='files', action='delete', revision='tip',
1092 f_path='',
1091 f_path='',
1093 conditions={'function': check_repo, 'method': ['POST']},
1092 conditions={'function': check_repo, 'method': ['POST']},
1094 requirements=URL_NAME_REQUIREMENTS)
1093 requirements=URL_NAME_REQUIREMENTS)
1095
1094
1096 rmap.connect('files_delete_home',
1095 rmap.connect('files_delete_home',
1097 '/{repo_name}/delete/{revision}/{f_path}',
1096 '/{repo_name}/delete/{revision}/{f_path}',
1098 controller='files', action='delete_home', revision='tip',
1097 controller='files', action='delete_home', revision='tip',
1099 f_path='', conditions={'function': check_repo},
1098 f_path='', conditions={'function': check_repo},
1100 requirements=URL_NAME_REQUIREMENTS)
1099 requirements=URL_NAME_REQUIREMENTS)
1101
1100
1102 rmap.connect('files_archive_home', '/{repo_name}/archive/{fname}',
1101 rmap.connect('files_archive_home', '/{repo_name}/archive/{fname}',
1103 controller='files', action='archivefile',
1102 controller='files', action='archivefile',
1104 conditions={'function': check_repo},
1103 conditions={'function': check_repo},
1105 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1104 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1106
1105
1107 rmap.connect('files_nodelist_home',
1106 rmap.connect('files_nodelist_home',
1108 '/{repo_name}/nodelist/{revision}/{f_path}',
1107 '/{repo_name}/nodelist/{revision}/{f_path}',
1109 controller='files', action='nodelist',
1108 controller='files', action='nodelist',
1110 conditions={'function': check_repo},
1109 conditions={'function': check_repo},
1111 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1110 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1112
1111
1113 rmap.connect('files_nodetree_full',
1112 rmap.connect('files_nodetree_full',
1114 '/{repo_name}/nodetree_full/{commit_id}/{f_path}',
1113 '/{repo_name}/nodetree_full/{commit_id}/{f_path}',
1115 controller='files', action='nodetree_full',
1114 controller='files', action='nodetree_full',
1116 conditions={'function': check_repo},
1115 conditions={'function': check_repo},
1117 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1116 requirements=URL_NAME_REQUIREMENTS, jsroute=True)
1118
1117
1119 rmap.connect('repo_fork_create_home', '/{repo_name}/fork',
1118 rmap.connect('repo_fork_create_home', '/{repo_name}/fork',
1120 controller='forks', action='fork_create',
1119 controller='forks', action='fork_create',
1121 conditions={'function': check_repo, 'method': ['POST']},
1120 conditions={'function': check_repo, 'method': ['POST']},
1122 requirements=URL_NAME_REQUIREMENTS)
1121 requirements=URL_NAME_REQUIREMENTS)
1123
1122
1124 rmap.connect('repo_fork_home', '/{repo_name}/fork',
1123 rmap.connect('repo_fork_home', '/{repo_name}/fork',
1125 controller='forks', action='fork',
1124 controller='forks', action='fork',
1126 conditions={'function': check_repo},
1125 conditions={'function': check_repo},
1127 requirements=URL_NAME_REQUIREMENTS)
1126 requirements=URL_NAME_REQUIREMENTS)
1128
1127
1129 rmap.connect('repo_forks_home', '/{repo_name}/forks',
1128 rmap.connect('repo_forks_home', '/{repo_name}/forks',
1130 controller='forks', action='forks',
1129 controller='forks', action='forks',
1131 conditions={'function': check_repo},
1130 conditions={'function': check_repo},
1132 requirements=URL_NAME_REQUIREMENTS)
1131 requirements=URL_NAME_REQUIREMENTS)
1133
1132
1134 rmap.connect('repo_followers_home', '/{repo_name}/followers',
1133 rmap.connect('repo_followers_home', '/{repo_name}/followers',
1135 controller='followers', action='followers',
1134 controller='followers', action='followers',
1136 conditions={'function': check_repo},
1135 conditions={'function': check_repo},
1137 requirements=URL_NAME_REQUIREMENTS)
1136 requirements=URL_NAME_REQUIREMENTS)
1138
1137
1139 # must be here for proper group/repo catching pattern
1138 # must be here for proper group/repo catching pattern
1140 _connect_with_slash(
1139 _connect_with_slash(
1141 rmap, 'repo_group_home', '/{group_name}',
1140 rmap, 'repo_group_home', '/{group_name}',
1142 controller='home', action='index_repo_group',
1141 controller='home', action='index_repo_group',
1143 conditions={'function': check_group},
1142 conditions={'function': check_group},
1144 requirements=URL_NAME_REQUIREMENTS)
1143 requirements=URL_NAME_REQUIREMENTS)
1145
1144
1146 # catch all, at the end
1145 # catch all, at the end
1147 _connect_with_slash(
1146 _connect_with_slash(
1148 rmap, 'summary_home', '/{repo_name}', jsroute=True,
1147 rmap, 'summary_home', '/{repo_name}', jsroute=True,
1149 controller='summary', action='index',
1148 controller='summary', action='index',
1150 conditions={'function': check_repo},
1149 conditions={'function': check_repo},
1151 requirements=URL_NAME_REQUIREMENTS)
1150 requirements=URL_NAME_REQUIREMENTS)
1152
1151
1153 return rmap
1152 return rmap
1154
1153
1155
1154
1156 def _connect_with_slash(mapper, name, path, *args, **kwargs):
1155 def _connect_with_slash(mapper, name, path, *args, **kwargs):
1157 """
1156 """
1158 Connect a route with an optional trailing slash in `path`.
1157 Connect a route with an optional trailing slash in `path`.
1159 """
1158 """
1160 mapper.connect(name + '_slash', path + '/', *args, **kwargs)
1159 mapper.connect(name + '_slash', path + '/', *args, **kwargs)
1161 mapper.connect(name, path, *args, **kwargs)
1160 mapper.connect(name, path, *args, **kwargs)
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/templates/admin/integrations/edit.html to rhodecode/templates/admin/integrations/form.html
NO CONTENT: file renamed from rhodecode/templates/admin/integrations/edit.html to rhodecode/templates/admin/integrations/form.html
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now