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

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

@@ -0,0 +1,50 b''
1 .. _gunicorn-ssl-support:
2
3
4 Gunicorn SSL support
5 --------------------
6
7
8 :term:`Gunicorn` wsgi server allows users to use HTTPS connection directly
9 without a need to use HTTP server like Nginx or Apache. To Configure
10 SSL support directly with :term:`Gunicorn` you need to simply add the key
11 and certificate paths to your configuration file.
12
13 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
14 2. In the ``[server:main]`` section, add two new variables
15 called `certfile` and `keyfile`.
16
17 .. code-block:: ini
18
19 [server:main]
20 host = 127.0.0.1
21 port = 10002
22 use = egg:gunicorn#main
23 workers = 1
24 threads = 1
25 proc_name = RhodeCodeEnterprise
26 worker_class = sync
27 max_requests = 1000
28 timeout = 3600
29 # adding ssl support
30 certfile = /home/ssl/my_server_com.pem
31 keyfile = /home/ssl/my_server_com.key
32
33 4. Save your changes.
34 5. Restart your |RCE| instance, using the following command:
35
36 .. code-block:: bash
37
38 $ rccontrol restart enterprise-1
39
40 After this is enabled you can *only* access your instances via https://
41 protocol. Check out more docs here `Gunicorn SSL Docs`_
42
43 .. note::
44
45 This change only can be applied to |RCE|. VCSServer doesn't support SSL
46 and should be only used with http protocol. Because only |RCE| is available
47 externally all communication will still be over SSL even without VCSServer
48 SSL enabled.
49
50 .. _Gunicorn SSL Docs: http://docs.gunicorn.org/en/stable/settings.html#ssl
@@ -0,0 +1,178 b''
1 |RCE| 4.10.0 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2017-11-02
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13 - SSH (Beta): added support for authentication via SSH keys. It's possible
14 to use SSH key based authentication instead of HTTP. Users are allowed to
15 store multiple keys and use them to push/pull code via SSH.
16 - Pull requests: store and show a merge strategy. Pull request strategy will
17 be also now shown in the UI.
18 Close/delete branch are shown if that option is selected.
19 - Pull requests: Add option to close a branch before merging for Mercurial.
20 - Processes page. RhodeCode will show a list of all current workers with
21 CPU and Memory usage.
22 It's also possible to restart each worker from the web interface.
23 - Auth tokens: allow specifying a custom expiration date from UI.
24 - Integrations: webhook, allow to set a custom header.
25 - Integrations: webhook, add possibility to specify username and password.
26 - UI: added copy-to-clipboard for commits, file paths, gist/clone urls.
27 - UI: improve support for meta-tags in repository description:
28 Tags are extracted to the beginning of the description during rendering.
29 Show helpers in proper places in groups/repos/forks with all available tags.
30 Add a new deprecated tag.
31 - UI: commits page, hide evolve commits.
32 Now optionally it's possible to show them via a new link on changelog page.
33 - Audit logs: allow showing individual entries for audit log.
34 - Audit logs: expose repo related audit logs in repository view.
35 - User sessions: get ability to count memcached sessions.
36 - Core: added support for REDIS based user sessions and cache backend.
37 - Core: added support for Golang go-import functionality.
38 - SVN: allow specifying alternative template file for mod_dav config.
39 - Markup: make relative links pin to raw files for images/files as links.
40 Allows building relative MD/RST links that go to rendered content
41 - Auth: allow binding the whitelist views to specific auth tokens. This allows
42 to access only specific pages via given auth token. E.g possible to expose
43 raw diff/raw file content only for specific single token.
44 The new format is `viewName@TOKEN`
45 - Channelstream: push events with comments on single commits. Users will get
46 live notification for events on single commits too.
47
48
49 General
50 ^^^^^^^
51
52 - License: add helper to show alternative application method for license via
53 ishell.
54 - http: set REMOTE_USER and REMOTE_HOST http variables in order for more
55 Mercurial extensions compatibility.
56 - User/User groups: show if users or user groups are a part of review rules.
57 - Permissions: new improved visual permissions summary. Show exactly how
58 permissions were inherited, and which rule overwrote the other.
59 - Permissions: added new JSON endpoint to extract permissions as JSON data
60 for 3rd party processing. This allows access for reporting tools without
61 giving any ADMIN API access to fetch permissions.
62 - Pyramid: ported all controllers to Pyramid, with python3 compatible code.
63 - Gunicorn: allow custom logger to be set for a consistent formatting of
64 Gunicorn logs with RhodeCode logs.
65 - Search: per-repo search shouldn't require admin permissions. Read is enough
66 because we access the repo data only.
67 - Git: updated to 2.13.5 release
68 - Mercurial: updated to 4.2.3 release.
69 - Mercurial Evolve: updated to 6.6.0 release.
70 - Dependencies: bumped pysqlite to Mako to 1.0.7
71 - Dependencies: bumped pysqlite to 2.8.3
72 - Dependencies: bumped psycopg2 to 2.7.1
73 - Dependencies: bumped docutils to 0.13.1
74 - Dependencies: bumped simplejson to 3.11.1
75 - Dependencies: bumped alembic to 0.9.2
76 - Dependencies: bumped Beaker to 1.9.0
77 - Dependencies: bumped Markdown to 2.6.8
78 - Dependencies: bumped dogpile.cache to 0.6.4
79 - Dependencies: bumped colander to 1.3.3
80 - Dependencies: bumped appenlight_client to 0.6.21
81 - Dependencies: bumped cprofileV to 1.0.7
82 - Dependencies: bumped ipdb to 0.10.3
83 - Dependencies: bumped supervisor to 3.3.2
84 - Dependencies: bumped subprocess32 to 3.2.7
85 - Dependencies: bumped pathlib2 to 2.3.0.
86 - Dependencies: bumped gunicorn==19.7.1
87 - Dependencies: bumped gevent to 1.2.2 together with greenlet to 0.4.12
88 - Dependencies: bumped venusian to 1.1.0
89 - Dependencies: bumped ptyprocess to 0.5.2
90 - Dependencies: bumped testpath to 0.3.1
91 - Dependencies: bumped Pyramid to 1.9.1
92 - Dependencies: bumped supervisor to 3.3.3
93 - Dependencies: bumped sqlalchemy to version 1.1.11
94
95
96 Security
97 ^^^^^^^^
98
99 - Security: use no-referrer for outside link to stop leaking potential
100 parameters such as auth token stored inside GET flags.
101 - Auth tokens: always check permissions to scope tokens to prevent resource
102 discovery of private repos.
103 - Strip: fix XSS in repo strip view.
104 - Files: prevent XSS in fake errors message on filenodes.
105 - Files: remove right-to-left override character for display in files.
106 This allows faking the name a bit, we in this particular place want to
107 skip the override for enhanced security.
108 - Repo forks: security, check for access to fork_id parameter to prevent
109 resource discovery.
110 - Pull requests: security double check permissions on injected forms of
111 source and target repositories. Fixes resource discovery.
112 - Pull requests: security, prevent from injecting comments to other pull
113 requests for users don't have access to.
114
115
116 Performance
117 ^^^^^^^^^^^
118
119 - Goto-switcher: use special commit: prefix to explicitly search for commits.
120 previous solution could make the go-to switcher slow in case of larger search
121 index present.
122 - Goto-switcher: optimized performance and query capabilities.
123 - Diffs: use whole chunk diff to calculate if it's oversized or not.
124 This fixes an issue if a file is added that has very large number of small
125 lines. In this case the time to detect if the diff should be limited was
126 very long and CPU intensive.
127 - Markup: use cached version of http pattern for urlify_text. This
128 increases performance because we don't have to compile the pattern each time
129 we execute this commonly used function.
130 - Changelog: fix and optimize loading of chunks for file history.
131 - Vcs: reduce sql queries used during pull/push operations.
132 - Auth: use cache_ttl from a plugin to also cache calculated permissions.
133 This gives a 30% speed increase in operations like svn commit.
134
135
136 Fixes
137 ^^^^^
138
139 - Initial-gravatars: fix case of dot being present before @domain.
140 - Vcs: report 404 for shadow repos that are not existing anymore.
141 - RSS/Atom Feeds: generate entries with proper unique ids.
142 - DB: use LONGTEXT for mysql in user_logs. Fixes problem with mysql rejecting
143 insert because of too long json data.
144 - Pull request: add missing audit data for pull_request.close action.
145 - User groups: properly set add/delete members for usage in audit data.
146 - Repo, auth-tokens: UX, set VCS scope if repo scopped token is selected.
147 - Changelog: fix and optimize loading of chunks for file history.
148 - Error reporting: improve handling of exception that are non-standard.
149 Inject traceback information into unhandled exceptions.
150 - Users: add additional information why user with pending reviews
151 shouldn't be deleted.
152 - Auth ldap: improve messages when users failed to authenticate via LDAP.
153 - Sqlalchemy: enabled connection ping.
154 should fix potential issues with Mysql server has gone away issues.
155 - License page: fix usage of url() that could prevent from using convert license.
156 - Permissions: use same way of sorting of user_group permissions like user ones.
157
158
159 Upgrade notes
160 ^^^^^^^^^^^^^
161
162 - Searching for commits in goto-switcher must be now prefixed with
163 commit:<hash>
164 - Because of pyramid porting view names have changed, and we made a backward
165 compatibility mapping for most common ones only.
166 We recommend reviewing your whitelist view access list.
167 There's a new dedicated page with ALL views listed under admin > permissions
168 Please take a look in there to port any non-standard views for whitelist access.
169
170 - SSH support is implemented via combination of internal, and installed hooks.
171 A file called `hgrc_rhodecode` is added to each repository that was used with
172 SSH access. This file is then imported inside main hgrc file, it contains
173 some Mercurial hooks for ACL checks.
174 This breaks full backward compatibility with releases prior to 4.10.0.
175 If you install 4.10+, enable SSH module and use SSH with a Mercurial repo, then
176 rollback used version to 4.9.1. In such case one additional actions is required.
177 Remove following line from `hgrc` file stored inside the repository:
178 `%include hgrc_rhodecode`
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
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 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
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.9.1
2 current_version = 4.10.0
3 message = release: Bump version {current_version} to {new_version}
3 message = release: Bump version {current_version} to {new_version}
4
4
5 [bumpversion:file:rhodecode/VERSION]
5 [bumpversion:file:rhodecode/VERSION]
6
6
@@ -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]
7 [task:rc_tools_pinned]
8 done = true
9
8
10 [task:fixes_on_stable]
9 [task:fixes_on_stable]
11 done = true
12
10
13 [task:pip2nix_generated]
11 [task:pip2nix_generated]
14 done = true
15
12
16 [task:changelog_updated]
13 [task:changelog_updated]
17 done = true
18
14
19 [task:generate_api_docs]
15 [task:generate_api_docs]
20 done = true
16
17 [task:updated_translation]
21
18
22 [release]
19 [release]
23 state = prepared
20 state = in_progress
24 version = 4.9.1
21 version = 4.10.0
25
26 [task:updated_translation]
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,35 +1,53 b''
1
1
2 .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only web-build
2 .PHONY: clean docs docs-clean docs-cleanup test test-clean test-only test-only-postgres test-only-mysql web-build
3
3
4 WEBPACK=./node_modules/webpack/bin/webpack.js
4 WEBPACK=./node_modules/webpack/bin/webpack.js
5 GRUNT=grunt
5 GRUNT=grunt
6 NODE_PATH=./node_modules
6 NODE_PATH=./node_modules
7
7
8
8
9 clean:
9 clean:
10 make test-clean
10 make test-clean
11 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' \) -exec rm '{}' ';'
11 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' \) -exec rm '{}' ';'
12
12
13 test:
13 test:
14 make test-clean
14 make test-clean
15 make test-only
15 make test-only
16
16
17 test-clean:
17 test-clean:
18 rm -rf coverage.xml htmlcov junit.xml pylint.log result
18 rm -rf coverage.xml htmlcov junit.xml pylint.log result
19 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
19 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
20
20
21 test-only:
21 test-only:
22 PYTHONHASHSEED=random py.test -vv -r xw --cov=rhodecode --cov-report=term-missing --cov-report=html rhodecode
22 PYTHONHASHSEED=random \
23 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
24 --cov-report=term-missing --cov-report=html \
25 rhodecode
26
27 test-only-mysql:
28 PYTHONHASHSEED=random \
29 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
30 --cov-report=term-missing --cov-report=html \
31 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "mysql://root:qweqwe@localhost/rhodecode_test"}}' \
32 rhodecode
33
34 test-only-postgres:
35 PYTHONHASHSEED=random \
36 py.test -x -vv -r xw -p no:sugar --cov=rhodecode \
37 --cov-report=term-missing --cov-report=html \
38 --ini-config-override='{"app:main": {"sqlalchemy.db1.url": "postgresql://postgres:qweqwe@localhost/rhodecode_test"}}' \
39 rhodecode
40
23
41
24 docs:
42 docs:
25 (cd docs; nix-build default.nix -o result; make clean html)
43 (cd docs; nix-build default.nix -o result; make clean html)
26
44
27 docs-clean:
45 docs-clean:
28 (cd docs; make clean)
46 (cd docs; make clean)
29
47
30 docs-cleanup:
48 docs-cleanup:
31 (cd docs; make cleanup)
49 (cd docs; make cleanup)
32
50
33 web-build:
51 web-build:
34 NODE_PATH=$(NODE_PATH) $(GRUNT)
52 NODE_PATH=$(NODE_PATH) $(GRUNT)
35
53
@@ -1,678 +1,725 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION 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 rhodecode.ini --paste rhodecode.ini
67 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.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 recommended 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.
94 ## prefix middleware for RhodeCode.
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/custom_prefix. Enable `filter-with =` option below as well.
97 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
98 ## And set your prefix like: `prefix = /custom_prefix`
98 ## And set your prefix like: `prefix = /custom_prefix`
99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
100 ## to make your cookies only work on prefix url
100 ## to make your cookies only work on prefix url
101 [filter:proxy-prefix]
101 [filter:proxy-prefix]
102 use = egg:PasteDeploy#prefix
102 use = egg:PasteDeploy#prefix
103 prefix = /
103 prefix = /
104
104
105 [app:main]
105 [app:main]
106 use = egg:rhodecode-enterprise-ce
106 use = egg:rhodecode-enterprise-ce
107
107
108 ## enable proxy prefix middleware, defined above
108 ## enable proxy prefix middleware, defined above
109 #filter-with = proxy-prefix
109 #filter-with = proxy-prefix
110
110
111 # During development the we want to have the debug toolbar enabled
111 # During development the we want to have the debug toolbar enabled
112 pyramid.includes =
112 pyramid.includes =
113 pyramid_debugtoolbar
113 pyramid_debugtoolbar
114 rhodecode.utils.debugtoolbar
115 rhodecode.lib.middleware.request_wrapper
114 rhodecode.lib.middleware.request_wrapper
116
115
117 pyramid.reload_templates = true
116 pyramid.reload_templates = true
118
117
119 debugtoolbar.hosts = 0.0.0.0/0
118 debugtoolbar.hosts = 0.0.0.0/0
120 debugtoolbar.exclude_prefixes =
119 debugtoolbar.exclude_prefixes =
121 /css
120 /css
122 /fonts
121 /fonts
123 /images
122 /images
124 /js
123 /js
125
124
126 ## RHODECODE PLUGINS ##
125 ## RHODECODE PLUGINS ##
127 rhodecode.includes =
126 rhodecode.includes =
128 rhodecode.api
127 rhodecode.api
129
128
130
129
131 # api prefix url
130 # api prefix url
132 rhodecode.api.url = /_admin/api
131 rhodecode.api.url = /_admin/api
133
132
134
133
135 ## END RHODECODE PLUGINS ##
134 ## END RHODECODE PLUGINS ##
136
135
137 ## encryption key used to encrypt social plugin tokens,
136 ## encryption key used to encrypt social plugin tokens,
138 ## remote_urls with credentials etc, if not set it defaults to
137 ## remote_urls with credentials etc, if not set it defaults to
139 ## `beaker.session.secret`
138 ## `beaker.session.secret`
140 #rhodecode.encrypted_values.secret =
139 #rhodecode.encrypted_values.secret =
141
140
142 ## decryption strict mode (enabled by default). It controls if decryption raises
141 ## decryption strict mode (enabled by default). It controls if decryption raises
143 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
142 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
144 #rhodecode.encrypted_values.strict = false
143 #rhodecode.encrypted_values.strict = false
145
144
146 ## return gzipped responses from Rhodecode (static files/application)
145 ## return gzipped responses from Rhodecode (static files/application)
147 gzip_responses = false
146 gzip_responses = false
148
147
149 ## autogenerate javascript routes file on startup
148 ## autogenerate javascript routes file on startup
150 generate_js_files = false
149 generate_js_files = false
151
150
152 ## Optional Languages
151 ## Optional Languages
153 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
152 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
154 lang = en
153 lang = en
155
154
156 ## perform a full repository scan on each server start, this should be
155 ## perform a full repository scan on each server start, this should be
157 ## set to false after first startup, to allow faster server restarts.
156 ## set to false after first startup, to allow faster server restarts.
158 startup.import_repos = false
157 startup.import_repos = false
159
158
160 ## Uncomment and set this path to use archive download cache.
159 ## Uncomment and set this path to use archive download cache.
161 ## Once enabled, generated archives will be cached at this location
160 ## Once enabled, generated archives will be cached at this location
162 ## and served from the cache during subsequent requests for the same archive of
161 ## and served from the cache during subsequent requests for the same archive of
163 ## the repository.
162 ## the repository.
164 #archive_cache_dir = /tmp/tarballcache
163 #archive_cache_dir = /tmp/tarballcache
165
164
165 ## URL at which the application is running. This is used for bootstraping
166 ## requests in context when no web request is available. Used in ishell, or
167 ## SSH calls. Set this for events to receive proper url for SSH calls.
168 app.base_url = http://rhodecode.local
169
166 ## change this to unique ID for security
170 ## change this to unique ID for security
167 app_instance_uuid = rc-production
171 app_instance_uuid = rc-production
168
172
169 ## cut off limit for large diffs (size in bytes)
173 ## cut off limit for large diffs (size in bytes). If overall diff size on
170 cut_off_limit_diff = 1024000
174 ## commit, or pull request exceeds this limit this diff will be displayed
171 cut_off_limit_file = 256000
175 ## partially. E.g 512000 == 512Kb
176 cut_off_limit_diff = 512000
177
178 ## cut off limit for large files inside diffs (size in bytes). Each individual
179 ## file inside diff which exceeds this limit will be displayed partially.
180 ## E.g 128000 == 128Kb
181 cut_off_limit_file = 128000
172
182
173 ## use cache version of scm repo everywhere
183 ## use cache version of scm repo everywhere
174 vcs_full_cache = true
184 vcs_full_cache = true
175
185
176 ## force https in RhodeCode, fixes https redirects, assumes it's always https
186 ## force https in RhodeCode, fixes https redirects, assumes it's always https
177 ## Normally this is controlled by proper http flags sent from http server
187 ## Normally this is controlled by proper http flags sent from http server
178 force_https = false
188 force_https = false
179
189
180 ## use Strict-Transport-Security headers
190 ## use Strict-Transport-Security headers
181 use_htsts = false
191 use_htsts = false
182
192
183 ## number of commits stats will parse on each iteration
193 ## number of commits stats will parse on each iteration
184 commit_parse_limit = 25
194 commit_parse_limit = 25
185
195
186 ## git rev filter option, --all is the default filter, if you need to
196 ## git rev filter option, --all is the default filter, if you need to
187 ## hide all refs in changelog switch this to --branches --tags
197 ## hide all refs in changelog switch this to --branches --tags
188 git_rev_filter = --branches --tags
198 git_rev_filter = --branches --tags
189
199
190 # Set to true if your repos are exposed using the dumb protocol
200 # Set to true if your repos are exposed using the dumb protocol
191 git_update_server_info = false
201 git_update_server_info = false
192
202
193 ## RSS/ATOM feed options
203 ## RSS/ATOM feed options
194 rss_cut_off_limit = 256000
204 rss_cut_off_limit = 256000
195 rss_items_per_page = 10
205 rss_items_per_page = 10
196 rss_include_diff = false
206 rss_include_diff = false
197
207
198 ## gist URL alias, used to create nicer urls for gist. This should be an
208 ## gist URL alias, used to create nicer urls for gist. This should be an
199 ## url that does rewrites to _admin/gists/{gistid}.
209 ## url that does rewrites to _admin/gists/{gistid}.
200 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
210 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
201 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
211 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
202 gist_alias_url =
212 gist_alias_url =
203
213
204 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
214 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
205 ## used for access.
215 ## used for access.
206 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
216 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
207 ## came from the the logged in user who own this authentication token.
217 ## came from the the logged in user who own this authentication token.
218 ## Additionally @TOKEN syntaxt can be used to bound the view to specific
219 ## authentication token. Such view would be only accessible when used together
220 ## with this authentication token
208 ##
221 ##
209 ## Syntax is ControllerClass:function_pattern.
222 ## list of all views can be found under `/_admin/permissions/auth_token_access`
210 ## To enable access to raw_files put `FilesController:raw`.
211 ## To enable access to patches add `ChangesetController:changeset_patch`.
212 ## The list should be "," separated and on a single line.
223 ## The list should be "," separated and on a single line.
213 ##
224 ##
214 ## Recommended controllers to enable:
225 ## Most common views to enable:
215 # ChangesetController:changeset_patch,
226 # RepoCommitsView:repo_commit_download
216 # ChangesetController:changeset_raw,
227 # RepoCommitsView:repo_commit_patch
217 # FilesController:raw,
228 # RepoCommitsView:repo_commit_raw
218 # FilesController:archivefile,
229 # RepoCommitsView:repo_commit_raw@TOKEN
219 # GistsController:*,
230 # RepoFilesView:repo_files_diff
231 # RepoFilesView:repo_archivefile
232 # RepoFilesView:repo_file_raw
233 # GistView:*
220 api_access_controllers_whitelist =
234 api_access_controllers_whitelist =
221
235
222 ## default encoding used to convert from and to unicode
236 ## default encoding used to convert from and to unicode
223 ## can be also a comma separated list of encoding in case of mixed encodings
237 ## can be also a comma separated list of encoding in case of mixed encodings
224 default_encoding = UTF-8
238 default_encoding = UTF-8
225
239
226 ## instance-id prefix
240 ## instance-id prefix
227 ## a prefix key for this instance used for cache invalidation when running
241 ## a prefix key for this instance used for cache invalidation when running
228 ## multiple instances of rhodecode, make sure it's globally unique for
242 ## multiple instances of rhodecode, make sure it's globally unique for
229 ## all running rhodecode instances. Leave empty if you don't use it
243 ## all running rhodecode instances. Leave empty if you don't use it
230 instance_id =
244 instance_id =
231
245
232 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
246 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
233 ## of an authentication plugin also if it is disabled by it's settings.
247 ## of an authentication plugin also if it is disabled by it's settings.
234 ## This could be useful if you are unable to log in to the system due to broken
248 ## This could be useful if you are unable to log in to the system due to broken
235 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
249 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
236 ## module to log in again and fix the settings.
250 ## module to log in again and fix the settings.
237 ##
251 ##
238 ## Available builtin plugin IDs (hash is part of the ID):
252 ## Available builtin plugin IDs (hash is part of the ID):
239 ## egg:rhodecode-enterprise-ce#rhodecode
253 ## egg:rhodecode-enterprise-ce#rhodecode
240 ## egg:rhodecode-enterprise-ce#pam
254 ## egg:rhodecode-enterprise-ce#pam
241 ## egg:rhodecode-enterprise-ce#ldap
255 ## egg:rhodecode-enterprise-ce#ldap
242 ## egg:rhodecode-enterprise-ce#jasig_cas
256 ## egg:rhodecode-enterprise-ce#jasig_cas
243 ## egg:rhodecode-enterprise-ce#headers
257 ## egg:rhodecode-enterprise-ce#headers
244 ## egg:rhodecode-enterprise-ce#crowd
258 ## egg:rhodecode-enterprise-ce#crowd
245 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
259 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
246
260
247 ## alternative return HTTP header for failed authentication. Default HTTP
261 ## alternative return HTTP header for failed authentication. Default HTTP
248 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
262 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
249 ## handling that causing a series of failed authentication calls.
263 ## handling that causing a series of failed authentication calls.
250 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
264 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
251 ## This will be served instead of default 401 on bad authnetication
265 ## This will be served instead of default 401 on bad authnetication
252 auth_ret_code =
266 auth_ret_code =
253
267
254 ## use special detection method when serving auth_ret_code, instead of serving
268 ## use special detection method when serving auth_ret_code, instead of serving
255 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
269 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
256 ## and then serve auth_ret_code to clients
270 ## and then serve auth_ret_code to clients
257 auth_ret_code_detection = false
271 auth_ret_code_detection = false
258
272
259 ## locking return code. When repository is locked return this HTTP code. 2XX
273 ## locking return code. When repository is locked return this HTTP code. 2XX
260 ## codes don't break the transactions while 4XX codes do
274 ## codes don't break the transactions while 4XX codes do
261 lock_ret_code = 423
275 lock_ret_code = 423
262
276
263 ## allows to change the repository location in settings page
277 ## allows to change the repository location in settings page
264 allow_repo_location_change = true
278 allow_repo_location_change = true
265
279
266 ## allows to setup custom hooks in settings page
280 ## allows to setup custom hooks in settings page
267 allow_custom_hooks_settings = true
281 allow_custom_hooks_settings = true
268
282
269 ## generated license token, goto license page in RhodeCode settings to obtain
283 ## generated license token, goto license page in RhodeCode settings to obtain
270 ## new token
284 ## new token
271 license_token =
285 license_token =
272
286
273 ## supervisor connection uri, for managing supervisor and logs.
287 ## supervisor connection uri, for managing supervisor and logs.
274 supervisor.uri =
288 supervisor.uri =
275 ## supervisord group name/id we only want this RC instance to handle
289 ## supervisord group name/id we only want this RC instance to handle
276 supervisor.group_id = dev
290 supervisor.group_id = dev
277
291
278 ## Display extended labs settings
292 ## Display extended labs settings
279 labs_settings_active = true
293 labs_settings_active = true
280
294
281 ####################################
295 ####################################
282 ### CELERY CONFIG ####
296 ### CELERY CONFIG ####
283 ####################################
297 ####################################
284 use_celery = false
298 use_celery = false
285 broker.host = localhost
299 broker.host = localhost
286 broker.vhost = rabbitmqhost
300 broker.vhost = rabbitmqhost
287 broker.port = 5672
301 broker.port = 5672
288 broker.user = rabbitmq
302 broker.user = rabbitmq
289 broker.password = qweqwe
303 broker.password = qweqwe
290
304
291 celery.imports = rhodecode.lib.celerylib.tasks
305 celery.imports = rhodecode.lib.celerylib.tasks
292
306
293 celery.result.backend = amqp
307 celery.result.backend = amqp
294 celery.result.dburi = amqp://
308 celery.result.dburi = amqp://
295 celery.result.serialier = json
309 celery.result.serialier = json
296
310
297 #celery.send.task.error.emails = true
311 #celery.send.task.error.emails = true
298 #celery.amqp.task.result.expires = 18000
312 #celery.amqp.task.result.expires = 18000
299
313
300 celeryd.concurrency = 2
314 celeryd.concurrency = 2
301 #celeryd.log.file = celeryd.log
315 #celeryd.log.file = celeryd.log
302 celeryd.log.level = debug
316 celeryd.log.level = debug
303 celeryd.max.tasks.per.child = 1
317 celeryd.max.tasks.per.child = 1
304
318
305 ## tasks will never be sent to the queue, but executed locally instead.
319 ## tasks will never be sent to the queue, but executed locally instead.
306 celery.always.eager = false
320 celery.always.eager = false
307
321
308 ####################################
322 ####################################
309 ### BEAKER CACHE ####
323 ### BEAKER CACHE ####
310 ####################################
324 ####################################
311 # default cache dir for templates. Putting this into a ramdisk
325 # default cache dir for templates. Putting this into a ramdisk
312 ## can boost performance, eg. %(here)s/data_ramdisk
326 ## can boost performance, eg. %(here)s/data_ramdisk
313 cache_dir = %(here)s/data
327 cache_dir = %(here)s/data
314
328
315 ## locking and default file storage for Beaker. Putting this into a ramdisk
329 ## locking and default file storage for Beaker. Putting this into a ramdisk
316 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
330 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
317 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
331 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
318 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
332 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
319
333
320 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
334 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
321
335
322 beaker.cache.super_short_term.type = memory
336 beaker.cache.super_short_term.type = memory
323 beaker.cache.super_short_term.expire = 10
337 beaker.cache.super_short_term.expire = 10
324 beaker.cache.super_short_term.key_length = 256
338 beaker.cache.super_short_term.key_length = 256
325
339
326 beaker.cache.short_term.type = memory
340 beaker.cache.short_term.type = memory
327 beaker.cache.short_term.expire = 60
341 beaker.cache.short_term.expire = 60
328 beaker.cache.short_term.key_length = 256
342 beaker.cache.short_term.key_length = 256
329
343
330 beaker.cache.long_term.type = memory
344 beaker.cache.long_term.type = memory
331 beaker.cache.long_term.expire = 36000
345 beaker.cache.long_term.expire = 36000
332 beaker.cache.long_term.key_length = 256
346 beaker.cache.long_term.key_length = 256
333
347
334 beaker.cache.sql_cache_short.type = memory
348 beaker.cache.sql_cache_short.type = memory
335 beaker.cache.sql_cache_short.expire = 10
349 beaker.cache.sql_cache_short.expire = 10
336 beaker.cache.sql_cache_short.key_length = 256
350 beaker.cache.sql_cache_short.key_length = 256
337
351
338 ## default is memory cache, configure only if required
352 ## default is memory cache, configure only if required
339 ## using multi-node or multi-worker setup
353 ## using multi-node or multi-worker setup
340 #beaker.cache.auth_plugins.type = ext:database
354 #beaker.cache.auth_plugins.type = ext:database
341 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
355 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
342 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
356 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
343 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
357 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
344 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
358 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
345 #beaker.cache.auth_plugins.sa.pool_size = 10
359 #beaker.cache.auth_plugins.sa.pool_size = 10
346 #beaker.cache.auth_plugins.sa.max_overflow = 0
360 #beaker.cache.auth_plugins.sa.max_overflow = 0
347
361
348 beaker.cache.repo_cache_long.type = memorylru_base
362 beaker.cache.repo_cache_long.type = memorylru_base
349 beaker.cache.repo_cache_long.max_items = 4096
363 beaker.cache.repo_cache_long.max_items = 4096
350 beaker.cache.repo_cache_long.expire = 2592000
364 beaker.cache.repo_cache_long.expire = 2592000
351
365
352 ## default is memorylru_base cache, configure only if required
366 ## default is memorylru_base cache, configure only if required
353 ## using multi-node or multi-worker setup
367 ## using multi-node or multi-worker setup
354 #beaker.cache.repo_cache_long.type = ext:memcached
368 #beaker.cache.repo_cache_long.type = ext:memcached
355 #beaker.cache.repo_cache_long.url = localhost:11211
369 #beaker.cache.repo_cache_long.url = localhost:11211
356 #beaker.cache.repo_cache_long.expire = 1209600
370 #beaker.cache.repo_cache_long.expire = 1209600
357 #beaker.cache.repo_cache_long.key_length = 256
371 #beaker.cache.repo_cache_long.key_length = 256
358
372
359 ####################################
373 ####################################
360 ### BEAKER SESSION ####
374 ### BEAKER SESSION ####
361 ####################################
375 ####################################
362
376
363 ## .session.type is type of storage options for the session, current allowed
377 ## .session.type is type of storage options for the session, current allowed
364 ## types are file, ext:memcached, ext:database, and memory (default).
378 ## types are file, ext:memcached, ext:database, and memory (default).
365 beaker.session.type = file
379 beaker.session.type = file
366 beaker.session.data_dir = %(here)s/data/sessions/data
380 beaker.session.data_dir = %(here)s/data/sessions/data
367
381
368 ## db based session, fast, and allows easy management over logged in users
382 ## db based session, fast, and allows easy management over logged in users
369 #beaker.session.type = ext:database
383 #beaker.session.type = ext:database
370 #beaker.session.table_name = db_session
384 #beaker.session.table_name = db_session
371 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
385 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
372 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
386 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
373 #beaker.session.sa.pool_recycle = 3600
387 #beaker.session.sa.pool_recycle = 3600
374 #beaker.session.sa.echo = false
388 #beaker.session.sa.echo = false
375
389
376 beaker.session.key = rhodecode
390 beaker.session.key = rhodecode
377 beaker.session.secret = develop-rc-uytcxaz
391 beaker.session.secret = develop-rc-uytcxaz
378 beaker.session.lock_dir = %(here)s/data/sessions/lock
392 beaker.session.lock_dir = %(here)s/data/sessions/lock
379
393
380 ## Secure encrypted cookie. Requires AES and AES python libraries
394 ## Secure encrypted cookie. Requires AES and AES python libraries
381 ## you must disable beaker.session.secret to use this
395 ## you must disable beaker.session.secret to use this
382 #beaker.session.encrypt_key = key_for_encryption
396 #beaker.session.encrypt_key = key_for_encryption
383 #beaker.session.validate_key = validation_key
397 #beaker.session.validate_key = validation_key
384
398
385 ## sets session as invalid(also logging out user) if it haven not been
399 ## sets session as invalid(also logging out user) if it haven not been
386 ## accessed for given amount of time in seconds
400 ## accessed for given amount of time in seconds
387 beaker.session.timeout = 2592000
401 beaker.session.timeout = 2592000
388 beaker.session.httponly = true
402 beaker.session.httponly = true
389 ## Path to use for the cookie. Set to prefix if you use prefix middleware
403 ## Path to use for the cookie. Set to prefix if you use prefix middleware
390 #beaker.session.cookie_path = /custom_prefix
404 #beaker.session.cookie_path = /custom_prefix
391
405
392 ## uncomment for https secure cookie
406 ## uncomment for https secure cookie
393 beaker.session.secure = false
407 beaker.session.secure = false
394
408
395 ## auto save the session to not to use .save()
409 ## auto save the session to not to use .save()
396 beaker.session.auto = false
410 beaker.session.auto = false
397
411
398 ## default cookie expiration time in seconds, set to `true` to set expire
412 ## default cookie expiration time in seconds, set to `true` to set expire
399 ## at browser close
413 ## at browser close
400 #beaker.session.cookie_expires = 3600
414 #beaker.session.cookie_expires = 3600
401
415
402 ###################################
416 ###################################
403 ## SEARCH INDEXING CONFIGURATION ##
417 ## SEARCH INDEXING CONFIGURATION ##
404 ###################################
418 ###################################
405 ## Full text search indexer is available in rhodecode-tools under
419 ## Full text search indexer is available in rhodecode-tools under
406 ## `rhodecode-tools index` command
420 ## `rhodecode-tools index` command
407
421
408 ## WHOOSH Backend, doesn't require additional services to run
422 ## WHOOSH Backend, doesn't require additional services to run
409 ## it works good with few dozen repos
423 ## it works good with few dozen repos
410 search.module = rhodecode.lib.index.whoosh
424 search.module = rhodecode.lib.index.whoosh
411 search.location = %(here)s/data/index
425 search.location = %(here)s/data/index
412
426
413 ########################################
427 ########################################
414 ### CHANNELSTREAM CONFIG ####
428 ### CHANNELSTREAM CONFIG ####
415 ########################################
429 ########################################
416 ## channelstream enables persistent connections and live notification
430 ## channelstream enables persistent connections and live notification
417 ## in the system. It's also used by the chat system
431 ## in the system. It's also used by the chat system
418 channelstream.enabled = false
432 channelstream.enabled = false
419
433
420 ## server address for channelstream server on the backend
434 ## server address for channelstream server on the backend
421 channelstream.server = 127.0.0.1:9800
435 channelstream.server = 127.0.0.1:9800
422
436
423 ## location of the channelstream server from outside world
437 ## location of the channelstream server from outside world
424 ## use ws:// for http or wss:// for https. This address needs to be handled
438 ## use ws:// for http or wss:// for https. This address needs to be handled
425 ## by external HTTP server such as Nginx or Apache
439 ## by external HTTP server such as Nginx or Apache
426 ## see nginx/apache configuration examples in our docs
440 ## see nginx/apache configuration examples in our docs
427 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
441 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
428 channelstream.secret = secret
442 channelstream.secret = secret
429 channelstream.history.location = %(here)s/channelstream_history
443 channelstream.history.location = %(here)s/channelstream_history
430
444
431 ## Internal application path that Javascript uses to connect into.
445 ## Internal application path that Javascript uses to connect into.
432 ## If you use proxy-prefix the prefix should be added before /_channelstream
446 ## If you use proxy-prefix the prefix should be added before /_channelstream
433 channelstream.proxy_path = /_channelstream
447 channelstream.proxy_path = /_channelstream
434
448
435
449
436 ###################################
450 ###################################
437 ## APPENLIGHT CONFIG ##
451 ## APPENLIGHT CONFIG ##
438 ###################################
452 ###################################
439
453
440 ## Appenlight is tailored to work with RhodeCode, see
454 ## Appenlight is tailored to work with RhodeCode, see
441 ## http://appenlight.com for details how to obtain an account
455 ## http://appenlight.com for details how to obtain an account
442
456
443 ## appenlight integration enabled
457 ## appenlight integration enabled
444 appenlight = false
458 appenlight = false
445
459
446 appenlight.server_url = https://api.appenlight.com
460 appenlight.server_url = https://api.appenlight.com
447 appenlight.api_key = YOUR_API_KEY
461 appenlight.api_key = YOUR_API_KEY
448 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
462 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
449
463
450 # used for JS client
464 # used for JS client
451 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
465 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
452
466
453 ## TWEAK AMOUNT OF INFO SENT HERE
467 ## TWEAK AMOUNT OF INFO SENT HERE
454
468
455 ## enables 404 error logging (default False)
469 ## enables 404 error logging (default False)
456 appenlight.report_404 = false
470 appenlight.report_404 = false
457
471
458 ## time in seconds after request is considered being slow (default 1)
472 ## time in seconds after request is considered being slow (default 1)
459 appenlight.slow_request_time = 1
473 appenlight.slow_request_time = 1
460
474
461 ## record slow requests in application
475 ## record slow requests in application
462 ## (needs to be enabled for slow datastore recording and time tracking)
476 ## (needs to be enabled for slow datastore recording and time tracking)
463 appenlight.slow_requests = true
477 appenlight.slow_requests = true
464
478
465 ## enable hooking to application loggers
479 ## enable hooking to application loggers
466 appenlight.logging = true
480 appenlight.logging = true
467
481
468 ## minimum log level for log capture
482 ## minimum log level for log capture
469 appenlight.logging.level = WARNING
483 appenlight.logging.level = WARNING
470
484
471 ## send logs only from erroneous/slow requests
485 ## send logs only from erroneous/slow requests
472 ## (saves API quota for intensive logging)
486 ## (saves API quota for intensive logging)
473 appenlight.logging_on_error = false
487 appenlight.logging_on_error = false
474
488
475 ## list of additonal keywords that should be grabbed from environ object
489 ## list of additonal keywords that should be grabbed from environ object
476 ## can be string with comma separated list of words in lowercase
490 ## can be string with comma separated list of words in lowercase
477 ## (by default client will always send following info:
491 ## (by default client will always send following info:
478 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
492 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
479 ## start with HTTP* this list be extended with additional keywords here
493 ## start with HTTP* this list be extended with additional keywords here
480 appenlight.environ_keys_whitelist =
494 appenlight.environ_keys_whitelist =
481
495
482 ## list of keywords that should be blanked from request object
496 ## list of keywords that should be blanked from request object
483 ## can be string with comma separated list of words in lowercase
497 ## can be string with comma separated list of words in lowercase
484 ## (by default client will always blank keys that contain following words
498 ## (by default client will always blank keys that contain following words
485 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
499 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
486 ## this list be extended with additional keywords set here
500 ## this list be extended with additional keywords set here
487 appenlight.request_keys_blacklist =
501 appenlight.request_keys_blacklist =
488
502
489 ## list of namespaces that should be ignores when gathering log entries
503 ## list of namespaces that should be ignores when gathering log entries
490 ## can be string with comma separated list of namespaces
504 ## can be string with comma separated list of namespaces
491 ## (by default the client ignores own entries: appenlight_client.client)
505 ## (by default the client ignores own entries: appenlight_client.client)
492 appenlight.log_namespace_blacklist =
506 appenlight.log_namespace_blacklist =
493
507
494
508
495 ################################################################################
509 ################################################################################
496 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
510 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
497 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
511 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
498 ## execute malicious code after an exception is raised. ##
512 ## execute malicious code after an exception is raised. ##
499 ################################################################################
513 ################################################################################
500 #set debug = false
514 #set debug = false
501
515
502
516
503 ##############
517 ##############
504 ## STYLING ##
518 ## STYLING ##
505 ##############
519 ##############
506 debug_style = true
520 debug_style = true
507
521
508 ###########################################
522 ###########################################
509 ### MAIN RHODECODE DATABASE CONFIG ###
523 ### MAIN RHODECODE DATABASE CONFIG ###
510 ###########################################
524 ###########################################
511 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
525 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
512 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
526 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
513 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
527 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
514 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
528 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
515
529
516 # see sqlalchemy docs for other advanced settings
530 # see sqlalchemy docs for other advanced settings
517
531
518 ## print the sql statements to output
532 ## print the sql statements to output
519 sqlalchemy.db1.echo = false
533 sqlalchemy.db1.echo = false
520 ## recycle the connections after this amount of seconds
534 ## recycle the connections after this amount of seconds
521 sqlalchemy.db1.pool_recycle = 3600
535 sqlalchemy.db1.pool_recycle = 3600
522 sqlalchemy.db1.convert_unicode = true
536 sqlalchemy.db1.convert_unicode = true
523
537
524 ## the number of connections to keep open inside the connection pool.
538 ## the number of connections to keep open inside the connection pool.
525 ## 0 indicates no limit
539 ## 0 indicates no limit
526 #sqlalchemy.db1.pool_size = 5
540 #sqlalchemy.db1.pool_size = 5
527
541
528 ## the number of connections to allow in connection pool "overflow", that is
542 ## the number of connections to allow in connection pool "overflow", that is
529 ## connections that can be opened above and beyond the pool_size setting,
543 ## connections that can be opened above and beyond the pool_size setting,
530 ## which defaults to five.
544 ## which defaults to five.
531 #sqlalchemy.db1.max_overflow = 10
545 #sqlalchemy.db1.max_overflow = 10
532
546
533
547
534 ##################
548 ##################
535 ### VCS CONFIG ###
549 ### VCS CONFIG ###
536 ##################
550 ##################
537 vcs.server.enable = true
551 vcs.server.enable = true
538 vcs.server = localhost:9900
552 vcs.server = localhost:9900
539
553
540 ## Web server connectivity protocol, responsible for web based VCS operatations
554 ## Web server connectivity protocol, responsible for web based VCS operatations
541 ## Available protocols are:
555 ## Available protocols are:
542 ## `http` - use http-rpc backend (default)
556 ## `http` - use http-rpc backend (default)
543 vcs.server.protocol = http
557 vcs.server.protocol = http
544
558
545 ## Push/Pull operations protocol, available options are:
559 ## Push/Pull operations protocol, available options are:
546 ## `http` - use http-rpc backend (default)
560 ## `http` - use http-rpc backend (default)
547 ##
561 ##
548 vcs.scm_app_implementation = http
562 vcs.scm_app_implementation = http
549
563
550 ## Push/Pull operations hooks protocol, available options are:
564 ## Push/Pull operations hooks protocol, available options are:
551 ## `http` - use http-rpc backend (default)
565 ## `http` - use http-rpc backend (default)
552 vcs.hooks.protocol = http
566 vcs.hooks.protocol = http
553
567
554 vcs.server.log_level = debug
568 vcs.server.log_level = debug
555 ## Start VCSServer with this instance as a subprocess, usefull for development
569 ## Start VCSServer with this instance as a subprocess, usefull for development
556 vcs.start_server = true
570 vcs.start_server = true
557
571
558 ## List of enabled VCS backends, available options are:
572 ## List of enabled VCS backends, available options are:
559 ## `hg` - mercurial
573 ## `hg` - mercurial
560 ## `git` - git
574 ## `git` - git
561 ## `svn` - subversion
575 ## `svn` - subversion
562 vcs.backends = hg, git, svn
576 vcs.backends = hg, git, svn
563
577
564 vcs.connection_timeout = 3600
578 vcs.connection_timeout = 3600
565 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
579 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
566 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
580 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
567 #vcs.svn.compatible_version = pre-1.8-compatible
581 #vcs.svn.compatible_version = pre-1.8-compatible
568
582
569
583
570 ############################################################
584 ############################################################
571 ### Subversion proxy support (mod_dav_svn) ###
585 ### Subversion proxy support (mod_dav_svn) ###
572 ### Maps RhodeCode repo groups into SVN paths for Apache ###
586 ### Maps RhodeCode repo groups into SVN paths for Apache ###
573 ############################################################
587 ############################################################
574 ## Enable or disable the config file generation.
588 ## Enable or disable the config file generation.
575 svn.proxy.generate_config = false
589 svn.proxy.generate_config = false
576 ## Generate config file with `SVNListParentPath` set to `On`.
590 ## Generate config file with `SVNListParentPath` set to `On`.
577 svn.proxy.list_parent_path = true
591 svn.proxy.list_parent_path = true
578 ## Set location and file name of generated config file.
592 ## Set location and file name of generated config file.
579 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
593 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
594 ## alternative mod_dav config template. This needs to be a mako template
595 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
580 ## Used as a prefix to the `Location` block in the generated config file.
596 ## Used as a prefix to the `Location` block in the generated config file.
581 ## In most cases it should be set to `/`.
597 ## In most cases it should be set to `/`.
582 svn.proxy.location_root = /
598 svn.proxy.location_root = /
583 ## Command to reload the mod dav svn configuration on change.
599 ## Command to reload the mod dav svn configuration on change.
584 ## Example: `/etc/init.d/apache2 reload`
600 ## Example: `/etc/init.d/apache2 reload`
585 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
601 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
586 ## If the timeout expires before the reload command finishes, the command will
602 ## If the timeout expires before the reload command finishes, the command will
587 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
603 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
588 #svn.proxy.reload_timeout = 10
604 #svn.proxy.reload_timeout = 10
589
605
606 ############################################################
607 ### SSH Support Settings ###
608 ############################################################
609
610 ## Defines if a custom authorized_keys file should be created and written on
611 ## any change user ssh keys. Setting this to false also disables posibility
612 ## of adding SSH keys by users from web interface. Super admins can still
613 ## manage SSH Keys.
614 ssh.generate_authorized_keyfile = false
615
616 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
617 # ssh.authorized_keys_ssh_opts =
618
619 ## Path to the authrozied_keys file where the generate entries are placed.
620 ## It is possible to have multiple key files specified in `sshd_config` e.g.
621 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
622 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
623
624 ## Command to execute the SSH wrapper. The binary is available in the
625 ## rhodecode installation directory.
626 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
627 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
628
629 ## Allow shell when executing the ssh-wrapper command
630 ssh.wrapper_cmd_allow_shell = false
631
632 ## Enables logging, and detailed output send back to the client during SSH
633 ## operations. Usefull for debugging, shouldn't be used in production.
634 ssh.enable_debug_logging = true
635
636 ## Paths to binary executable, by default they are the names, but we can
637 ## override them if we want to use a custom one
638 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
639 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
640 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
641
642
590 ## Dummy marker to add new entries after.
643 ## Dummy marker to add new entries after.
591 ## Add any custom entries below. Please don't remove.
644 ## Add any custom entries below. Please don't remove.
592 custom.conf = 1
645 custom.conf = 1
593
646
594
647
595 ################################
648 ################################
596 ### LOGGING CONFIGURATION ####
649 ### LOGGING CONFIGURATION ####
597 ################################
650 ################################
598 [loggers]
651 [loggers]
599 keys = root, routes, rhodecode, sqlalchemy, beaker, templates
652 keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper
600
653
601 [handlers]
654 [handlers]
602 keys = console, console_sql
655 keys = console, console_sql
603
656
604 [formatters]
657 [formatters]
605 keys = generic, color_formatter, color_formatter_sql
658 keys = generic, color_formatter, color_formatter_sql
606
659
607 #############
660 #############
608 ## LOGGERS ##
661 ## LOGGERS ##
609 #############
662 #############
610 [logger_root]
663 [logger_root]
611 level = NOTSET
664 level = NOTSET
612 handlers = console
665 handlers = console
613
666
614 [logger_routes]
667 [logger_sqlalchemy]
615 level = DEBUG
668 level = INFO
616 handlers =
669 handlers = console_sql
617 qualname = routes.middleware
670 qualname = sqlalchemy.engine
618 ## "level = DEBUG" logs the route matched and routing variables.
671 propagate = 0
619 propagate = 1
620
672
621 [logger_beaker]
673 [logger_beaker]
622 level = DEBUG
674 level = DEBUG
623 handlers =
675 handlers =
624 qualname = beaker.container
676 qualname = beaker.container
625 propagate = 1
677 propagate = 1
626
678
627 [logger_templates]
628 level = INFO
629 handlers =
630 qualname = pylons.templating
631 propagate = 1
632
633 [logger_rhodecode]
679 [logger_rhodecode]
634 level = DEBUG
680 level = DEBUG
635 handlers =
681 handlers =
636 qualname = rhodecode
682 qualname = rhodecode
637 propagate = 1
683 propagate = 1
638
684
639 [logger_sqlalchemy]
685 [logger_ssh_wrapper]
640 level = INFO
686 level = DEBUG
641 handlers = console_sql
687 handlers =
642 qualname = sqlalchemy.engine
688 qualname = ssh_wrapper
643 propagate = 0
689 propagate = 1
690
644
691
645 ##############
692 ##############
646 ## HANDLERS ##
693 ## HANDLERS ##
647 ##############
694 ##############
648
695
649 [handler_console]
696 [handler_console]
650 class = StreamHandler
697 class = StreamHandler
651 args = (sys.stderr, )
698 args = (sys.stderr, )
652 level = DEBUG
699 level = DEBUG
653 formatter = color_formatter
700 formatter = color_formatter
654
701
655 [handler_console_sql]
702 [handler_console_sql]
656 class = StreamHandler
703 class = StreamHandler
657 args = (sys.stderr, )
704 args = (sys.stderr, )
658 level = DEBUG
705 level = DEBUG
659 formatter = color_formatter_sql
706 formatter = color_formatter_sql
660
707
661 ################
708 ################
662 ## FORMATTERS ##
709 ## FORMATTERS ##
663 ################
710 ################
664
711
665 [formatter_generic]
712 [formatter_generic]
666 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
713 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
667 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
714 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
668 datefmt = %Y-%m-%d %H:%M:%S
715 datefmt = %Y-%m-%d %H:%M:%S
669
716
670 [formatter_color_formatter]
717 [formatter_color_formatter]
671 class = rhodecode.lib.logging_formatter.ColorFormatter
718 class = rhodecode.lib.logging_formatter.ColorFormatter
672 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
719 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
673 datefmt = %Y-%m-%d %H:%M:%S
720 datefmt = %Y-%m-%d %H:%M:%S
674
721
675 [formatter_color_formatter_sql]
722 [formatter_color_formatter_sql]
676 class = rhodecode.lib.logging_formatter.ColorFormatterSql
723 class = rhodecode.lib.logging_formatter.ColorFormatterSql
677 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
724 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
678 datefmt = %Y-%m-%d %H:%M:%S
725 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,90 +1,113 b''
1 """
1 """
2 gunicorn config extension and hooks. Sets additional configuration that is
2 gunicorn config extension and hooks. Sets additional configuration that is
3 available post the .ini config.
3 available post the .ini config.
4
4
5 - workers = ${cpu_number}
5 - workers = ${cpu_number}
6 - threads = 1
6 - threads = 1
7 - proc_name = ${gunicorn_proc_name}
7 - proc_name = ${gunicorn_proc_name}
8 - worker_class = sync
8 - worker_class = sync
9 - worker_connections = 10
9 - worker_connections = 10
10 - max_requests = 1000
10 - max_requests = 1000
11 - max_requests_jitter = 30
11 - max_requests_jitter = 30
12 - timeout = 21600
12 - timeout = 21600
13
13
14 """
14 """
15
15
16 import multiprocessing
16 import multiprocessing
17 import sys
17 import sys
18 import time
19 import datetime
18 import threading
20 import threading
19 import traceback
21 import traceback
22 from gunicorn.glogging import Logger
20
23
21
24
22 # GLOBAL
25 # GLOBAL
23 errorlog = '-'
26 errorlog = '-'
24 accesslog = '-'
27 accesslog = '-'
25 loglevel = 'debug'
28 loglevel = 'debug'
26
29
27 # SECURITY
30 # SECURITY
28 limit_request_line = 4094
31 limit_request_line = 4094
29 limit_request_fields = 100
32 limit_request_fields = 100
30 limit_request_field_size = 8190
33 limit_request_field_size = 8190
31
34
32 # SERVER MECHANICS
35 # SERVER MECHANICS
33 # None == system temp dir
36 # None == system temp dir
34 worker_tmp_dir = None
37 worker_tmp_dir = None
35 tmp_upload_dir = None
38 tmp_upload_dir = None
36
39
37 # Custom log format
40 # Custom log format
38 access_log_format = (
41 access_log_format = (
39 '%(t)s GNCRN %(p)-8s %(h)-15s rqt:%(L)s %(s)s %(b)-6s "%(m)s:%(U)s %(q)s" usr:%(u)s "%(f)s" "%(a)s"')
42 '%(t)s GNCRN %(p)-8s %(h)-15s rqt:%(L)s %(s)s %(b)-6s "%(m)s:%(U)s %(q)s" usr:%(u)s "%(f)s" "%(a)s"')
40
43
41 # self adjust workers based on CPU count
44 # self adjust workers based on CPU count
42 # workers = multiprocessing.cpu_count() * 2 + 1
45 # workers = multiprocessing.cpu_count() * 2 + 1
43
46
44
47
45 def post_fork(server, worker):
48 def post_fork(server, worker):
46 server.log.info("[<%-10s>] WORKER spawned", worker.pid)
49 server.log.info("[<%-10s>] WORKER spawned", worker.pid)
47
50
48
51
49 def pre_fork(server, worker):
52 def pre_fork(server, worker):
50 pass
53 pass
51
54
52
55
53 def pre_exec(server):
56 def pre_exec(server):
54 server.log.info("Forked child, re-executing.")
57 server.log.info("Forked child, re-executing.")
55
58
56
59
57 def when_ready(server):
60 def when_ready(server):
58 server.log.info("Server is ready. Spawning workers")
61 server.log.info("Server is ready. Spawning workers")
59
62
60
63
61 def worker_int(worker):
64 def worker_int(worker):
62 worker.log.info("[<%-10s>] worker received INT or QUIT signal", worker.pid)
65 worker.log.info("[<%-10s>] worker received INT or QUIT signal", worker.pid)
63
66
64 # get traceback info, on worker crash
67 # get traceback info, on worker crash
65 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
68 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
66 code = []
69 code = []
67 for thread_id, stack in sys._current_frames().items():
70 for thread_id, stack in sys._current_frames().items():
68 code.append(
71 code.append(
69 "\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id))
72 "\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id))
70 for fname, lineno, name, line in traceback.extract_stack(stack):
73 for fname, lineno, name, line in traceback.extract_stack(stack):
71 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
74 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
72 if line:
75 if line:
73 code.append(" %s" % (line.strip()))
76 code.append(" %s" % (line.strip()))
74 worker.log.debug("\n".join(code))
77 worker.log.debug("\n".join(code))
75
78
76
79
77 def worker_abort(worker):
80 def worker_abort(worker):
78 worker.log.info("[<%-10s>] worker received SIGABRT signal", worker.pid)
81 worker.log.info("[<%-10s>] worker received SIGABRT signal", worker.pid)
79
82
80
83
81 def pre_request(worker, req):
84 def pre_request(worker, req):
82 return
85 return
83 worker.log.debug("[<%-10s>] PRE WORKER: %s %s",
86 worker.log.debug("[<%-10s>] PRE WORKER: %s %s",
84 worker.pid, req.method, req.path)
87 worker.pid, req.method, req.path)
85
88
86
89
87 def post_request(worker, req, environ, resp):
90 def post_request(worker, req, environ, resp):
88 return
91 return
89 worker.log.debug("[<%-10s>] POST WORKER: %s %s resp: %s", worker.pid,
92 worker.log.debug("[<%-10s>] POST WORKER: %s %s resp: %s", worker.pid,
90 req.method, req.path, resp.status_code) No newline at end of file
93 req.method, req.path, resp.status_code)
94
95
96 class RhodeCodeLogger(Logger):
97 """
98 Custom Logger that allows some customization that gunicorn doesn't allow
99 """
100
101 datefmt = r"%Y-%m-%d %H:%M:%S"
102
103 def __init__(self, cfg):
104 Logger.__init__(self, cfg)
105
106 def now(self):
107 """ return date in RhodeCode Log format """
108 now = time.time()
109 msecs = int((now - long(now)) * 1000)
110 return time.strftime(self.datefmt, time.localtime(now)) + '.{0:03d}'.format(msecs)
111
112
113 logger_class = RhodeCodeLogger
@@ -1,647 +1,695 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION 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 rhodecode.ini --paste rhodecode.ini
67 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.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 recommended 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.
94 ## prefix middleware for RhodeCode.
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/custom_prefix. Enable `filter-with =` option below as well.
97 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
98 ## And set your prefix like: `prefix = /custom_prefix`
98 ## And set your prefix like: `prefix = /custom_prefix`
99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
100 ## to make your cookies only work on prefix url
100 ## to make your cookies only work on prefix url
101 [filter:proxy-prefix]
101 [filter:proxy-prefix]
102 use = egg:PasteDeploy#prefix
102 use = egg:PasteDeploy#prefix
103 prefix = /
103 prefix = /
104
104
105 [app:main]
105 [app:main]
106 use = egg:rhodecode-enterprise-ce
106 use = egg:rhodecode-enterprise-ce
107
107
108 ## enable proxy prefix middleware, defined above
108 ## enable proxy prefix middleware, defined above
109 #filter-with = proxy-prefix
109 #filter-with = proxy-prefix
110
110
111 ## encryption key used to encrypt social plugin tokens,
111 ## encryption key used to encrypt social plugin tokens,
112 ## remote_urls with credentials etc, if not set it defaults to
112 ## remote_urls with credentials etc, if not set it defaults to
113 ## `beaker.session.secret`
113 ## `beaker.session.secret`
114 #rhodecode.encrypted_values.secret =
114 #rhodecode.encrypted_values.secret =
115
115
116 ## decryption strict mode (enabled by default). It controls if decryption raises
116 ## decryption strict mode (enabled by default). It controls if decryption raises
117 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
117 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
118 #rhodecode.encrypted_values.strict = false
118 #rhodecode.encrypted_values.strict = false
119
119
120 ## return gzipped responses from Rhodecode (static files/application)
120 ## return gzipped responses from Rhodecode (static files/application)
121 gzip_responses = false
121 gzip_responses = false
122
122
123 ## autogenerate javascript routes file on startup
123 ## autogenerate javascript routes file on startup
124 generate_js_files = false
124 generate_js_files = false
125
125
126 ## Optional Languages
126 ## Optional Languages
127 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
127 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
128 lang = en
128 lang = en
129
129
130 ## perform a full repository scan on each server start, this should be
130 ## perform a full repository scan on each server start, this should be
131 ## set to false after first startup, to allow faster server restarts.
131 ## set to false after first startup, to allow faster server restarts.
132 startup.import_repos = false
132 startup.import_repos = false
133
133
134 ## Uncomment and set this path to use archive download cache.
134 ## Uncomment and set this path to use archive download cache.
135 ## Once enabled, generated archives will be cached at this location
135 ## Once enabled, generated archives will be cached at this location
136 ## and served from the cache during subsequent requests for the same archive of
136 ## and served from the cache during subsequent requests for the same archive of
137 ## the repository.
137 ## the repository.
138 #archive_cache_dir = /tmp/tarballcache
138 #archive_cache_dir = /tmp/tarballcache
139
139
140 ## URL at which the application is running. This is used for bootstraping
141 ## requests in context when no web request is available. Used in ishell, or
142 ## SSH calls. Set this for events to receive proper url for SSH calls.
143 app.base_url = http://rhodecode.local
144
140 ## change this to unique ID for security
145 ## change this to unique ID for security
141 app_instance_uuid = rc-production
146 app_instance_uuid = rc-production
142
147
143 ## cut off limit for large diffs (size in bytes)
148 ## cut off limit for large diffs (size in bytes). If overall diff size on
144 cut_off_limit_diff = 1024000
149 ## commit, or pull request exceeds this limit this diff will be displayed
145 cut_off_limit_file = 256000
150 ## partially. E.g 512000 == 512Kb
151 cut_off_limit_diff = 512000
152
153 ## cut off limit for large files inside diffs (size in bytes). Each individual
154 ## file inside diff which exceeds this limit will be displayed partially.
155 ## E.g 128000 == 128Kb
156 cut_off_limit_file = 128000
146
157
147 ## use cache version of scm repo everywhere
158 ## use cache version of scm repo everywhere
148 vcs_full_cache = true
159 vcs_full_cache = true
149
160
150 ## force https in RhodeCode, fixes https redirects, assumes it's always https
161 ## force https in RhodeCode, fixes https redirects, assumes it's always https
151 ## Normally this is controlled by proper http flags sent from http server
162 ## Normally this is controlled by proper http flags sent from http server
152 force_https = false
163 force_https = false
153
164
154 ## use Strict-Transport-Security headers
165 ## use Strict-Transport-Security headers
155 use_htsts = false
166 use_htsts = false
156
167
157 ## number of commits stats will parse on each iteration
168 ## number of commits stats will parse on each iteration
158 commit_parse_limit = 25
169 commit_parse_limit = 25
159
170
160 ## git rev filter option, --all is the default filter, if you need to
171 ## git rev filter option, --all is the default filter, if you need to
161 ## hide all refs in changelog switch this to --branches --tags
172 ## hide all refs in changelog switch this to --branches --tags
162 git_rev_filter = --branches --tags
173 git_rev_filter = --branches --tags
163
174
164 # Set to true if your repos are exposed using the dumb protocol
175 # Set to true if your repos are exposed using the dumb protocol
165 git_update_server_info = false
176 git_update_server_info = false
166
177
167 ## RSS/ATOM feed options
178 ## RSS/ATOM feed options
168 rss_cut_off_limit = 256000
179 rss_cut_off_limit = 256000
169 rss_items_per_page = 10
180 rss_items_per_page = 10
170 rss_include_diff = false
181 rss_include_diff = false
171
182
172 ## gist URL alias, used to create nicer urls for gist. This should be an
183 ## gist URL alias, used to create nicer urls for gist. This should be an
173 ## url that does rewrites to _admin/gists/{gistid}.
184 ## url that does rewrites to _admin/gists/{gistid}.
174 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
185 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
175 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
186 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
176 gist_alias_url =
187 gist_alias_url =
177
188
178 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
189 ## List of views (using glob pattern syntax) that AUTH TOKENS could be
179 ## used for access.
190 ## used for access.
180 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
191 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
181 ## came from the the logged in user who own this authentication token.
192 ## came from the the logged in user who own this authentication token.
193 ## Additionally @TOKEN syntaxt can be used to bound the view to specific
194 ## authentication token. Such view would be only accessible when used together
195 ## with this authentication token
182 ##
196 ##
183 ## Syntax is ControllerClass:function_pattern.
197 ## list of all views can be found under `/_admin/permissions/auth_token_access`
184 ## To enable access to raw_files put `FilesController:raw`.
185 ## To enable access to patches add `ChangesetController:changeset_patch`.
186 ## The list should be "," separated and on a single line.
198 ## The list should be "," separated and on a single line.
187 ##
199 ##
188 ## Recommended controllers to enable:
200 ## Most common views to enable:
189 # ChangesetController:changeset_patch,
201 # RepoCommitsView:repo_commit_download
190 # ChangesetController:changeset_raw,
202 # RepoCommitsView:repo_commit_patch
191 # FilesController:raw,
203 # RepoCommitsView:repo_commit_raw
192 # FilesController:archivefile,
204 # RepoCommitsView:repo_commit_raw@TOKEN
193 # GistsController:*,
205 # RepoFilesView:repo_files_diff
206 # RepoFilesView:repo_archivefile
207 # RepoFilesView:repo_file_raw
208 # GistView:*
194 api_access_controllers_whitelist =
209 api_access_controllers_whitelist =
195
210
196 ## default encoding used to convert from and to unicode
211 ## default encoding used to convert from and to unicode
197 ## can be also a comma separated list of encoding in case of mixed encodings
212 ## can be also a comma separated list of encoding in case of mixed encodings
198 default_encoding = UTF-8
213 default_encoding = UTF-8
199
214
200 ## instance-id prefix
215 ## instance-id prefix
201 ## a prefix key for this instance used for cache invalidation when running
216 ## a prefix key for this instance used for cache invalidation when running
202 ## multiple instances of rhodecode, make sure it's globally unique for
217 ## multiple instances of rhodecode, make sure it's globally unique for
203 ## all running rhodecode instances. Leave empty if you don't use it
218 ## all running rhodecode instances. Leave empty if you don't use it
204 instance_id =
219 instance_id =
205
220
206 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
221 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
207 ## of an authentication plugin also if it is disabled by it's settings.
222 ## of an authentication plugin also if it is disabled by it's settings.
208 ## This could be useful if you are unable to log in to the system due to broken
223 ## This could be useful if you are unable to log in to the system due to broken
209 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
224 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
210 ## module to log in again and fix the settings.
225 ## module to log in again and fix the settings.
211 ##
226 ##
212 ## Available builtin plugin IDs (hash is part of the ID):
227 ## Available builtin plugin IDs (hash is part of the ID):
213 ## egg:rhodecode-enterprise-ce#rhodecode
228 ## egg:rhodecode-enterprise-ce#rhodecode
214 ## egg:rhodecode-enterprise-ce#pam
229 ## egg:rhodecode-enterprise-ce#pam
215 ## egg:rhodecode-enterprise-ce#ldap
230 ## egg:rhodecode-enterprise-ce#ldap
216 ## egg:rhodecode-enterprise-ce#jasig_cas
231 ## egg:rhodecode-enterprise-ce#jasig_cas
217 ## egg:rhodecode-enterprise-ce#headers
232 ## egg:rhodecode-enterprise-ce#headers
218 ## egg:rhodecode-enterprise-ce#crowd
233 ## egg:rhodecode-enterprise-ce#crowd
219 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
234 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
220
235
221 ## alternative return HTTP header for failed authentication. Default HTTP
236 ## alternative return HTTP header for failed authentication. Default HTTP
222 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
237 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
223 ## handling that causing a series of failed authentication calls.
238 ## handling that causing a series of failed authentication calls.
224 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
239 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
225 ## This will be served instead of default 401 on bad authnetication
240 ## This will be served instead of default 401 on bad authnetication
226 auth_ret_code =
241 auth_ret_code =
227
242
228 ## use special detection method when serving auth_ret_code, instead of serving
243 ## use special detection method when serving auth_ret_code, instead of serving
229 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
244 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
230 ## and then serve auth_ret_code to clients
245 ## and then serve auth_ret_code to clients
231 auth_ret_code_detection = false
246 auth_ret_code_detection = false
232
247
233 ## locking return code. When repository is locked return this HTTP code. 2XX
248 ## locking return code. When repository is locked return this HTTP code. 2XX
234 ## codes don't break the transactions while 4XX codes do
249 ## codes don't break the transactions while 4XX codes do
235 lock_ret_code = 423
250 lock_ret_code = 423
236
251
237 ## allows to change the repository location in settings page
252 ## allows to change the repository location in settings page
238 allow_repo_location_change = true
253 allow_repo_location_change = true
239
254
240 ## allows to setup custom hooks in settings page
255 ## allows to setup custom hooks in settings page
241 allow_custom_hooks_settings = true
256 allow_custom_hooks_settings = true
242
257
243 ## generated license token, goto license page in RhodeCode settings to obtain
258 ## generated license token, goto license page in RhodeCode settings to obtain
244 ## new token
259 ## new token
245 license_token =
260 license_token =
246
261
247 ## supervisor connection uri, for managing supervisor and logs.
262 ## supervisor connection uri, for managing supervisor and logs.
248 supervisor.uri =
263 supervisor.uri =
249 ## supervisord group name/id we only want this RC instance to handle
264 ## supervisord group name/id we only want this RC instance to handle
250 supervisor.group_id = prod
265 supervisor.group_id = prod
251
266
252 ## Display extended labs settings
267 ## Display extended labs settings
253 labs_settings_active = true
268 labs_settings_active = true
254
269
255 ####################################
270 ####################################
256 ### CELERY CONFIG ####
271 ### CELERY CONFIG ####
257 ####################################
272 ####################################
258 use_celery = false
273 use_celery = false
259 broker.host = localhost
274 broker.host = localhost
260 broker.vhost = rabbitmqhost
275 broker.vhost = rabbitmqhost
261 broker.port = 5672
276 broker.port = 5672
262 broker.user = rabbitmq
277 broker.user = rabbitmq
263 broker.password = qweqwe
278 broker.password = qweqwe
264
279
265 celery.imports = rhodecode.lib.celerylib.tasks
280 celery.imports = rhodecode.lib.celerylib.tasks
266
281
267 celery.result.backend = amqp
282 celery.result.backend = amqp
268 celery.result.dburi = amqp://
283 celery.result.dburi = amqp://
269 celery.result.serialier = json
284 celery.result.serialier = json
270
285
271 #celery.send.task.error.emails = true
286 #celery.send.task.error.emails = true
272 #celery.amqp.task.result.expires = 18000
287 #celery.amqp.task.result.expires = 18000
273
288
274 celeryd.concurrency = 2
289 celeryd.concurrency = 2
275 #celeryd.log.file = celeryd.log
290 #celeryd.log.file = celeryd.log
276 celeryd.log.level = debug
291 celeryd.log.level = debug
277 celeryd.max.tasks.per.child = 1
292 celeryd.max.tasks.per.child = 1
278
293
279 ## tasks will never be sent to the queue, but executed locally instead.
294 ## tasks will never be sent to the queue, but executed locally instead.
280 celery.always.eager = false
295 celery.always.eager = false
281
296
282 ####################################
297 ####################################
283 ### BEAKER CACHE ####
298 ### BEAKER CACHE ####
284 ####################################
299 ####################################
285 # default cache dir for templates. Putting this into a ramdisk
300 # default cache dir for templates. Putting this into a ramdisk
286 ## can boost performance, eg. %(here)s/data_ramdisk
301 ## can boost performance, eg. %(here)s/data_ramdisk
287 cache_dir = %(here)s/data
302 cache_dir = %(here)s/data
288
303
289 ## locking and default file storage for Beaker. Putting this into a ramdisk
304 ## locking and default file storage for Beaker. Putting this into a ramdisk
290 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
305 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
291 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
306 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
292 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
307 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
293
308
294 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
309 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
295
310
296 beaker.cache.super_short_term.type = memory
311 beaker.cache.super_short_term.type = memory
297 beaker.cache.super_short_term.expire = 10
312 beaker.cache.super_short_term.expire = 10
298 beaker.cache.super_short_term.key_length = 256
313 beaker.cache.super_short_term.key_length = 256
299
314
300 beaker.cache.short_term.type = memory
315 beaker.cache.short_term.type = memory
301 beaker.cache.short_term.expire = 60
316 beaker.cache.short_term.expire = 60
302 beaker.cache.short_term.key_length = 256
317 beaker.cache.short_term.key_length = 256
303
318
304 beaker.cache.long_term.type = memory
319 beaker.cache.long_term.type = memory
305 beaker.cache.long_term.expire = 36000
320 beaker.cache.long_term.expire = 36000
306 beaker.cache.long_term.key_length = 256
321 beaker.cache.long_term.key_length = 256
307
322
308 beaker.cache.sql_cache_short.type = memory
323 beaker.cache.sql_cache_short.type = memory
309 beaker.cache.sql_cache_short.expire = 10
324 beaker.cache.sql_cache_short.expire = 10
310 beaker.cache.sql_cache_short.key_length = 256
325 beaker.cache.sql_cache_short.key_length = 256
311
326
312 ## default is memory cache, configure only if required
327 ## default is memory cache, configure only if required
313 ## using multi-node or multi-worker setup
328 ## using multi-node or multi-worker setup
314 #beaker.cache.auth_plugins.type = ext:database
329 #beaker.cache.auth_plugins.type = ext:database
315 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
330 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
316 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
331 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
317 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
332 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
318 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
333 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
319 #beaker.cache.auth_plugins.sa.pool_size = 10
334 #beaker.cache.auth_plugins.sa.pool_size = 10
320 #beaker.cache.auth_plugins.sa.max_overflow = 0
335 #beaker.cache.auth_plugins.sa.max_overflow = 0
321
336
322 beaker.cache.repo_cache_long.type = memorylru_base
337 beaker.cache.repo_cache_long.type = memorylru_base
323 beaker.cache.repo_cache_long.max_items = 4096
338 beaker.cache.repo_cache_long.max_items = 4096
324 beaker.cache.repo_cache_long.expire = 2592000
339 beaker.cache.repo_cache_long.expire = 2592000
325
340
326 ## default is memorylru_base cache, configure only if required
341 ## default is memorylru_base cache, configure only if required
327 ## using multi-node or multi-worker setup
342 ## using multi-node or multi-worker setup
328 #beaker.cache.repo_cache_long.type = ext:memcached
343 #beaker.cache.repo_cache_long.type = ext:memcached
329 #beaker.cache.repo_cache_long.url = localhost:11211
344 #beaker.cache.repo_cache_long.url = localhost:11211
330 #beaker.cache.repo_cache_long.expire = 1209600
345 #beaker.cache.repo_cache_long.expire = 1209600
331 #beaker.cache.repo_cache_long.key_length = 256
346 #beaker.cache.repo_cache_long.key_length = 256
332
347
333 ####################################
348 ####################################
334 ### BEAKER SESSION ####
349 ### BEAKER SESSION ####
335 ####################################
350 ####################################
336
351
337 ## .session.type is type of storage options for the session, current allowed
352 ## .session.type is type of storage options for the session, current allowed
338 ## types are file, ext:memcached, ext:database, and memory (default).
353 ## types are file, ext:memcached, ext:database, and memory (default).
339 beaker.session.type = file
354 beaker.session.type = file
340 beaker.session.data_dir = %(here)s/data/sessions/data
355 beaker.session.data_dir = %(here)s/data/sessions/data
341
356
342 ## db based session, fast, and allows easy management over logged in users
357 ## db based session, fast, and allows easy management over logged in users
343 #beaker.session.type = ext:database
358 #beaker.session.type = ext:database
344 #beaker.session.table_name = db_session
359 #beaker.session.table_name = db_session
345 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
360 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
346 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
361 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
347 #beaker.session.sa.pool_recycle = 3600
362 #beaker.session.sa.pool_recycle = 3600
348 #beaker.session.sa.echo = false
363 #beaker.session.sa.echo = false
349
364
350 beaker.session.key = rhodecode
365 beaker.session.key = rhodecode
351 beaker.session.secret = production-rc-uytcxaz
366 beaker.session.secret = production-rc-uytcxaz
352 beaker.session.lock_dir = %(here)s/data/sessions/lock
367 beaker.session.lock_dir = %(here)s/data/sessions/lock
353
368
354 ## Secure encrypted cookie. Requires AES and AES python libraries
369 ## Secure encrypted cookie. Requires AES and AES python libraries
355 ## you must disable beaker.session.secret to use this
370 ## you must disable beaker.session.secret to use this
356 #beaker.session.encrypt_key = key_for_encryption
371 #beaker.session.encrypt_key = key_for_encryption
357 #beaker.session.validate_key = validation_key
372 #beaker.session.validate_key = validation_key
358
373
359 ## sets session as invalid(also logging out user) if it haven not been
374 ## sets session as invalid(also logging out user) if it haven not been
360 ## accessed for given amount of time in seconds
375 ## accessed for given amount of time in seconds
361 beaker.session.timeout = 2592000
376 beaker.session.timeout = 2592000
362 beaker.session.httponly = true
377 beaker.session.httponly = true
363 ## Path to use for the cookie. Set to prefix if you use prefix middleware
378 ## Path to use for the cookie. Set to prefix if you use prefix middleware
364 #beaker.session.cookie_path = /custom_prefix
379 #beaker.session.cookie_path = /custom_prefix
365
380
366 ## uncomment for https secure cookie
381 ## uncomment for https secure cookie
367 beaker.session.secure = false
382 beaker.session.secure = false
368
383
369 ## auto save the session to not to use .save()
384 ## auto save the session to not to use .save()
370 beaker.session.auto = false
385 beaker.session.auto = false
371
386
372 ## default cookie expiration time in seconds, set to `true` to set expire
387 ## default cookie expiration time in seconds, set to `true` to set expire
373 ## at browser close
388 ## at browser close
374 #beaker.session.cookie_expires = 3600
389 #beaker.session.cookie_expires = 3600
375
390
376 ###################################
391 ###################################
377 ## SEARCH INDEXING CONFIGURATION ##
392 ## SEARCH INDEXING CONFIGURATION ##
378 ###################################
393 ###################################
379 ## Full text search indexer is available in rhodecode-tools under
394 ## Full text search indexer is available in rhodecode-tools under
380 ## `rhodecode-tools index` command
395 ## `rhodecode-tools index` command
381
396
382 ## WHOOSH Backend, doesn't require additional services to run
397 ## WHOOSH Backend, doesn't require additional services to run
383 ## it works good with few dozen repos
398 ## it works good with few dozen repos
384 search.module = rhodecode.lib.index.whoosh
399 search.module = rhodecode.lib.index.whoosh
385 search.location = %(here)s/data/index
400 search.location = %(here)s/data/index
386
401
387 ########################################
402 ########################################
388 ### CHANNELSTREAM CONFIG ####
403 ### CHANNELSTREAM CONFIG ####
389 ########################################
404 ########################################
390 ## channelstream enables persistent connections and live notification
405 ## channelstream enables persistent connections and live notification
391 ## in the system. It's also used by the chat system
406 ## in the system. It's also used by the chat system
392 channelstream.enabled = false
407 channelstream.enabled = false
393
408
394 ## server address for channelstream server on the backend
409 ## server address for channelstream server on the backend
395 channelstream.server = 127.0.0.1:9800
410 channelstream.server = 127.0.0.1:9800
396
411
397 ## location of the channelstream server from outside world
412 ## location of the channelstream server from outside world
398 ## use ws:// for http or wss:// for https. This address needs to be handled
413 ## use ws:// for http or wss:// for https. This address needs to be handled
399 ## by external HTTP server such as Nginx or Apache
414 ## by external HTTP server such as Nginx or Apache
400 ## see nginx/apache configuration examples in our docs
415 ## see nginx/apache configuration examples in our docs
401 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
416 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
402 channelstream.secret = secret
417 channelstream.secret = secret
403 channelstream.history.location = %(here)s/channelstream_history
418 channelstream.history.location = %(here)s/channelstream_history
404
419
405 ## Internal application path that Javascript uses to connect into.
420 ## Internal application path that Javascript uses to connect into.
406 ## If you use proxy-prefix the prefix should be added before /_channelstream
421 ## If you use proxy-prefix the prefix should be added before /_channelstream
407 channelstream.proxy_path = /_channelstream
422 channelstream.proxy_path = /_channelstream
408
423
409
424
410 ###################################
425 ###################################
411 ## APPENLIGHT CONFIG ##
426 ## APPENLIGHT CONFIG ##
412 ###################################
427 ###################################
413
428
414 ## Appenlight is tailored to work with RhodeCode, see
429 ## Appenlight is tailored to work with RhodeCode, see
415 ## http://appenlight.com for details how to obtain an account
430 ## http://appenlight.com for details how to obtain an account
416
431
417 ## appenlight integration enabled
432 ## appenlight integration enabled
418 appenlight = false
433 appenlight = false
419
434
420 appenlight.server_url = https://api.appenlight.com
435 appenlight.server_url = https://api.appenlight.com
421 appenlight.api_key = YOUR_API_KEY
436 appenlight.api_key = YOUR_API_KEY
422 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
437 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
423
438
424 # used for JS client
439 # used for JS client
425 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
440 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
426
441
427 ## TWEAK AMOUNT OF INFO SENT HERE
442 ## TWEAK AMOUNT OF INFO SENT HERE
428
443
429 ## enables 404 error logging (default False)
444 ## enables 404 error logging (default False)
430 appenlight.report_404 = false
445 appenlight.report_404 = false
431
446
432 ## time in seconds after request is considered being slow (default 1)
447 ## time in seconds after request is considered being slow (default 1)
433 appenlight.slow_request_time = 1
448 appenlight.slow_request_time = 1
434
449
435 ## record slow requests in application
450 ## record slow requests in application
436 ## (needs to be enabled for slow datastore recording and time tracking)
451 ## (needs to be enabled for slow datastore recording and time tracking)
437 appenlight.slow_requests = true
452 appenlight.slow_requests = true
438
453
439 ## enable hooking to application loggers
454 ## enable hooking to application loggers
440 appenlight.logging = true
455 appenlight.logging = true
441
456
442 ## minimum log level for log capture
457 ## minimum log level for log capture
443 appenlight.logging.level = WARNING
458 appenlight.logging.level = WARNING
444
459
445 ## send logs only from erroneous/slow requests
460 ## send logs only from erroneous/slow requests
446 ## (saves API quota for intensive logging)
461 ## (saves API quota for intensive logging)
447 appenlight.logging_on_error = false
462 appenlight.logging_on_error = false
448
463
449 ## list of additonal keywords that should be grabbed from environ object
464 ## list of additonal keywords that should be grabbed from environ object
450 ## can be string with comma separated list of words in lowercase
465 ## can be string with comma separated list of words in lowercase
451 ## (by default client will always send following info:
466 ## (by default client will always send following info:
452 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
467 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
453 ## start with HTTP* this list be extended with additional keywords here
468 ## start with HTTP* this list be extended with additional keywords here
454 appenlight.environ_keys_whitelist =
469 appenlight.environ_keys_whitelist =
455
470
456 ## list of keywords that should be blanked from request object
471 ## list of keywords that should be blanked from request object
457 ## can be string with comma separated list of words in lowercase
472 ## can be string with comma separated list of words in lowercase
458 ## (by default client will always blank keys that contain following words
473 ## (by default client will always blank keys that contain following words
459 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
474 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
460 ## this list be extended with additional keywords set here
475 ## this list be extended with additional keywords set here
461 appenlight.request_keys_blacklist =
476 appenlight.request_keys_blacklist =
462
477
463 ## list of namespaces that should be ignores when gathering log entries
478 ## list of namespaces that should be ignores when gathering log entries
464 ## can be string with comma separated list of namespaces
479 ## can be string with comma separated list of namespaces
465 ## (by default the client ignores own entries: appenlight_client.client)
480 ## (by default the client ignores own entries: appenlight_client.client)
466 appenlight.log_namespace_blacklist =
481 appenlight.log_namespace_blacklist =
467
482
468
483
469 ################################################################################
484 ################################################################################
470 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
485 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
471 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
486 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
472 ## execute malicious code after an exception is raised. ##
487 ## execute malicious code after an exception is raised. ##
473 ################################################################################
488 ################################################################################
474 set debug = false
489 set debug = false
475
490
476
491
477 ###########################################
492 ###########################################
478 ### MAIN RHODECODE DATABASE CONFIG ###
493 ### MAIN RHODECODE DATABASE CONFIG ###
479 ###########################################
494 ###########################################
480 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
495 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
481 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
496 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
482 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
497 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
483 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
498 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
484
499
485 # see sqlalchemy docs for other advanced settings
500 # see sqlalchemy docs for other advanced settings
486
501
487 ## print the sql statements to output
502 ## print the sql statements to output
488 sqlalchemy.db1.echo = false
503 sqlalchemy.db1.echo = false
489 ## recycle the connections after this amount of seconds
504 ## recycle the connections after this amount of seconds
490 sqlalchemy.db1.pool_recycle = 3600
505 sqlalchemy.db1.pool_recycle = 3600
491 sqlalchemy.db1.convert_unicode = true
506 sqlalchemy.db1.convert_unicode = true
492
507
493 ## the number of connections to keep open inside the connection pool.
508 ## the number of connections to keep open inside the connection pool.
494 ## 0 indicates no limit
509 ## 0 indicates no limit
495 #sqlalchemy.db1.pool_size = 5
510 #sqlalchemy.db1.pool_size = 5
496
511
497 ## the number of connections to allow in connection pool "overflow", that is
512 ## the number of connections to allow in connection pool "overflow", that is
498 ## connections that can be opened above and beyond the pool_size setting,
513 ## connections that can be opened above and beyond the pool_size setting,
499 ## which defaults to five.
514 ## which defaults to five.
500 #sqlalchemy.db1.max_overflow = 10
515 #sqlalchemy.db1.max_overflow = 10
501
516
502
517
503 ##################
518 ##################
504 ### VCS CONFIG ###
519 ### VCS CONFIG ###
505 ##################
520 ##################
506 vcs.server.enable = true
521 vcs.server.enable = true
507 vcs.server = localhost:9900
522 vcs.server = localhost:9900
508
523
509 ## Web server connectivity protocol, responsible for web based VCS operatations
524 ## Web server connectivity protocol, responsible for web based VCS operatations
510 ## Available protocols are:
525 ## Available protocols are:
511 ## `http` - use http-rpc backend (default)
526 ## `http` - use http-rpc backend (default)
512 vcs.server.protocol = http
527 vcs.server.protocol = http
513
528
514 ## Push/Pull operations protocol, available options are:
529 ## Push/Pull operations protocol, available options are:
515 ## `http` - use http-rpc backend (default)
530 ## `http` - use http-rpc backend (default)
516 ##
531 ##
517 vcs.scm_app_implementation = http
532 vcs.scm_app_implementation = http
518
533
519 ## Push/Pull operations hooks protocol, available options are:
534 ## Push/Pull operations hooks protocol, available options are:
520 ## `http` - use http-rpc backend (default)
535 ## `http` - use http-rpc backend (default)
521 vcs.hooks.protocol = http
536 vcs.hooks.protocol = http
522
537
523 vcs.server.log_level = info
538 vcs.server.log_level = info
524 ## Start VCSServer with this instance as a subprocess, usefull for development
539 ## Start VCSServer with this instance as a subprocess, usefull for development
525 vcs.start_server = false
540 vcs.start_server = false
526
541
527 ## List of enabled VCS backends, available options are:
542 ## List of enabled VCS backends, available options are:
528 ## `hg` - mercurial
543 ## `hg` - mercurial
529 ## `git` - git
544 ## `git` - git
530 ## `svn` - subversion
545 ## `svn` - subversion
531 vcs.backends = hg, git, svn
546 vcs.backends = hg, git, svn
532
547
533 vcs.connection_timeout = 3600
548 vcs.connection_timeout = 3600
534 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
549 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
535 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
550 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
536 #vcs.svn.compatible_version = pre-1.8-compatible
551 #vcs.svn.compatible_version = pre-1.8-compatible
537
552
538
553
539 ############################################################
554 ############################################################
540 ### Subversion proxy support (mod_dav_svn) ###
555 ### Subversion proxy support (mod_dav_svn) ###
541 ### Maps RhodeCode repo groups into SVN paths for Apache ###
556 ### Maps RhodeCode repo groups into SVN paths for Apache ###
542 ############################################################
557 ############################################################
543 ## Enable or disable the config file generation.
558 ## Enable or disable the config file generation.
544 svn.proxy.generate_config = false
559 svn.proxy.generate_config = false
545 ## Generate config file with `SVNListParentPath` set to `On`.
560 ## Generate config file with `SVNListParentPath` set to `On`.
546 svn.proxy.list_parent_path = true
561 svn.proxy.list_parent_path = true
547 ## Set location and file name of generated config file.
562 ## Set location and file name of generated config file.
548 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
563 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
564 ## alternative mod_dav config template. This needs to be a mako template
565 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
549 ## Used as a prefix to the `Location` block in the generated config file.
566 ## Used as a prefix to the `Location` block in the generated config file.
550 ## In most cases it should be set to `/`.
567 ## In most cases it should be set to `/`.
551 svn.proxy.location_root = /
568 svn.proxy.location_root = /
552 ## Command to reload the mod dav svn configuration on change.
569 ## Command to reload the mod dav svn configuration on change.
553 ## Example: `/etc/init.d/apache2 reload`
570 ## Example: `/etc/init.d/apache2 reload`
554 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
571 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
555 ## If the timeout expires before the reload command finishes, the command will
572 ## If the timeout expires before the reload command finishes, the command will
556 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
573 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
557 #svn.proxy.reload_timeout = 10
574 #svn.proxy.reload_timeout = 10
558
575
576 ############################################################
577 ### SSH Support Settings ###
578 ############################################################
579
580 ## Defines if a custom authorized_keys file should be created and written on
581 ## any change user ssh keys. Setting this to false also disables posibility
582 ## of adding SSH keys by users from web interface. Super admins can still
583 ## manage SSH Keys.
584 ssh.generate_authorized_keyfile = false
585
586 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
587 # ssh.authorized_keys_ssh_opts =
588
589 ## Path to the authrozied_keys file where the generate entries are placed.
590 ## It is possible to have multiple key files specified in `sshd_config` e.g.
591 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
592 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
593
594 ## Command to execute the SSH wrapper. The binary is available in the
595 ## rhodecode installation directory.
596 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
597 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
598
599 ## Allow shell when executing the ssh-wrapper command
600 ssh.wrapper_cmd_allow_shell = false
601
602 ## Enables logging, and detailed output send back to the client during SSH
603 ## operations. Usefull for debugging, shouldn't be used in production.
604 ssh.enable_debug_logging = false
605
606 ## Paths to binary executable, by default they are the names, but we can
607 ## override them if we want to use a custom one
608 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
609 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
610 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
611
612
559 ## Dummy marker to add new entries after.
613 ## Dummy marker to add new entries after.
560 ## Add any custom entries below. Please don't remove.
614 ## Add any custom entries below. Please don't remove.
561 custom.conf = 1
615 custom.conf = 1
562
616
563
617
564 ################################
618 ################################
565 ### LOGGING CONFIGURATION ####
619 ### LOGGING CONFIGURATION ####
566 ################################
620 ################################
567 [loggers]
621 [loggers]
568 keys = root, routes, rhodecode, sqlalchemy, beaker, templates
622 keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper
569
623
570 [handlers]
624 [handlers]
571 keys = console, console_sql
625 keys = console, console_sql
572
626
573 [formatters]
627 [formatters]
574 keys = generic, color_formatter, color_formatter_sql
628 keys = generic, color_formatter, color_formatter_sql
575
629
576 #############
630 #############
577 ## LOGGERS ##
631 ## LOGGERS ##
578 #############
632 #############
579 [logger_root]
633 [logger_root]
580 level = NOTSET
634 level = NOTSET
581 handlers = console
635 handlers = console
582
636
583 [logger_routes]
637 [logger_sqlalchemy]
584 level = DEBUG
638 level = INFO
585 handlers =
639 handlers = console_sql
586 qualname = routes.middleware
640 qualname = sqlalchemy.engine
587 ## "level = DEBUG" logs the route matched and routing variables.
641 propagate = 0
588 propagate = 1
589
642
590 [logger_beaker]
643 [logger_beaker]
591 level = DEBUG
644 level = DEBUG
592 handlers =
645 handlers =
593 qualname = beaker.container
646 qualname = beaker.container
594 propagate = 1
647 propagate = 1
595
648
596 [logger_templates]
597 level = INFO
598 handlers =
599 qualname = pylons.templating
600 propagate = 1
601
602 [logger_rhodecode]
649 [logger_rhodecode]
603 level = DEBUG
650 level = DEBUG
604 handlers =
651 handlers =
605 qualname = rhodecode
652 qualname = rhodecode
606 propagate = 1
653 propagate = 1
607
654
608 [logger_sqlalchemy]
655 [logger_ssh_wrapper]
609 level = INFO
656 level = DEBUG
610 handlers = console_sql
657 handlers =
611 qualname = sqlalchemy.engine
658 qualname = ssh_wrapper
612 propagate = 0
659 propagate = 1
660
613
661
614 ##############
662 ##############
615 ## HANDLERS ##
663 ## HANDLERS ##
616 ##############
664 ##############
617
665
618 [handler_console]
666 [handler_console]
619 class = StreamHandler
667 class = StreamHandler
620 args = (sys.stderr, )
668 args = (sys.stderr, )
621 level = INFO
669 level = INFO
622 formatter = generic
670 formatter = generic
623
671
624 [handler_console_sql]
672 [handler_console_sql]
625 class = StreamHandler
673 class = StreamHandler
626 args = (sys.stderr, )
674 args = (sys.stderr, )
627 level = WARN
675 level = WARN
628 formatter = generic
676 formatter = generic
629
677
630 ################
678 ################
631 ## FORMATTERS ##
679 ## FORMATTERS ##
632 ################
680 ################
633
681
634 [formatter_generic]
682 [formatter_generic]
635 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
683 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
636 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
684 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
637 datefmt = %Y-%m-%d %H:%M:%S
685 datefmt = %Y-%m-%d %H:%M:%S
638
686
639 [formatter_color_formatter]
687 [formatter_color_formatter]
640 class = rhodecode.lib.logging_formatter.ColorFormatter
688 class = rhodecode.lib.logging_formatter.ColorFormatter
641 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
689 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
642 datefmt = %Y-%m-%d %H:%M:%S
690 datefmt = %Y-%m-%d %H:%M:%S
643
691
644 [formatter_color_formatter_sql]
692 [formatter_color_formatter_sql]
645 class = rhodecode.lib.logging_formatter.ColorFormatterSql
693 class = rhodecode.lib.logging_formatter.ColorFormatterSql
646 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
694 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
647 datefmt = %Y-%m-%d %H:%M:%S
695 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,90 +1,103 b''
1 .. _apache-conf-eg:
1 .. _apache-conf-eg:
2
2
3 Apache Configuration Example
3 Apache Configuration Example
4 ----------------------------
4 ----------------------------
5
5
6 Use the following example to configure Apache as a your web server.
6 Use the following example to configure Apache as a your web server.
7 Below config if for an Apache Reverse Proxy configuration.
7 Below config if for an Apache Reverse Proxy configuration.
8
8
9 .. note::
9 .. note::
10
10
11 Apache requires the following modules to be enabled. Below is an example
11 Apache requires the following modules to be enabled. Below is an example
12 how to enable them on Ubuntu Server
12 how to enable them on Ubuntu Server
13
13
14
14
15 .. code-block:: bash
15 .. code-block:: bash
16
16
17 $ sudo a2enmod proxy
17 $ sudo a2enmod proxy
18 $ sudo a2enmod proxy_http
18 $ sudo a2enmod proxy_http
19 $ sudo a2enmod proxy_balancer
19 $ sudo a2enmod proxy_balancer
20 $ sudo a2enmod headers
20 $ sudo a2enmod headers
21 $ sudo a2enmod ssl
21 $ sudo a2enmod ssl
22 $ sudo a2enmod rewrite
22 $ sudo a2enmod rewrite
23
23
24 # requires Apache 2.4+, required to handle websockets/channelstream
24 # requires Apache 2.4+, required to handle websockets/channelstream
25 $ sudo a2enmod proxy_wstunnel
25 $ sudo a2enmod proxy_wstunnel
26
26
27
27
28 .. code-block:: apache
28 .. code-block:: apache
29
29
30 ## HTTP to HTTPS rewrite
30 ## HTTP to HTTPS rewrite
31 <VirtualHost *:80>
31 <VirtualHost *:80>
32 ServerName rhodecode.myserver.com
32 ServerName rhodecode.myserver.com
33 DocumentRoot /var/www/html
33 DocumentRoot /var/www/html
34 Redirect permanent / https://rhodecode.myserver.com/
34 Redirect permanent / https://rhodecode.myserver.com/
35 </VirtualHost>
35 </VirtualHost>
36
36
37 ## MAIN SSL enabled server
37 ## MAIN SSL enabled server
38 <VirtualHost *:443>
38 <VirtualHost *:443>
39
39
40 ServerName rhodecode.myserver.com
40 ServerName rhodecode.myserver.com
41 ServerAlias rhodecode.myserver.com
41 ServerAlias rhodecode.myserver.com
42
42
43 ## Skip ProxyPass the _static to backend server
44 #ProxyPass /_static !
45
43 ## serve static files by Apache, recommended for performance
46 ## serve static files by Apache, recommended for performance
44 #Alias /_static /home/ubuntu/.rccontrol/community-1/static
47 #Alias /_static/rhodecode /home/ubuntu/.rccontrol/community-1/static
48
49 ## Allow Apache to access the static files in this directory
50 #<Directory /home/ubuntu/.rccontrol/community-1/static/>
51 # AllowOverride none
52 # Require all granted
53 #</Directory>
45
54
46 RequestHeader set X-Forwarded-Proto "https"
55 RequestHeader set X-Forwarded-Proto "https"
47
56
48 ## channelstream websocket handling
57 ## channelstream websocket handling
49 ProxyPass /_channelstream ws://localhost:9800
58 ProxyPass /_channelstream ws://localhost:9800
50 ProxyPassReverse /_channelstream ws://localhost:9800
59 ProxyPassReverse /_channelstream ws://localhost:9800
51
60
52 <Proxy *>
61 <Proxy *>
53 Order allow,deny
62 Order allow,deny
54 Allow from all
63 Allow from all
55 </Proxy>
64 </Proxy>
56
65
57 # Directive to properly generate url (clone url) for RhodeCode
66 # Directive to properly generate url (clone url) for RhodeCode
58 ProxyPreserveHost On
67 ProxyPreserveHost On
59
68
60 # Url to running RhodeCode instance. This is shown as `- URL:` when
69 # Url to running RhodeCode instance. This is shown as `- URL:` when
61 # running rccontrol status.
70 # running rccontrol status.
62 ProxyPass / http://127.0.0.1:10002/ timeout=7200 Keepalive=On
71 ProxyPass / http://127.0.0.1:10002/ timeout=7200 Keepalive=On
63 ProxyPassReverse / http://127.0.0.1:10002/
72 ProxyPassReverse / http://127.0.0.1:10002/
64
73
65 # Increase headers for large Mercurial headers
74 # Increase headers for large Mercurial headers
66 LimitRequestLine 16380
75 LimitRequestLine 16380
67
76
68 # strict http prevents from https -> http downgrade
77 # strict http prevents from https -> http downgrade
69 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
78 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
70
79
71 # Set x-frame options
80 # Set x-frame options
72 Header always append X-Frame-Options SAMEORIGIN
81 Header always append X-Frame-Options SAMEORIGIN
73
82
74 # To enable https use line below
83 # To enable https use line below
75 # SetEnvIf X-Url-Scheme https HTTPS=1
84 # SetEnvIf X-Url-Scheme https HTTPS=1
76
85
77 # SSL setup
86 # SSL setup
78 SSLEngine On
87 SSLEngine On
79 SSLCertificateFile /etc/apache2/ssl/rhodecode.myserver.pem
88 SSLCertificateFile /etc/apache2/ssl/rhodecode.myserver.pem
80 SSLCertificateKeyFile /etc/apache2/ssl/rhodecode.myserver.key
89 SSLCertificateKeyFile /etc/apache2/ssl/rhodecode.myserver.key
81
90
82 SSLProtocol all -SSLv2 -SSLv3
91 SSLProtocol all -SSLv2 -SSLv3
83 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
92 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
84 SSLHonorCipherOrder on
93 SSLHonorCipherOrder on
85
94
86 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
95 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
87 #SSLOpenSSLConfCmd DHParameters "/etc/apache2/dhparam.pem"
96 #SSLOpenSSLConfCmd DHParameters "/etc/apache2/dhparam.pem"
88
97
98 ## custom 502 error page. Will be displayed while RhodeCode server
99 ## is turned off
100 ErrorDocument 502 /path/to/.rccontrol/enterprise-1/static/502.html
101
89 </VirtualHost>
102 </VirtualHost>
90
103
@@ -1,135 +1,143 b''
1 Nginx Configuration Example
1 Nginx Configuration Example
2 ---------------------------
2 ---------------------------
3
3
4 Use the following example to configure Nginx as a your web server.
4 Use the following example to configure Nginx as a your web server.
5
5
6
6
7 .. code-block:: nginx
7 .. code-block:: nginx
8
8
9 ## rate limiter for certain pages to prevent brute force attacks
9 ## rate limiter for certain pages to prevent brute force attacks
10 limit_req_zone $binary_remote_addr zone=dl_limit:10m rate=1r/s;
10 limit_req_zone $binary_remote_addr zone=dl_limit:10m rate=1r/s;
11
11
12 ## custom log format
12 ## custom log format
13 log_format log_custom '$remote_addr - $remote_user [$time_local] '
13 log_format log_custom '$remote_addr - $remote_user [$time_local] '
14 '"$request" $status $body_bytes_sent '
14 '"$request" $status $body_bytes_sent '
15 '"$http_referer" "$http_user_agent" '
15 '"$http_referer" "$http_user_agent" '
16 '$request_time $upstream_response_time $pipe';
16 '$request_time $upstream_response_time $pipe';
17
17
18 ## define upstream (local RhodeCode instance) to connect to
18 ## define upstream (local RhodeCode instance) to connect to
19 upstream rc {
19 upstream rc {
20 # Url to running RhodeCode instance.
20 # Url to running RhodeCode instance.
21 # This is shown as `- URL:` in output from rccontrol status.
21 # This is shown as `- URL:` in output from rccontrol status.
22 server 127.0.0.1:10002;
22 server 127.0.0.1:10002;
23
23
24 # add more instances for load balancing
24 # add more instances for load balancing
25 # server 127.0.0.1:10003;
25 # server 127.0.0.1:10003;
26 # server 127.0.0.1:10004;
26 # server 127.0.0.1:10004;
27 }
27 }
28
28
29 ## HTTP to HTTPS rewrite
29 ## HTTP to HTTPS rewrite
30 server {
30 server {
31 listen 80;
31 listen 80;
32 server_name rhodecode.myserver.com;
32 server_name rhodecode.myserver.com;
33
33
34 if ($http_host = rhodecode.myserver.com) {
34 if ($http_host = rhodecode.myserver.com) {
35 rewrite (.*) https://rhodecode.myserver.com$1 permanent;
35 rewrite (.*) https://rhodecode.myserver.com$1 permanent;
36 }
36 }
37 }
37 }
38
38
39 ## Optional gist alias server, for serving nicer GIST urls.
39 ## Optional gist alias server, for serving nicer GIST urls.
40 server {
40 server {
41 listen 443;
41 listen 443;
42 server_name gist.myserver.com;
42 server_name gist.myserver.com;
43 access_log /var/log/nginx/gist.access.log log_custom;
43 access_log /var/log/nginx/gist.access.log log_custom;
44 error_log /var/log/nginx/gist.error.log;
44 error_log /var/log/nginx/gist.error.log;
45
45
46 ssl on;
46 ssl on;
47 ssl_certificate gist.rhodecode.myserver.com.crt;
47 ssl_certificate gist.rhodecode.myserver.com.crt;
48 ssl_certificate_key gist.rhodecode.myserver.com.key;
48 ssl_certificate_key gist.rhodecode.myserver.com.key;
49
49
50 ssl_session_timeout 5m;
50 ssl_session_timeout 5m;
51
51
52 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
52 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
53 ssl_prefer_server_ciphers on;
53 ssl_prefer_server_ciphers on;
54 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
54 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
55
55
56 # strict http prevents from https -> http downgrade
56 # strict http prevents from https -> http downgrade
57 add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
57 add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
58
58
59 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
59 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
60 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
60 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
61
61
62 rewrite ^/(.+)$ https://rhodecode.myserver.com/_admin/gists/$1;
62 rewrite ^/(.+)$ https://rhodecode.myserver.com/_admin/gists/$1;
63 rewrite (.*) https://rhodecode.myserver.com/_admin/gists;
63 rewrite (.*) https://rhodecode.myserver.com/_admin/gists;
64 }
64 }
65
65
66
66
67 ## MAIN SSL enabled server
67 ## MAIN SSL enabled server
68 server {
68 server {
69 listen 443 ssl;
69 listen 443 ssl;
70 server_name rhodecode.myserver.com;
70 server_name rhodecode.myserver.com;
71
71
72 access_log /var/log/nginx/rhodecode.access.log log_custom;
72 access_log /var/log/nginx/rhodecode.access.log log_custom;
73 error_log /var/log/nginx/rhodecode.error.log;
73 error_log /var/log/nginx/rhodecode.error.log;
74
74
75 ssl on;
75 ssl on;
76 ssl_certificate rhodecode.myserver.com.crt;
76 ssl_certificate rhodecode.myserver.com.crt;
77 ssl_certificate_key rhodecode.myserver.com.key;
77 ssl_certificate_key rhodecode.myserver.com.key;
78
78
79 ssl_session_timeout 5m;
79 ssl_session_timeout 5m;
80
80
81 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
81 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
82 ssl_prefer_server_ciphers on;
82 ssl_prefer_server_ciphers on;
83 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
83 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
84
84
85 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
85 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
86 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
86 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
87
87
88 include /etc/nginx/proxy.conf;
88 include /etc/nginx/proxy.conf;
89
89
90 ## serve static files by Nginx, recommended for performance
90 ## serve static files by Nginx, recommended for performance
91 # location /_static/rhodecode {
91 # location /_static/rhodecode {
92 # gzip on;
93 # gzip_min_length 500;
94 # gzip_proxied any;
95 # gzip_comp_level 4;
96 # gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/json application/xml application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
97 # gzip_vary on;
98 # gzip_disable "msie6";
92 # alias /path/to/.rccontrol/enterprise-1/static;
99 # alias /path/to/.rccontrol/enterprise-1/static;
93 # }
100 # }
94
101
95 ## channelstream websocket handling
102 ## channelstream websocket handling
96 location /_channelstream {
103 location /_channelstream {
97 rewrite /_channelstream/(.*) /$1 break;
104 rewrite /_channelstream/(.*) /$1 break;
98
105
99 proxy_pass http://127.0.0.1:9800;
106 proxy_pass http://127.0.0.1:9800;
100
107
101 proxy_connect_timeout 10;
108 proxy_connect_timeout 10;
102 proxy_send_timeout 10m;
109 proxy_send_timeout 10m;
103 proxy_read_timeout 10m;
110 proxy_read_timeout 10m;
104 tcp_nodelay off;
111 tcp_nodelay off;
105 proxy_set_header Host $host;
112 proxy_set_header Host $host;
106 proxy_set_header X-Real-IP $remote_addr;
113 proxy_set_header X-Real-IP $remote_addr;
107 proxy_set_header X-Url-Scheme $scheme;
114 proxy_set_header X-Url-Scheme $scheme;
108 proxy_set_header X-Forwarded-Proto $scheme;
115 proxy_set_header X-Forwarded-Proto $scheme;
109 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
116 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
110 gzip off;
117 gzip off;
111 proxy_http_version 1.1;
118 proxy_http_version 1.1;
112 proxy_set_header Upgrade $http_upgrade;
119 proxy_set_header Upgrade $http_upgrade;
113 proxy_set_header Connection "upgrade";
120 proxy_set_header Connection "upgrade";
114 }
121 }
115
122
116 location /_admin/login {
123 location /_admin/login {
117 ## rate limit this endpoint
124 ## rate limit this endpoint
118 limit_req zone=dl_limit burst=10 nodelay;
125 limit_req zone=dl_limit burst=10 nodelay;
119 try_files $uri @rhode;
126 try_files $uri @rhode;
120 }
127 }
121
128
122 location / {
129 location / {
123 try_files $uri @rhode;
130 try_files $uri @rhode;
124 }
131 }
125
132
126 location @rhode {
133 location @rhode {
127 proxy_pass http://rc;
134 proxy_pass http://rc;
128 }
135 }
129
136
130 ## custom 502 error page
137 ## custom 502 error page. Will be displayed while RhodeCode server
138 ## is turned off
131 error_page 502 /502.html;
139 error_page 502 /502.html;
132 location = /502.html {
140 location = /502.html {
133 root /path/to/.rccontrol/enterprise-1/static;
141 root /path/to/.rccontrol/enterprise-1/static;
134 }
142 }
135 } No newline at end of file
143 }
@@ -1,30 +1,31 b''
1 .. _rhodecode-admin-ref:
1 .. _rhodecode-admin-ref:
2
2
3 System Administration
3 System Administration
4 =====================
4 =====================
5
5
6 The following are the most common system administration tasks.
6 The following are the most common system administration tasks.
7
7
8 .. only:: latex
8 .. only:: latex
9
9
10 * :ref:`vcs-server`
10 * :ref:`vcs-server`
11 * :ref:`apache-ws-ref`
11 * :ref:`apache-ws-ref`
12 * :ref:`nginx-ws-ref`
12 * :ref:`nginx-ws-ref`
13 * :ref:`rhodecode-tuning-ref`
13 * :ref:`rhodecode-tuning-ref`
14 * :ref:`indexing-ref`
14 * :ref:`indexing-ref`
15 * :ref:`rhodecode-reset-ref`
15 * :ref:`rhodecode-reset-ref`
16
16
17 .. toctree::
17 .. toctree::
18
18
19 config-files-overview
19 config-files-overview
20 vcs-server
20 vcs-server
21 svn-http
21 svn-http
22 gunicorn-ssl-support
22 apache-config
23 apache-config
23 nginx-config
24 nginx-config
24 backup-restore
25 backup-restore
25 tuning-rhodecode
26 tuning-rhodecode
26 indexing
27 indexing
27 reset-information
28 reset-information
28 enable-debug
29 enable-debug
29 admin-tricks
30 admin-tricks
30 cleanup-cmds
31 cleanup-cmds
@@ -1,111 +1,124 b''
1 .. _increase-gunicorn:
1 .. _increase-gunicorn:
2
2
3 Increase Gunicorn Workers
3 Increase Gunicorn Workers
4 -------------------------
4 -------------------------
5
5
6 .. important::
6
7 |RCE| comes with `Gunicorn`_ packaged in its Nix environment.
8 Gunicorn is a Python WSGI HTTP Server for UNIX.
7
9
8 If you increase the number of :term:`Gunicorn` workers, you also need to
10 To improve |RCE| performance you can increase the number of `Gunicorn`_ workers.
9 increase the threadpool size of the VCS Server. The recommended size is
11 This allows to handle more connections concurently, and provide better
10 6 times the number of Gunicorn workers. To set this, see
12 responsiveness and performance.
11 :ref:`vcs-server-config-file`.
12
13
13 |RCE| comes with `Gunicorn`_ packaged in its Nix environment. To improve
14 By default during installation |RCC| tries to detect how many CPUs are
14 performance you can increase the number of workers. To do this, use the
15 available in the system, and set the number workers based on that information.
15 following steps:
16 However sometimes it's better to manually set the number of workers.
17
18 To do this, use the following steps:
16
19
17 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
20 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
18 2. In the ``[server:main]`` section, increase the number of Gunicorn
21 2. In the ``[server:main]`` section, increase the number of Gunicorn
19 ``workers`` using the following formula :math:`(2 * Cores) + 1`.
22 ``workers`` using the following formula :math:`(2 * Cores) + 1`.
20
23
21 .. code-block:: ini
24 .. code-block:: ini
22
25
23 [server:main]
24 host = 127.0.0.1
25 port = 10002
26 use = egg:gunicorn#main
26 use = egg:gunicorn#main
27 workers = 1
27 ## Sets the number of process workers. You must set `instance_id = *`
28 threads = 1
28 ## when this option is set to more than one worker, recommended
29 proc_name = RhodeCodeEnterprise
29 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
30 ## The `instance_id = *` must be set in the [app:main] section below
31 workers = 4
32 ## process name
33 proc_name = rhodecode
34 ## type of worker class, one of sync, gevent
35 ## recommended for bigger setup is using of of other than sync one
30 worker_class = sync
36 worker_class = sync
37 ## The maximum number of simultaneous clients. Valid only for Gevent
38 #worker_connections = 10
39 ## max number of requests that worker will handle before being gracefully
40 ## restarted, could prevent memory leaks
31 max_requests = 1000
41 max_requests = 1000
32 timeout = 3600
42 max_requests_jitter = 30
43 ## amount of time a worker can spend with handling a request before it
44 ## gets killed and restarted. Set to 6hrs
45 timeout = 21600
33
46
34 3. In the ``[app:main]`` section, set the ``instance_id`` property to ``*``.
47 3. In the ``[app:main]`` section, set the ``instance_id`` property to ``*``.
35
48
36 .. code-block:: ini
49 .. code-block:: ini
37
50
38 # In the [app:main] section
51 # In the [app:main] section
39 [app:main]
52 [app:main]
40 # You must set `instance_id = *`
53 # You must set `instance_id = *`
41 instance_id = *
54 instance_id = *
42
55
43 4. Save your changes.
56 4. Change the VCSServer workers too. Open the
44 5. Restart your |RCE| instance, using the following command:
57 :file:`home/{user}/.rccontrol/{instance-id}/vcsserver.ini` file.
58
59 5. In the ``[server:main]`` section, increase the number of Gunicorn
60 ``workers`` using the following formula :math:`(2 * Cores) + 1`.
61
62 .. code-block:: ini
63
64 ## run with gunicorn --log-config vcsserver.ini --paste vcsserver.ini
65 use = egg:gunicorn#main
66 ## Sets the number of process workers. Recommended
67 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
68 workers = 4
69 ## process name
70 proc_name = rhodecode_vcsserver
71 ## type of worker class, currently `sync` is the only option allowed.
72 worker_class = sync
73 ## The maximum number of simultaneous clients. Valid only for Gevent
74 #worker_connections = 10
75 ## max number of requests that worker will handle before being gracefully
76 ## restarted, could prevent memory leaks
77 max_requests = 1000
78 max_requests_jitter = 30
79 ## amount of time a worker can spend with handling a request before it
80 ## gets killed and restarted. Set to 6hrs
81 timeout = 21600
82
83 6. Save your changes.
84 7. Restart your |RCE| instances, using the following command:
45
85
46 .. code-block:: bash
86 .. code-block:: bash
47
87
48 $ rccontrol restart enterprise-1
88 $ rccontrol restart '*'
89
90
91 Gunicorn Gevent Backend
92 -----------------------
49
93
50 If you scale across different machines, each |RCM| instance
94 Gevent is an asynchronous worker type for Gunicorn. It allows accepting multiple
51 needs to store its data on a shared disk, preferably together with your
95 connections on a single `Gunicorn`_ worker. This means you can handle 100s
52 |repos|. This data directory contains template caches, a whoosh index,
96 of concurrent clones, or API calls using just few workers. A setting called
53 and is used for task locking to ensure safety across multiple instances.
97 `worker_connections` defines on how many connections each worker can
54 To do this, set the following properties in the :file:`rhodecode.ini` file to
98 handle using `Gevent`.
55 set the shared location across all |RCM| instances.
99
100
101 To enable `Gevent` on |RCE| do the following:
102
103
104 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
105 2. In the ``[server:main]`` section, change `worker_class` for Gunicorn.
106
56
107
57 .. code-block:: ini
108 .. code-block:: ini
58
109
59 cache_dir = /file/path # set to shared location
110 ## type of worker class, one of sync, gevent
60 search.location = /file/path # set to shared location
111 ## recommended for bigger setup is using of of other than sync one
112 worker_class = gevent
113 ## The maximum number of simultaneous clients. Valid only for Gevent
114 worker_connections = 30
61
115
62 ####################################
116
63 ### BEAKER CACHE ####
117 .. note::
64 ####################################
118
65 beaker.cache.data_dir = /file/path # set to shared location
119 `Gevent` is currently only supported for Enterprise/Community instances.
66 beaker.cache.lock_dir = /file/path # set to shared location
120 VCSServer doesn't yet support gevent.
67
121
68
122
69
123
70 Gunicorn SSL support
71 --------------------
72
73
74 :term:`Gunicorn` wsgi server allows users to use HTTPS connection directly
75 without a need to use HTTP server like Nginx or Apache. To Configure
76 SSL support directly with :term:`Gunicorn` you need to simply add the key
77 and certificate paths to your configuration file.
78
79 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
80 2. In the ``[server:main]`` section, add two new variables
81 called `certfile` and `keyfile`.
82
83 .. code-block:: ini
84
85 [server:main]
86 host = 127.0.0.1
87 port = 10002
88 use = egg:gunicorn#main
89 workers = 1
90 threads = 1
91 proc_name = RhodeCodeEnterprise
92 worker_class = sync
93 max_requests = 1000
94 timeout = 3600
95 # adding ssl support
96 certfile = /home/ssl/my_server_com.pem
97 keyfile = /home/ssl/my_server_com.key
98
99 4. Save your changes.
100 5. Restart your |RCE| instance, using the following command:
101
102 .. code-block:: bash
103
104 $ rccontrol restart enterprise-1
105
106 After this is enabled you can *only* access your instances via https://
107 protocol. Check out more docs here `Gunicorn SSL Docs`_
108
109
110 .. _Gunicorn: http://gunicorn.org/
124 .. _Gunicorn: http://gunicorn.org/
111 .. _Gunicorn SSL Docs: http://docs.gunicorn.org/en/stable/settings.html#ssl
@@ -1,42 +1,51 b''
1 .. _data-mem:
1 .. _data-mem:
2
2
3 Mount Cache Folders To Memory
3 Mount Cache Folders To Memory
4 -----------------------------
4 -----------------------------
5
5
6 To increase the performance of folders containing cache data, you can mount
6 To increase the performance of folders containing cache data, you can mount
7 them to memory. The following folders specified in the :file:`rhodecode.ini`
7 them to memory. The following folders specified in the :file:`rhodecode.ini`
8 file would benefit from this.
8 file would benefit from this.
9
9
10 .. code-block:: ini
10 .. code-block:: ini
11
11
12 cache_dir = %(here)s/data
12 cache_dir = %(here)s/data
13 search.location = %(here)s/data/index
13 search.location = %(here)s/data/index
14
14
15 Use the following Ubuntu example to mount these to memory, or see your
15 Use the following Ubuntu example to mount these to memory, or see your
16 particular |os| instructions. The expected performance benefit is
16 particular |os| instructions. The expected performance benefit is
17 approximately 5%. You should ensure you allocate an adequate amount of memory
17 approximately 5%. You should ensure you allocate an adequate amount of memory
18 depending on your available resources.
18 depending on your available resources.
19
19
20 .. code-block:: bash
20 .. code-block:: bash
21
21
22 # mount to memory with 2GB limit and 755 write permissions
22 # mount to memory with 2GB limit and 755 write permissions
23 mount -t tmpfs -o size=2G,mode=0755 tmpfs /home/user/.rccontrol/enterprise-1/data
23 mount -t tmpfs -o size=2G,mode=0755 tmpfs /home/user/.rccontrol/enterprise-1/data
24 mount -t tmpfs -o size=2G,mode=0755 tmpfs /home/user/.rccontrol/enterprise-1/data/index
24 mount -t tmpfs -o size=2G,mode=0755 tmpfs /home/user/.rccontrol/enterprise-1/data/index
25
25
26 .. _move-tmp:
26 .. _move-tmp:
27
27
28
29 In order to make this change permanent it's recommend to set it as /etc/fstab
30 entry.
31
32 .. code-block:: bash
33
34 tmpfs /home/user/.rccontrol/enterprise-1/data tmpfs nodev,nosuid,noexec,nodiratime,size=2G 0 0
35
36
28 Move ``tmp`` to TMPFS
37 Move ``tmp`` to TMPFS
29 ---------------------
38 ---------------------
30
39
31 |RCE| components heavily use the :file:`/tmp` folder, so moving your
40 |RCE| components heavily use the :file:`/tmp` folder, so moving your
32 :file:`/tmp` folder into to a RAM-based TMPS can lead to a noticeable
41 :file:`/tmp` folder into to a RAM-based TMPS can lead to a noticeable
33 performance boost.
42 performance boost.
34
43
35 .. code-block:: bash
44 .. code-block:: bash
36
45
37 # mount tmp to memory with 2GB limit and 1777 write permissions
46 # mount tmp to memory with 2GB limit and 1777 write permissions
38 mount -t tmpfs -o size=2G,mode=1777 tmpfs /tmp
47 mount -t tmpfs -o size=2G,mode=1777 tmpfs /tmp
39
48
40 For more information about TMPFS, see the documentation `here`_.
49 For more information about TMPFS, see the documentation `here`_.
41
50
42 .. _here: https://wiki.archlinux.org/index.php/Tmpfs
51 .. _here: https://wiki.archlinux.org/index.php/Tmpfs
@@ -1,51 +1,58 b''
1 .. _scale-horizontal:
1 .. _scale-horizontal:
2
2
3 Scale Horizontally
3 Scale Horizontally
4 ------------------
4 ------------------
5
5
6 |RCE| is built in a way it support horizontal scaling across multiple machines.
7 There are two main pre-requisites for that:
8
9 - Shared storage that each machine can access.
10 - Shared DB connection across machines.
11
12
6 Horizontal scaling means adding more machines or workers into your pool of
13 Horizontal scaling means adding more machines or workers into your pool of
7 resources. Horizontally scaling |RCE| gives a huge performance increase,
14 resources. Horizontally scaling |RCE| gives a huge performance increase,
8 especially under large traffic scenarios with a high number of requests. This
15 especially under large traffic scenarios with a high number of requests. This
9 is very beneficial when |RCE| is serving many users simultaneously,
16 is very beneficial when |RCE| is serving many users simultaneously,
10 or if continuous integration servers are automatically pulling and pushing code.
17 or if continuous integration servers are automatically pulling and pushing code.
11
18
12 To horizontally scale |RCE| you should use the following steps:
19
20 If you scale across different machines, each |RCM| instance
21 needs to store its data on a shared disk, preferably together with your
22 |repos|. This data directory contains template caches, a full text search index,
23 and is used for task locking to ensure safety across multiple instances.
24 To do this, set the following properties in the :file:`rhodecode.ini` file to
25 set the shared location across all |RCM| instances.
26
27 .. code-block:: ini
28
29 cache_dir = /shared/path/caches # set to shared location
30 search.location = /shared/path/search_index # set to shared location
13
31
14 1. In the :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file,
32 ####################################
15 set ``instance_id = *``. This enables |RCE| to use multiple nodes.
33 ### BEAKER CACHE ####
16 2. Define the number of worker threads using the formula
34 ####################################
17 :math:`(2 * Cores) + 1`. For example 4 CPU cores would lead to
35 beaker.cache.data_dir = /shared/path/data # set to shared location
18 :math:`(2 * 4) + 1 = 9` workers. In some cases it's ok to increase number of
36 beaker.cache.lock_dir = /shared/path/lock # set to shared location
19 workers even beyond this formula. Generally the more workers, the more
37
20 simultaneous connections the system can handle.
38
39 .. note::
40
41 If you use custom caches such as `beaker.cache.auth_plugins.` it's recommended
42 to set it to the memcached/redis or database backend so it can be shared
43 across machines.
44
21
45
22 It is recommended to create another dedicated |RCE| instance to handle
46 It is recommended to create another dedicated |RCE| instance to handle
23 traffic from build farms or continuous integration servers.
47 traffic from build farms or continuous integration servers.
24
48
25 .. note::
49 .. note::
26
50
27 You should configure your load balancing accordingly. We recommend writing
51 You should configure your load balancing accordingly. We recommend writing
28 load balancing rules that will separate regular user traffic from
52 load balancing rules that will separate regular user traffic from
29 automated process traffic like continuous servers or build bots.
53 automated process traffic like continuous servers or build bots.
30
54
31 If you scale across different machines, each |RCE| instance needs to store
32 its data on a shared disk, preferably together with your repositories. This
33 data directory contains template caches, a whoosh index,
34 and is used for task locking to ensure safety across multiple instances. To
35 do this, set the following properties in the
36 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file to set
37 the shared location across all |RCE| instances.
38
39 .. code-block:: ini
40
41 cache_dir = /file/path # set to shared directory location
42 search.location = /file/path # set to shared directory location
43 beaker.cache.data_dir = /file/path # set to shared directory location
44 beaker.cache.lock_dir = /file/path # set to shared directory location
45
46 .. note::
55 .. note::
47
56
48 If Celery is used on each instance then you should run separate Celery
57 If Celery is used on each instance then you should run separate Celery
49 instances, but the message broker should be the same for all of them.
58 instances, but the message broker should be the same for all of them.
50 This excludes one RabbitMQ shared server.
51
@@ -1,207 +1,207 b''
1 .. _api:
1 .. _api:
2
2
3 API Documentation
3 API Documentation
4 =================
4 =================
5
5
6 The |RCE| API uses a single scheme for calling all API methods. The API is
6 The |RCE| API uses a single scheme for calling all API methods. The API is
7 implemented with JSON protocol in both directions. To send API requests to
7 implemented with JSON protocol in both directions. To send API requests to
8 your instance of |RCE|, use the following URL format
8 your instance of |RCE|, use the following URL format
9 ``<your_server>/_admin``
9 ``<your_server>/_admin``
10
10
11 .. note::
11 .. note::
12
12
13 To use the API, you should configure the :file:`~/.rhoderc` file with
13 To use the API, you should configure the :file:`~/.rhoderc` file with
14 access details per instance. For more information, see
14 access details per instance. For more information, see
15 :ref:`config-rhoderc`.
15 :ref:`config-rhoderc`.
16
16
17
17
18 API ACCESS FOR WEB VIEWS
18 API ACCESS FOR WEB VIEWS
19 ------------------------
19 ------------------------
20
20
21 API access can also be turned on for each web view in |RCE| that is
21 API access can also be turned on for each web view in |RCE| that is
22 decorated with a `@LoginRequired` decorator. To enable API access, change
22 decorated with a `@LoginRequired` decorator. To enable API access, change
23 the standard login decorator to `@LoginRequired(api_access=True)`.
23 the standard login decorator to `@LoginRequired(api_access=True)`.
24
24
25 From |RCM| version 1.7.0 you can configure a white list
25 From |RCM| version 1.7.0 you can configure a white list
26 of views that have API access enabled by default. To enable these,
26 of views that have API access enabled by default. To enable these,
27 edit the |RCM| configuration ``.ini`` file. The default location is:
27 edit the |RCM| configuration ``.ini`` file. The default location is:
28
28
29 * |RCM| Pre-2.2.7 :file:`root/rhodecode/data/production.ini`
29 * |RCM| Pre-2.2.7 :file:`root/rhodecode/data/production.ini`
30 * |RCM| 3.0 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
30 * |RCM| 3.0 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
31
31
32 To configure the white list, edit this section of the file. In this
32 To configure the white list, edit this section of the file. In this
33 configuration example, API access is granted to the patch/diff raw file and
33 configuration example, API access is granted to the patch/diff raw file and
34 archive.
34 archive.
35
35
36 .. code-block:: ini
36 .. code-block:: ini
37
37
38 ## List of controllers (using glob syntax) that AUTH TOKENS could be used for access.
38 ## List of controllers (using glob syntax) that AUTH TOKENS could be used for access.
39 ## Adding ?auth_token = <token> to the url authenticates this request as if it
39 ## Adding ?auth_token = <token> to the url authenticates this request as if it
40 ## came from the the logged in user who own this authentication token.
40 ## came from the the logged in user who own this authentication token.
41 ##
41 ##
42 ## Syntax is <ControllerClass>:<function_pattern>.
42 ## Syntax is <ControllerClass>:<function_pattern>.
43 ## The list should be "," separated and on a single line.
43 ## The list should be "," separated and on a single line.
44 ##
44 ##
45 api_access_controllers_whitelist = ChangesetController:changeset_patch,ChangesetController:changeset_raw,ilesController:raw,FilesController:archivefile,
45 api_access_controllers_whitelist = RepoCommitsView:repo_commit_raw,RepoCommitsView:repo_commit_patch,RepoCommitsView:repo_commit_download
46
46
47 After this change, a |RCE| view can be accessed without login by adding a
47 After this change, a |RCE| view can be accessed without login by adding a
48 GET parameter ``?auth_token=<auth_token>`` to a url. For example to
48 GET parameter ``?auth_token=<auth_token>`` to a url. For example to
49 access the raw diff.
49 access the raw diff.
50
50
51 .. code-block:: html
51 .. code-block:: html
52
52
53 http://<server>/<repo>/changeset-diff/<sha>?auth_token=<auth_token>
53 http://<server>/<repo>/changeset-diff/<sha>?auth_token=<auth_token>
54
54
55 By default this is only enabled on RSS/ATOM feed views. Exposing raw diffs is a
55 By default this is only enabled on RSS/ATOM feed views. Exposing raw diffs is a
56 good way to integrate with 3rd party services like code review, or build farms
56 good way to integrate with 3rd party services like code review, or build farms
57 that could download archives.
57 that could download archives.
58
58
59 API ACCESS
59 API ACCESS
60 ----------
60 ----------
61
61
62 All clients are required to send JSON-RPC spec JSON data.
62 All clients are required to send JSON-RPC spec JSON data.
63
63
64 .. code-block:: bash
64 .. code-block:: bash
65
65
66 {
66 {
67 "id:"<id>",
67 "id:"<id>",
68 "auth_token":"<auth_token>",
68 "auth_token":"<auth_token>",
69 "method":"<method_name>",
69 "method":"<method_name>",
70 "args":{"<arg_key>":"<arg_val>"}
70 "args":{"<arg_key>":"<arg_val>"}
71 }
71 }
72
72
73 Example call for auto pulling from remote repositories using curl:
73 Example call for auto pulling from remote repositories using curl:
74
74
75 .. code-block:: bash
75 .. code-block:: bash
76
76
77 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,
77 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,
78 "auth_token":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull", "args":{"repoid":"CPython"}}'
78 "auth_token":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull", "args":{"repoid":"CPython"}}'
79
79
80 Provide those parameters:
80 Provide those parameters:
81 - **id** A value of any type, which is used to match the response with the
81 - **id** A value of any type, which is used to match the response with the
82 request that it is replying to.
82 request that it is replying to.
83 - **auth_token** for access and permission validation.
83 - **auth_token** for access and permission validation.
84 - **method** is name of method to call
84 - **method** is name of method to call
85 - **args** is an ``key:value`` list of arguments to pass to method
85 - **args** is an ``key:value`` list of arguments to pass to method
86
86
87 .. note::
87 .. note::
88
88
89 To get your |authtoken|, from the |RCE| interface,
89 To get your |authtoken|, from the |RCE| interface,
90 go to:
90 go to:
91 :menuselection:`username --> My account --> Auth tokens`
91 :menuselection:`username --> My account --> Auth tokens`
92
92
93 For security reasons you should always create a dedicated |authtoken| for
93 For security reasons you should always create a dedicated |authtoken| for
94 API use only.
94 API use only.
95
95
96
96
97 The |RCE| API will always return a JSON-RPC response:
97 The |RCE| API will always return a JSON-RPC response:
98
98
99 .. code-block:: bash
99 .. code-block:: bash
100
100
101 {
101 {
102 "id": <id>, # matching id sent by request
102 "id": <id>, # matching id sent by request
103 "result": "<result>"|null, # JSON formatted result, null if any errors
103 "result": "<result>"|null, # JSON formatted result, null if any errors
104 "error": "null"|<error_message> # JSON formatted error (if any)
104 "error": "null"|<error_message> # JSON formatted error (if any)
105 }
105 }
106
106
107 All responses from API will be with `HTTP/1.0 200 OK` status code.
107 All responses from API will be with `HTTP/1.0 200 OK` status code.
108 If there is an error when calling the API, the *error* key will contain a
108 If there is an error when calling the API, the *error* key will contain a
109 failure description and the *result* will be `null`.
109 failure description and the *result* will be `null`.
110
110
111 API CLIENT
111 API CLIENT
112 ----------
112 ----------
113
113
114 To install the |RCE| API, see :ref:`install-tools`. To configure the API per
114 To install the |RCE| API, see :ref:`install-tools`. To configure the API per
115 instance, see the :ref:`rc-tools` section as you need to configure a
115 instance, see the :ref:`rc-tools` section as you need to configure a
116 :file:`~/.rhoderc` file with your |authtokens|.
116 :file:`~/.rhoderc` file with your |authtokens|.
117
117
118 Once you have set up your instance API access, use the following examples to
118 Once you have set up your instance API access, use the following examples to
119 get started.
119 get started.
120
120
121 .. code-block:: bash
121 .. code-block:: bash
122
122
123 # Getting the 'rhodecode' repository
123 # Getting the 'rhodecode' repository
124 # from a RhodeCode Enterprise instance
124 # from a RhodeCode Enterprise instance
125 rhodecode-api --instance-name=enterprise-1 get_repo repoid:rhodecode
125 rhodecode-api --instance-name=enterprise-1 get_repo repoid:rhodecode
126
126
127 Calling method get_repo => http://127.0.0.1:5000
127 Calling method get_repo => http://127.0.0.1:5000
128 Server response
128 Server response
129 {
129 {
130 <json data>
130 <json data>
131 }
131 }
132
132
133 # Creating a new mercurial repository called 'brand-new'
133 # Creating a new mercurial repository called 'brand-new'
134 # with a description 'Repo-description'
134 # with a description 'Repo-description'
135 rhodecode-api --instance-name=enterprise-1 create_repo repo_name:brand-new repo_type:hg description:Repo-description
135 rhodecode-api --instance-name=enterprise-1 create_repo repo_name:brand-new repo_type:hg description:Repo-description
136 {
136 {
137 "error": null,
137 "error": null,
138 "id": 1110,
138 "id": 1110,
139 "result": {
139 "result": {
140 "msg": "Created new repository `brand-new`",
140 "msg": "Created new repository `brand-new`",
141 "success": true,
141 "success": true,
142 "task": null
142 "task": null
143 }
143 }
144 }
144 }
145
145
146 A broken example, what not to do.
146 A broken example, what not to do.
147
147
148 .. code-block:: bash
148 .. code-block:: bash
149
149
150 # A call missing the required arguments
150 # A call missing the required arguments
151 # and not specifying the instance
151 # and not specifying the instance
152 rhodecode-api get_repo
152 rhodecode-api get_repo
153
153
154 Calling method get_repo => http://127.0.0.1:5000
154 Calling method get_repo => http://127.0.0.1:5000
155 Server response
155 Server response
156 "Missing non optional `repoid` arg in JSON DATA"
156 "Missing non optional `repoid` arg in JSON DATA"
157
157
158 You can specify pure JSON using the ``--format`` parameter.
158 You can specify pure JSON using the ``--format`` parameter.
159
159
160 .. code-block:: bash
160 .. code-block:: bash
161
161
162 rhodecode-api --format=json get_repo repoid:rhodecode
162 rhodecode-api --format=json get_repo repoid:rhodecode
163
163
164 In such case only output that this function shows is pure JSON, we can use that
164 In such case only output that this function shows is pure JSON, we can use that
165 and pipe output to some json formatter.
165 and pipe output to some json formatter.
166
166
167 If output is in pure JSON format, you can pipe output to a JSON formatter.
167 If output is in pure JSON format, you can pipe output to a JSON formatter.
168
168
169 .. code-block:: bash
169 .. code-block:: bash
170
170
171 rhodecode-api --instance-name=enterprise-1 --format=json get_repo repoid:rhodecode | python -m json.tool
171 rhodecode-api --instance-name=enterprise-1 --format=json get_repo repoid:rhodecode | python -m json.tool
172
172
173 API METHODS
173 API METHODS
174 -----------
174 -----------
175
175
176 Each method by default required following arguments.
176 Each method by default required following arguments.
177
177
178 .. code-block:: bash
178 .. code-block:: bash
179
179
180 id : "<id_for_response>"
180 id : "<id_for_response>"
181 auth_token : "<auth_token>"
181 auth_token : "<auth_token>"
182 method : "<method name>"
182 method : "<method name>"
183 args : {}
183 args : {}
184
184
185 Use each **param** from docs and put it in args, Optional parameters
185 Use each **param** from docs and put it in args, Optional parameters
186 are not required in args.
186 are not required in args.
187
187
188 .. code-block:: bash
188 .. code-block:: bash
189
189
190 args: {"repoid": "rhodecode"}
190 args: {"repoid": "rhodecode"}
191
191
192 .. Note: From this point on things are generated by the script in
192 .. Note: From this point on things are generated by the script in
193 `scripts/fabfile.py`. To change things below, update the docstrings in the
193 `scripts/fabfile.py`. To change things below, update the docstrings in the
194 ApiController.
194 ApiController.
195
195
196 .. --- API DEFS MARKER ---
196 .. --- API DEFS MARKER ---
197 .. toctree::
197 .. toctree::
198
198
199 methods/license-methods
199 methods/license-methods
200 methods/deprecated-methods
200 methods/deprecated-methods
201 methods/gist-methods
201 methods/gist-methods
202 methods/pull-request-methods
202 methods/pull-request-methods
203 methods/repo-methods
203 methods/repo-methods
204 methods/repo-group-methods
204 methods/repo-group-methods
205 methods/server-methods
205 methods/server-methods
206 methods/user-methods
206 methods/user-methods
207 methods/user-group-methods
207 methods/user-group-methods
@@ -1,1044 +1,1047 b''
1 .. _repo-methods-ref:
1 .. _repo-methods-ref:
2
2
3 repo methods
3 repo methods
4 ============
4 ============
5
5
6 add_field_to_repo
6 add_field_to_repo
7 -----------------
7 -----------------
8
8
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
10
10
11 Adds an extra field to a repository.
11 Adds an extra field to a repository.
12
12
13 This command can only be run using an |authtoken| with at least
13 This command can only be run using an |authtoken| with at least
14 write permissions to the |repo|.
14 write permissions to the |repo|.
15
15
16 :param apiuser: This is filled automatically from the |authtoken|.
16 :param apiuser: This is filled automatically from the |authtoken|.
17 :type apiuser: AuthUser
17 :type apiuser: AuthUser
18 :param repoid: Set the repository name or repository id.
18 :param repoid: Set the repository name or repository id.
19 :type repoid: str or int
19 :type repoid: str or int
20 :param key: Create a unique field key for this repository.
20 :param key: Create a unique field key for this repository.
21 :type key: str
21 :type key: str
22 :param label:
22 :param label:
23 :type label: Optional(str)
23 :type label: Optional(str)
24 :param description:
24 :param description:
25 :type description: Optional(str)
25 :type description: Optional(str)
26
26
27
27
28 comment_commit
28 comment_commit
29 --------------
29 --------------
30
30
31 .. py:function:: comment_commit(apiuser, repoid, commit_id, message, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
31 .. py:function:: comment_commit(apiuser, repoid, commit_id, message, status=<Optional:None>, comment_type=<Optional:u'note'>, resolves_comment_id=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
32
32
33 Set a commit comment, and optionally change the status of the commit.
33 Set a commit comment, and optionally change the status of the commit.
34
34
35 :param apiuser: This is filled automatically from the |authtoken|.
35 :param apiuser: This is filled automatically from the |authtoken|.
36 :type apiuser: AuthUser
36 :type apiuser: AuthUser
37 :param repoid: Set the repository name or repository ID.
37 :param repoid: Set the repository name or repository ID.
38 :type repoid: str or int
38 :type repoid: str or int
39 :param commit_id: Specify the commit_id for which to set a comment.
39 :param commit_id: Specify the commit_id for which to set a comment.
40 :type commit_id: str
40 :type commit_id: str
41 :param message: The comment text.
41 :param message: The comment text.
42 :type message: str
42 :type message: str
43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
44 'approved', 'rejected', 'under_review'
44 'approved', 'rejected', 'under_review'
45 :type status: str
45 :type status: str
46 :param comment_type: Comment type, one of: 'note', 'todo'
46 :param comment_type: Comment type, one of: 'note', 'todo'
47 :type comment_type: Optional(str), default: 'note'
47 :type comment_type: Optional(str), default: 'note'
48 :param userid: Set the user name of the comment creator.
48 :param userid: Set the user name of the comment creator.
49 :type userid: Optional(str or int)
49 :type userid: Optional(str or int)
50
50
51 Example error output:
51 Example error output:
52
52
53 .. code-block:: bash
53 .. code-block:: bash
54
54
55 {
55 {
56 "id" : <id_given_in_input>,
56 "id" : <id_given_in_input>,
57 "result" : {
57 "result" : {
58 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
58 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
59 "status_change": null or <status>,
59 "status_change": null or <status>,
60 "success": true
60 "success": true
61 },
61 },
62 "error" : null
62 "error" : null
63 }
63 }
64
64
65
65
66 create_repo
66 create_repo
67 -----------
67 -----------
68
68
69 .. py:function:: create_repo(apiuser, repo_name, repo_type, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, copy_permissions=<Optional:False>)
69 .. py:function:: create_repo(apiuser, repo_name, repo_type, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, copy_permissions=<Optional:False>)
70
70
71 Creates a repository.
71 Creates a repository.
72
72
73 * If the repository name contains "/", repository will be created inside
73 * If the repository name contains "/", repository will be created inside
74 a repository group or nested repository groups
74 a repository group or nested repository groups
75
75
76 For example "foo/bar/repo1" will create |repo| called "repo1" inside
76 For example "foo/bar/repo1" will create |repo| called "repo1" inside
77 group "foo/bar". You have to have permissions to access and write to
77 group "foo/bar". You have to have permissions to access and write to
78 the last repository group ("bar" in this example)
78 the last repository group ("bar" in this example)
79
79
80 This command can only be run using an |authtoken| with at least
80 This command can only be run using an |authtoken| with at least
81 permissions to create repositories, or write permissions to
81 permissions to create repositories, or write permissions to
82 parent repository groups.
82 parent repository groups.
83
83
84 :param apiuser: This is filled automatically from the |authtoken|.
84 :param apiuser: This is filled automatically from the |authtoken|.
85 :type apiuser: AuthUser
85 :type apiuser: AuthUser
86 :param repo_name: Set the repository name.
86 :param repo_name: Set the repository name.
87 :type repo_name: str
87 :type repo_name: str
88 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
88 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
89 :type repo_type: str
89 :type repo_type: str
90 :param owner: user_id or username
90 :param owner: user_id or username
91 :type owner: Optional(str)
91 :type owner: Optional(str)
92 :param description: Set the repository description.
92 :param description: Set the repository description.
93 :type description: Optional(str)
93 :type description: Optional(str)
94 :param private: set repository as private
94 :param private: set repository as private
95 :type private: bool
95 :type private: bool
96 :param clone_uri: set clone_uri
96 :param clone_uri: set clone_uri
97 :type clone_uri: str
97 :type clone_uri: str
98 :param landing_rev: <rev_type>:<rev>
98 :param landing_rev: <rev_type>:<rev>
99 :type landing_rev: str
99 :type landing_rev: str
100 :param enable_locking:
100 :param enable_locking:
101 :type enable_locking: bool
101 :type enable_locking: bool
102 :param enable_downloads:
102 :param enable_downloads:
103 :type enable_downloads: bool
103 :type enable_downloads: bool
104 :param enable_statistics:
104 :param enable_statistics:
105 :type enable_statistics: bool
105 :type enable_statistics: bool
106 :param copy_permissions: Copy permission from group in which the
106 :param copy_permissions: Copy permission from group in which the
107 repository is being created.
107 repository is being created.
108 :type copy_permissions: bool
108 :type copy_permissions: bool
109
109
110
110
111 Example output:
111 Example output:
112
112
113 .. code-block:: bash
113 .. code-block:: bash
114
114
115 id : <id_given_in_input>
115 id : <id_given_in_input>
116 result: {
116 result: {
117 "msg": "Created new repository `<reponame>`",
117 "msg": "Created new repository `<reponame>`",
118 "success": true,
118 "success": true,
119 "task": "<celery task id or None if done sync>"
119 "task": "<celery task id or None if done sync>"
120 }
120 }
121 error: null
121 error: null
122
122
123
123
124 Example error output:
124 Example error output:
125
125
126 .. code-block:: bash
126 .. code-block:: bash
127
127
128 id : <id_given_in_input>
128 id : <id_given_in_input>
129 result : null
129 result : null
130 error : {
130 error : {
131 'failed to create repository `<repo_name>`'
131 'failed to create repository `<repo_name>`'
132 }
132 }
133
133
134
134
135 delete_repo
135 delete_repo
136 -----------
136 -----------
137
137
138 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
138 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
139
139
140 Deletes a repository.
140 Deletes a repository.
141
141
142 * When the `forks` parameter is set it's possible to detach or delete
142 * When the `forks` parameter is set it's possible to detach or delete
143 forks of deleted repository.
143 forks of deleted repository.
144
144
145 This command can only be run using an |authtoken| with admin
145 This command can only be run using an |authtoken| with admin
146 permissions on the |repo|.
146 permissions on the |repo|.
147
147
148 :param apiuser: This is filled automatically from the |authtoken|.
148 :param apiuser: This is filled automatically from the |authtoken|.
149 :type apiuser: AuthUser
149 :type apiuser: AuthUser
150 :param repoid: Set the repository name or repository ID.
150 :param repoid: Set the repository name or repository ID.
151 :type repoid: str or int
151 :type repoid: str or int
152 :param forks: Set to `detach` or `delete` forks from the |repo|.
152 :param forks: Set to `detach` or `delete` forks from the |repo|.
153 :type forks: Optional(str)
153 :type forks: Optional(str)
154
154
155 Example error output:
155 Example error output:
156
156
157 .. code-block:: bash
157 .. code-block:: bash
158
158
159 id : <id_given_in_input>
159 id : <id_given_in_input>
160 result: {
160 result: {
161 "msg": "Deleted repository `<reponame>`",
161 "msg": "Deleted repository `<reponame>`",
162 "success": true
162 "success": true
163 }
163 }
164 error: null
164 error: null
165
165
166
166
167 fork_repo
167 fork_repo
168 ---------
168 ---------
169
169
170 .. py:function:: fork_repo(apiuser, repoid, fork_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, copy_permissions=<Optional:False>)
170 .. py:function:: fork_repo(apiuser, repoid, fork_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, copy_permissions=<Optional:False>)
171
171
172 Creates a fork of the specified |repo|.
172 Creates a fork of the specified |repo|.
173
173
174 * If the fork_name contains "/", fork will be created inside
174 * If the fork_name contains "/", fork will be created inside
175 a repository group or nested repository groups
175 a repository group or nested repository groups
176
176
177 For example "foo/bar/fork-repo" will create fork called "fork-repo"
177 For example "foo/bar/fork-repo" will create fork called "fork-repo"
178 inside group "foo/bar". You have to have permissions to access and
178 inside group "foo/bar". You have to have permissions to access and
179 write to the last repository group ("bar" in this example)
179 write to the last repository group ("bar" in this example)
180
180
181 This command can only be run using an |authtoken| with minimum
181 This command can only be run using an |authtoken| with minimum
182 read permissions of the forked repo, create fork permissions for an user.
182 read permissions of the forked repo, create fork permissions for an user.
183
183
184 :param apiuser: This is filled automatically from the |authtoken|.
184 :param apiuser: This is filled automatically from the |authtoken|.
185 :type apiuser: AuthUser
185 :type apiuser: AuthUser
186 :param repoid: Set repository name or repository ID.
186 :param repoid: Set repository name or repository ID.
187 :type repoid: str or int
187 :type repoid: str or int
188 :param fork_name: Set the fork name, including it's repository group membership.
188 :param fork_name: Set the fork name, including it's repository group membership.
189 :type fork_name: str
189 :type fork_name: str
190 :param owner: Set the fork owner.
190 :param owner: Set the fork owner.
191 :type owner: str
191 :type owner: str
192 :param description: Set the fork description.
192 :param description: Set the fork description.
193 :type description: str
193 :type description: str
194 :param copy_permissions: Copy permissions from parent |repo|. The
194 :param copy_permissions: Copy permissions from parent |repo|. The
195 default is False.
195 default is False.
196 :type copy_permissions: bool
196 :type copy_permissions: bool
197 :param private: Make the fork private. The default is False.
197 :param private: Make the fork private. The default is False.
198 :type private: bool
198 :type private: bool
199 :param landing_rev: Set the landing revision. The default is tip.
199 :param landing_rev: Set the landing revision. The default is tip.
200
200
201 Example output:
201 Example output:
202
202
203 .. code-block:: bash
203 .. code-block:: bash
204
204
205 id : <id_for_response>
205 id : <id_for_response>
206 api_key : "<api_key>"
206 api_key : "<api_key>"
207 args: {
207 args: {
208 "repoid" : "<reponame or repo_id>",
208 "repoid" : "<reponame or repo_id>",
209 "fork_name": "<forkname>",
209 "fork_name": "<forkname>",
210 "owner": "<username or user_id = Optional(=apiuser)>",
210 "owner": "<username or user_id = Optional(=apiuser)>",
211 "description": "<description>",
211 "description": "<description>",
212 "copy_permissions": "<bool>",
212 "copy_permissions": "<bool>",
213 "private": "<bool>",
213 "private": "<bool>",
214 "landing_rev": "<landing_rev>"
214 "landing_rev": "<landing_rev>"
215 }
215 }
216
216
217 Example error output:
217 Example error output:
218
218
219 .. code-block:: bash
219 .. code-block:: bash
220
220
221 id : <id_given_in_input>
221 id : <id_given_in_input>
222 result: {
222 result: {
223 "msg": "Created fork of `<reponame>` as `<forkname>`",
223 "msg": "Created fork of `<reponame>` as `<forkname>`",
224 "success": true,
224 "success": true,
225 "task": "<celery task id or None if done sync>"
225 "task": "<celery task id or None if done sync>"
226 }
226 }
227 error: null
227 error: null
228
228
229
229
230 get_repo
230 get_repo
231 --------
231 --------
232
232
233 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
233 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
234
234
235 Gets an existing repository by its name or repository_id.
235 Gets an existing repository by its name or repository_id.
236
236
237 The members section so the output returns users groups or users
237 The members section so the output returns users groups or users
238 associated with that repository.
238 associated with that repository.
239
239
240 This command can only be run using an |authtoken| with admin rights,
240 This command can only be run using an |authtoken| with admin rights,
241 or users with at least read rights to the |repo|.
241 or users with at least read rights to the |repo|.
242
242
243 :param apiuser: This is filled automatically from the |authtoken|.
243 :param apiuser: This is filled automatically from the |authtoken|.
244 :type apiuser: AuthUser
244 :type apiuser: AuthUser
245 :param repoid: The repository name or repository id.
245 :param repoid: The repository name or repository id.
246 :type repoid: str or int
246 :type repoid: str or int
247 :param cache: use the cached value for last changeset
247 :param cache: use the cached value for last changeset
248 :type: cache: Optional(bool)
248 :type: cache: Optional(bool)
249
249
250 Example output:
250 Example output:
251
251
252 .. code-block:: bash
252 .. code-block:: bash
253
253
254 {
254 {
255 "error": null,
255 "error": null,
256 "id": <repo_id>,
256 "id": <repo_id>,
257 "result": {
257 "result": {
258 "clone_uri": null,
258 "clone_uri": null,
259 "created_on": "timestamp",
259 "created_on": "timestamp",
260 "description": "repo description",
260 "description": "repo description",
261 "enable_downloads": false,
261 "enable_downloads": false,
262 "enable_locking": false,
262 "enable_locking": false,
263 "enable_statistics": false,
263 "enable_statistics": false,
264 "followers": [
264 "followers": [
265 {
265 {
266 "active": true,
266 "active": true,
267 "admin": false,
267 "admin": false,
268 "api_key": "****************************************",
268 "api_key": "****************************************",
269 "api_keys": [
269 "api_keys": [
270 "****************************************"
270 "****************************************"
271 ],
271 ],
272 "email": "user@example.com",
272 "email": "user@example.com",
273 "emails": [
273 "emails": [
274 "user@example.com"
274 "user@example.com"
275 ],
275 ],
276 "extern_name": "rhodecode",
276 "extern_name": "rhodecode",
277 "extern_type": "rhodecode",
277 "extern_type": "rhodecode",
278 "firstname": "username",
278 "firstname": "username",
279 "ip_addresses": [],
279 "ip_addresses": [],
280 "language": null,
280 "language": null,
281 "last_login": "2015-09-16T17:16:35.854",
281 "last_login": "2015-09-16T17:16:35.854",
282 "lastname": "surname",
282 "lastname": "surname",
283 "user_id": <user_id>,
283 "user_id": <user_id>,
284 "username": "name"
284 "username": "name"
285 }
285 }
286 ],
286 ],
287 "fork_of": "parent-repo",
287 "fork_of": "parent-repo",
288 "landing_rev": [
288 "landing_rev": [
289 "rev",
289 "rev",
290 "tip"
290 "tip"
291 ],
291 ],
292 "last_changeset": {
292 "last_changeset": {
293 "author": "User <user@example.com>",
293 "author": "User <user@example.com>",
294 "branch": "default",
294 "branch": "default",
295 "date": "timestamp",
295 "date": "timestamp",
296 "message": "last commit message",
296 "message": "last commit message",
297 "parents": [
297 "parents": [
298 {
298 {
299 "raw_id": "commit-id"
299 "raw_id": "commit-id"
300 }
300 }
301 ],
301 ],
302 "raw_id": "commit-id",
302 "raw_id": "commit-id",
303 "revision": <revision number>,
303 "revision": <revision number>,
304 "short_id": "short id"
304 "short_id": "short id"
305 },
305 },
306 "lock_reason": null,
306 "lock_reason": null,
307 "locked_by": null,
307 "locked_by": null,
308 "locked_date": null,
308 "locked_date": null,
309 "members": [
309 "members": [
310 {
310 {
311 "name": "super-admin-name",
311 "name": "super-admin-name",
312 "origin": "super-admin",
312 "origin": "super-admin",
313 "permission": "repository.admin",
313 "permission": "repository.admin",
314 "type": "user"
314 "type": "user"
315 },
315 },
316 {
316 {
317 "name": "owner-name",
317 "name": "owner-name",
318 "origin": "owner",
318 "origin": "owner",
319 "permission": "repository.admin",
319 "permission": "repository.admin",
320 "type": "user"
320 "type": "user"
321 },
321 },
322 {
322 {
323 "name": "user-group-name",
323 "name": "user-group-name",
324 "origin": "permission",
324 "origin": "permission",
325 "permission": "repository.write",
325 "permission": "repository.write",
326 "type": "user_group"
326 "type": "user_group"
327 }
327 }
328 ],
328 ],
329 "owner": "owner-name",
329 "owner": "owner-name",
330 "permissions": [
330 "permissions": [
331 {
331 {
332 "name": "super-admin-name",
332 "name": "super-admin-name",
333 "origin": "super-admin",
333 "origin": "super-admin",
334 "permission": "repository.admin",
334 "permission": "repository.admin",
335 "type": "user"
335 "type": "user"
336 },
336 },
337 {
337 {
338 "name": "owner-name",
338 "name": "owner-name",
339 "origin": "owner",
339 "origin": "owner",
340 "permission": "repository.admin",
340 "permission": "repository.admin",
341 "type": "user"
341 "type": "user"
342 },
342 },
343 {
343 {
344 "name": "user-group-name",
344 "name": "user-group-name",
345 "origin": "permission",
345 "origin": "permission",
346 "permission": "repository.write",
346 "permission": "repository.write",
347 "type": "user_group"
347 "type": "user_group"
348 }
348 }
349 ],
349 ],
350 "private": true,
350 "private": true,
351 "repo_id": 676,
351 "repo_id": 676,
352 "repo_name": "user-group/repo-name",
352 "repo_name": "user-group/repo-name",
353 "repo_type": "hg"
353 "repo_type": "hg"
354 }
354 }
355 }
355 }
356
356
357
357
358 get_repo_changeset
358 get_repo_changeset
359 ------------------
359 ------------------
360
360
361 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
361 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
362
362
363 Returns information about a changeset.
363 Returns information about a changeset.
364
364
365 Additionally parameters define the amount of details returned by
365 Additionally parameters define the amount of details returned by
366 this function.
366 this function.
367
367
368 This command can only be run using an |authtoken| with admin rights,
368 This command can only be run using an |authtoken| with admin rights,
369 or users with at least read rights to the |repo|.
369 or users with at least read rights to the |repo|.
370
370
371 :param apiuser: This is filled automatically from the |authtoken|.
371 :param apiuser: This is filled automatically from the |authtoken|.
372 :type apiuser: AuthUser
372 :type apiuser: AuthUser
373 :param repoid: The repository name or repository id
373 :param repoid: The repository name or repository id
374 :type repoid: str or int
374 :type repoid: str or int
375 :param revision: revision for which listing should be done
375 :param revision: revision for which listing should be done
376 :type revision: str
376 :type revision: str
377 :param details: details can be 'basic|extended|full' full gives diff
377 :param details: details can be 'basic|extended|full' full gives diff
378 info details like the diff itself, and number of changed files etc.
378 info details like the diff itself, and number of changed files etc.
379 :type details: Optional(str)
379 :type details: Optional(str)
380
380
381
381
382 get_repo_changesets
382 get_repo_changesets
383 -------------------
383 -------------------
384
384
385 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
385 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
386
386
387 Returns a set of commits limited by the number starting
387 Returns a set of commits limited by the number starting
388 from the `start_rev` option.
388 from the `start_rev` option.
389
389
390 Additional parameters define the amount of details returned by this
390 Additional parameters define the amount of details returned by this
391 function.
391 function.
392
392
393 This command can only be run using an |authtoken| with admin rights,
393 This command can only be run using an |authtoken| with admin rights,
394 or users with at least read rights to |repos|.
394 or users with at least read rights to |repos|.
395
395
396 :param apiuser: This is filled automatically from the |authtoken|.
396 :param apiuser: This is filled automatically from the |authtoken|.
397 :type apiuser: AuthUser
397 :type apiuser: AuthUser
398 :param repoid: The repository name or repository ID.
398 :param repoid: The repository name or repository ID.
399 :type repoid: str or int
399 :type repoid: str or int
400 :param start_rev: The starting revision from where to get changesets.
400 :param start_rev: The starting revision from where to get changesets.
401 :type start_rev: str
401 :type start_rev: str
402 :param limit: Limit the number of commits to this amount
402 :param limit: Limit the number of commits to this amount
403 :type limit: str or int
403 :type limit: str or int
404 :param details: Set the level of detail returned. Valid option are:
404 :param details: Set the level of detail returned. Valid option are:
405 ``basic``, ``extended`` and ``full``.
405 ``basic``, ``extended`` and ``full``.
406 :type details: Optional(str)
406 :type details: Optional(str)
407
407
408 .. note::
408 .. note::
409
409
410 Setting the parameter `details` to the value ``full`` is extensive
410 Setting the parameter `details` to the value ``full`` is extensive
411 and returns details like the diff itself, and the number
411 and returns details like the diff itself, and the number
412 of changed files.
412 of changed files.
413
413
414
414
415 get_repo_nodes
415 get_repo_nodes
416 --------------
416 --------------
417
417
418 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
418 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
419
419
420 Returns a list of nodes and children in a flat list for a given
420 Returns a list of nodes and children in a flat list for a given
421 path at given revision.
421 path at given revision.
422
422
423 It's possible to specify ret_type to show only `files` or `dirs`.
423 It's possible to specify ret_type to show only `files` or `dirs`.
424
424
425 This command can only be run using an |authtoken| with admin rights,
425 This command can only be run using an |authtoken| with admin rights,
426 or users with at least read rights to |repos|.
426 or users with at least read rights to |repos|.
427
427
428 :param apiuser: This is filled automatically from the |authtoken|.
428 :param apiuser: This is filled automatically from the |authtoken|.
429 :type apiuser: AuthUser
429 :type apiuser: AuthUser
430 :param repoid: The repository name or repository ID.
430 :param repoid: The repository name or repository ID.
431 :type repoid: str or int
431 :type repoid: str or int
432 :param revision: The revision for which listing should be done.
432 :param revision: The revision for which listing should be done.
433 :type revision: str
433 :type revision: str
434 :param root_path: The path from which to start displaying.
434 :param root_path: The path from which to start displaying.
435 :type root_path: str
435 :type root_path: str
436 :param ret_type: Set the return type. Valid options are
436 :param ret_type: Set the return type. Valid options are
437 ``all`` (default), ``files`` and ``dirs``.
437 ``all`` (default), ``files`` and ``dirs``.
438 :type ret_type: Optional(str)
438 :type ret_type: Optional(str)
439 :param details: Returns extended information about nodes, such as
439 :param details: Returns extended information about nodes, such as
440 md5, binary, and or content. The valid options are ``basic`` and
440 md5, binary, and or content. The valid options are ``basic`` and
441 ``full``.
441 ``full``.
442 :type details: Optional(str)
442 :type details: Optional(str)
443 :param max_file_bytes: Only return file content under this file size bytes
443 :param max_file_bytes: Only return file content under this file size bytes
444 :type details: Optional(int)
444 :type details: Optional(int)
445
445
446 Example output:
446 Example output:
447
447
448 .. code-block:: bash
448 .. code-block:: bash
449
449
450 id : <id_given_in_input>
450 id : <id_given_in_input>
451 result: [
451 result: [
452 {
452 {
453 "name" : "<name>"
453 "name" : "<name>"
454 "type" : "<type>",
454 "type" : "<type>",
455 "binary": "<true|false>" (only in extended mode)
455 "binary": "<true|false>" (only in extended mode)
456 "md5" : "<md5 of file content>" (only in extended mode)
456 "md5" : "<md5 of file content>" (only in extended mode)
457 },
457 },
458 ...
458 ...
459 ]
459 ]
460 error: null
460 error: null
461
461
462
462
463 get_repo_refs
463 get_repo_refs
464 -------------
464 -------------
465
465
466 .. py:function:: get_repo_refs(apiuser, repoid)
466 .. py:function:: get_repo_refs(apiuser, repoid)
467
467
468 Returns a dictionary of current references. It returns
468 Returns a dictionary of current references. It returns
469 bookmarks, branches, closed_branches, and tags for given repository
469 bookmarks, branches, closed_branches, and tags for given repository
470
470
471 It's possible to specify ret_type to show only `files` or `dirs`.
471 It's possible to specify ret_type to show only `files` or `dirs`.
472
472
473 This command can only be run using an |authtoken| with admin rights,
473 This command can only be run using an |authtoken| with admin rights,
474 or users with at least read rights to |repos|.
474 or users with at least read rights to |repos|.
475
475
476 :param apiuser: This is filled automatically from the |authtoken|.
476 :param apiuser: This is filled automatically from the |authtoken|.
477 :type apiuser: AuthUser
477 :type apiuser: AuthUser
478 :param repoid: The repository name or repository ID.
478 :param repoid: The repository name or repository ID.
479 :type repoid: str or int
479 :type repoid: str or int
480
480
481 Example output:
481 Example output:
482
482
483 .. code-block:: bash
483 .. code-block:: bash
484
484
485 id : <id_given_in_input>
485 id : <id_given_in_input>
486 "result": {
486 "result": {
487 "bookmarks": {
487 "bookmarks": {
488 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
488 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
489 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
489 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
490 },
490 },
491 "branches": {
491 "branches": {
492 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
492 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
493 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
493 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
494 },
494 },
495 "branches_closed": {},
495 "branches_closed": {},
496 "tags": {
496 "tags": {
497 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
497 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
498 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
498 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
499 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
499 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
500 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
500 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
501 }
501 }
502 }
502 }
503 error: null
503 error: null
504
504
505
505
506 get_repo_settings
506 get_repo_settings
507 -----------------
507 -----------------
508
508
509 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
509 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
510
510
511 Returns all settings for a repository. If key is given it only returns the
511 Returns all settings for a repository. If key is given it only returns the
512 setting identified by the key or null.
512 setting identified by the key or null.
513
513
514 :param apiuser: This is filled automatically from the |authtoken|.
514 :param apiuser: This is filled automatically from the |authtoken|.
515 :type apiuser: AuthUser
515 :type apiuser: AuthUser
516 :param repoid: The repository name or repository id.
516 :param repoid: The repository name or repository id.
517 :type repoid: str or int
517 :type repoid: str or int
518 :param key: Key of the setting to return.
518 :param key: Key of the setting to return.
519 :type: key: Optional(str)
519 :type: key: Optional(str)
520
520
521 Example output:
521 Example output:
522
522
523 .. code-block:: bash
523 .. code-block:: bash
524
524
525 {
525 {
526 "error": null,
526 "error": null,
527 "id": 237,
527 "id": 237,
528 "result": {
528 "result": {
529 "extensions_largefiles": true,
529 "extensions_largefiles": true,
530 "extensions_evolve": true,
530 "extensions_evolve": true,
531 "hooks_changegroup_push_logger": true,
531 "hooks_changegroup_push_logger": true,
532 "hooks_changegroup_repo_size": false,
532 "hooks_changegroup_repo_size": false,
533 "hooks_outgoing_pull_logger": true,
533 "hooks_outgoing_pull_logger": true,
534 "phases_publish": "True",
534 "phases_publish": "True",
535 "rhodecode_hg_use_rebase_for_merging": true,
535 "rhodecode_hg_use_rebase_for_merging": true,
536 "rhodecode_hg_close_branch_before_merging": false,
537 "rhodecode_git_use_rebase_for_merging": true,
538 "rhodecode_git_close_branch_before_merging": false,
536 "rhodecode_pr_merge_enabled": true,
539 "rhodecode_pr_merge_enabled": true,
537 "rhodecode_use_outdated_comments": true
540 "rhodecode_use_outdated_comments": true
538 }
541 }
539 }
542 }
540
543
541
544
542 get_repos
545 get_repos
543 ---------
546 ---------
544
547
545 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
548 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
546
549
547 Lists all existing repositories.
550 Lists all existing repositories.
548
551
549 This command can only be run using an |authtoken| with admin rights,
552 This command can only be run using an |authtoken| with admin rights,
550 or users with at least read rights to |repos|.
553 or users with at least read rights to |repos|.
551
554
552 :param apiuser: This is filled automatically from the |authtoken|.
555 :param apiuser: This is filled automatically from the |authtoken|.
553 :type apiuser: AuthUser
556 :type apiuser: AuthUser
554 :param root: specify root repository group to fetch repositories.
557 :param root: specify root repository group to fetch repositories.
555 filters the returned repositories to be members of given root group.
558 filters the returned repositories to be members of given root group.
556 :type root: Optional(None)
559 :type root: Optional(None)
557 :param traverse: traverse given root into subrepositories. With this flag
560 :param traverse: traverse given root into subrepositories. With this flag
558 set to False, it will only return top-level repositories from `root`.
561 set to False, it will only return top-level repositories from `root`.
559 if root is empty it will return just top-level repositories.
562 if root is empty it will return just top-level repositories.
560 :type traverse: Optional(True)
563 :type traverse: Optional(True)
561
564
562
565
563 Example output:
566 Example output:
564
567
565 .. code-block:: bash
568 .. code-block:: bash
566
569
567 id : <id_given_in_input>
570 id : <id_given_in_input>
568 result: [
571 result: [
569 {
572 {
570 "repo_id" : "<repo_id>",
573 "repo_id" : "<repo_id>",
571 "repo_name" : "<reponame>"
574 "repo_name" : "<reponame>"
572 "repo_type" : "<repo_type>",
575 "repo_type" : "<repo_type>",
573 "clone_uri" : "<clone_uri>",
576 "clone_uri" : "<clone_uri>",
574 "private": : "<bool>",
577 "private": : "<bool>",
575 "created_on" : "<datetimecreated>",
578 "created_on" : "<datetimecreated>",
576 "description" : "<description>",
579 "description" : "<description>",
577 "landing_rev": "<landing_rev>",
580 "landing_rev": "<landing_rev>",
578 "owner": "<repo_owner>",
581 "owner": "<repo_owner>",
579 "fork_of": "<name_of_fork_parent>",
582 "fork_of": "<name_of_fork_parent>",
580 "enable_downloads": "<bool>",
583 "enable_downloads": "<bool>",
581 "enable_locking": "<bool>",
584 "enable_locking": "<bool>",
582 "enable_statistics": "<bool>",
585 "enable_statistics": "<bool>",
583 },
586 },
584 ...
587 ...
585 ]
588 ]
586 error: null
589 error: null
587
590
588
591
589 grant_user_group_permission
592 grant_user_group_permission
590 ---------------------------
593 ---------------------------
591
594
592 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
595 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
593
596
594 Grant permission for a user group on the specified repository,
597 Grant permission for a user group on the specified repository,
595 or update existing permissions.
598 or update existing permissions.
596
599
597 This command can only be run using an |authtoken| with admin
600 This command can only be run using an |authtoken| with admin
598 permissions on the |repo|.
601 permissions on the |repo|.
599
602
600 :param apiuser: This is filled automatically from the |authtoken|.
603 :param apiuser: This is filled automatically from the |authtoken|.
601 :type apiuser: AuthUser
604 :type apiuser: AuthUser
602 :param repoid: Set the repository name or repository ID.
605 :param repoid: Set the repository name or repository ID.
603 :type repoid: str or int
606 :type repoid: str or int
604 :param usergroupid: Specify the ID of the user group.
607 :param usergroupid: Specify the ID of the user group.
605 :type usergroupid: str or int
608 :type usergroupid: str or int
606 :param perm: Set the user group permissions using the following
609 :param perm: Set the user group permissions using the following
607 format: (repository.(none|read|write|admin))
610 format: (repository.(none|read|write|admin))
608 :type perm: str
611 :type perm: str
609
612
610 Example output:
613 Example output:
611
614
612 .. code-block:: bash
615 .. code-block:: bash
613
616
614 id : <id_given_in_input>
617 id : <id_given_in_input>
615 result : {
618 result : {
616 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
619 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
617 "success": true
620 "success": true
618
621
619 }
622 }
620 error : null
623 error : null
621
624
622 Example error output:
625 Example error output:
623
626
624 .. code-block:: bash
627 .. code-block:: bash
625
628
626 id : <id_given_in_input>
629 id : <id_given_in_input>
627 result : null
630 result : null
628 error : {
631 error : {
629 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
632 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
630 }
633 }
631
634
632
635
633 grant_user_permission
636 grant_user_permission
634 ---------------------
637 ---------------------
635
638
636 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
639 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
637
640
638 Grant permissions for the specified user on the given repository,
641 Grant permissions for the specified user on the given repository,
639 or update existing permissions if found.
642 or update existing permissions if found.
640
643
641 This command can only be run using an |authtoken| with admin
644 This command can only be run using an |authtoken| with admin
642 permissions on the |repo|.
645 permissions on the |repo|.
643
646
644 :param apiuser: This is filled automatically from the |authtoken|.
647 :param apiuser: This is filled automatically from the |authtoken|.
645 :type apiuser: AuthUser
648 :type apiuser: AuthUser
646 :param repoid: Set the repository name or repository ID.
649 :param repoid: Set the repository name or repository ID.
647 :type repoid: str or int
650 :type repoid: str or int
648 :param userid: Set the user name.
651 :param userid: Set the user name.
649 :type userid: str
652 :type userid: str
650 :param perm: Set the user permissions, using the following format
653 :param perm: Set the user permissions, using the following format
651 ``(repository.(none|read|write|admin))``
654 ``(repository.(none|read|write|admin))``
652 :type perm: str
655 :type perm: str
653
656
654 Example output:
657 Example output:
655
658
656 .. code-block:: bash
659 .. code-block:: bash
657
660
658 id : <id_given_in_input>
661 id : <id_given_in_input>
659 result: {
662 result: {
660 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
663 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
661 "success": true
664 "success": true
662 }
665 }
663 error: null
666 error: null
664
667
665
668
666 invalidate_cache
669 invalidate_cache
667 ----------------
670 ----------------
668
671
669 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
672 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
670
673
671 Invalidates the cache for the specified repository.
674 Invalidates the cache for the specified repository.
672
675
673 This command can only be run using an |authtoken| with admin rights to
676 This command can only be run using an |authtoken| with admin rights to
674 the specified repository.
677 the specified repository.
675
678
676 This command takes the following options:
679 This command takes the following options:
677
680
678 :param apiuser: This is filled automatically from |authtoken|.
681 :param apiuser: This is filled automatically from |authtoken|.
679 :type apiuser: AuthUser
682 :type apiuser: AuthUser
680 :param repoid: Sets the repository name or repository ID.
683 :param repoid: Sets the repository name or repository ID.
681 :type repoid: str or int
684 :type repoid: str or int
682 :param delete_keys: This deletes the invalidated keys instead of
685 :param delete_keys: This deletes the invalidated keys instead of
683 just flagging them.
686 just flagging them.
684 :type delete_keys: Optional(``True`` | ``False``)
687 :type delete_keys: Optional(``True`` | ``False``)
685
688
686 Example output:
689 Example output:
687
690
688 .. code-block:: bash
691 .. code-block:: bash
689
692
690 id : <id_given_in_input>
693 id : <id_given_in_input>
691 result : {
694 result : {
692 'msg': Cache for repository `<repository name>` was invalidated,
695 'msg': Cache for repository `<repository name>` was invalidated,
693 'repository': <repository name>
696 'repository': <repository name>
694 }
697 }
695 error : null
698 error : null
696
699
697 Example error output:
700 Example error output:
698
701
699 .. code-block:: bash
702 .. code-block:: bash
700
703
701 id : <id_given_in_input>
704 id : <id_given_in_input>
702 result : null
705 result : null
703 error : {
706 error : {
704 'Error occurred during cache invalidation action'
707 'Error occurred during cache invalidation action'
705 }
708 }
706
709
707
710
708 lock
711 lock
709 ----
712 ----
710
713
711 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
714 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
712
715
713 Sets the lock state of the specified |repo| by the given user.
716 Sets the lock state of the specified |repo| by the given user.
714 From more information, see :ref:`repo-locking`.
717 From more information, see :ref:`repo-locking`.
715
718
716 * If the ``userid`` option is not set, the repository is locked to the
719 * If the ``userid`` option is not set, the repository is locked to the
717 user who called the method.
720 user who called the method.
718 * If the ``locked`` parameter is not set, the current lock state of the
721 * If the ``locked`` parameter is not set, the current lock state of the
719 repository is displayed.
722 repository is displayed.
720
723
721 This command can only be run using an |authtoken| with admin rights to
724 This command can only be run using an |authtoken| with admin rights to
722 the specified repository.
725 the specified repository.
723
726
724 This command takes the following options:
727 This command takes the following options:
725
728
726 :param apiuser: This is filled automatically from the |authtoken|.
729 :param apiuser: This is filled automatically from the |authtoken|.
727 :type apiuser: AuthUser
730 :type apiuser: AuthUser
728 :param repoid: Sets the repository name or repository ID.
731 :param repoid: Sets the repository name or repository ID.
729 :type repoid: str or int
732 :type repoid: str or int
730 :param locked: Sets the lock state.
733 :param locked: Sets the lock state.
731 :type locked: Optional(``True`` | ``False``)
734 :type locked: Optional(``True`` | ``False``)
732 :param userid: Set the repository lock to this user.
735 :param userid: Set the repository lock to this user.
733 :type userid: Optional(str or int)
736 :type userid: Optional(str or int)
734
737
735 Example error output:
738 Example error output:
736
739
737 .. code-block:: bash
740 .. code-block:: bash
738
741
739 id : <id_given_in_input>
742 id : <id_given_in_input>
740 result : {
743 result : {
741 'repo': '<reponame>',
744 'repo': '<reponame>',
742 'locked': <bool: lock state>,
745 'locked': <bool: lock state>,
743 'locked_since': <int: lock timestamp>,
746 'locked_since': <int: lock timestamp>,
744 'locked_by': <username of person who made the lock>,
747 'locked_by': <username of person who made the lock>,
745 'lock_reason': <str: reason for locking>,
748 'lock_reason': <str: reason for locking>,
746 'lock_state_changed': <bool: True if lock state has been changed in this request>,
749 'lock_state_changed': <bool: True if lock state has been changed in this request>,
747 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
750 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
748 or
751 or
749 'msg': 'Repo `<repository name>` not locked.'
752 'msg': 'Repo `<repository name>` not locked.'
750 or
753 or
751 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
754 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
752 }
755 }
753 error : null
756 error : null
754
757
755 Example error output:
758 Example error output:
756
759
757 .. code-block:: bash
760 .. code-block:: bash
758
761
759 id : <id_given_in_input>
762 id : <id_given_in_input>
760 result : null
763 result : null
761 error : {
764 error : {
762 'Error occurred locking repository `<reponame>`'
765 'Error occurred locking repository `<reponame>`'
763 }
766 }
764
767
765
768
766 maintenance
769 maintenance
767 -----------
770 -----------
768
771
769 .. py:function:: maintenance(apiuser, repoid)
772 .. py:function:: maintenance(apiuser, repoid)
770
773
771 Triggers a maintenance on the given repository.
774 Triggers a maintenance on the given repository.
772
775
773 This command can only be run using an |authtoken| with admin
776 This command can only be run using an |authtoken| with admin
774 rights to the specified repository. For more information,
777 rights to the specified repository. For more information,
775 see :ref:`config-token-ref`.
778 see :ref:`config-token-ref`.
776
779
777 This command takes the following options:
780 This command takes the following options:
778
781
779 :param apiuser: This is filled automatically from the |authtoken|.
782 :param apiuser: This is filled automatically from the |authtoken|.
780 :type apiuser: AuthUser
783 :type apiuser: AuthUser
781 :param repoid: The repository name or repository ID.
784 :param repoid: The repository name or repository ID.
782 :type repoid: str or int
785 :type repoid: str or int
783
786
784 Example output:
787 Example output:
785
788
786 .. code-block:: bash
789 .. code-block:: bash
787
790
788 id : <id_given_in_input>
791 id : <id_given_in_input>
789 result : {
792 result : {
790 "msg": "executed maintenance command",
793 "msg": "executed maintenance command",
791 "executed_actions": [
794 "executed_actions": [
792 <action_message>, <action_message2>...
795 <action_message>, <action_message2>...
793 ],
796 ],
794 "repository": "<repository name>"
797 "repository": "<repository name>"
795 }
798 }
796 error : null
799 error : null
797
800
798 Example error output:
801 Example error output:
799
802
800 .. code-block:: bash
803 .. code-block:: bash
801
804
802 id : <id_given_in_input>
805 id : <id_given_in_input>
803 result : null
806 result : null
804 error : {
807 error : {
805 "Unable to execute maintenance on `<reponame>`"
808 "Unable to execute maintenance on `<reponame>`"
806 }
809 }
807
810
808
811
809 pull
812 pull
810 ----
813 ----
811
814
812 .. py:function:: pull(apiuser, repoid)
815 .. py:function:: pull(apiuser, repoid)
813
816
814 Triggers a pull on the given repository from a remote location. You
817 Triggers a pull on the given repository from a remote location. You
815 can use this to keep remote repositories up-to-date.
818 can use this to keep remote repositories up-to-date.
816
819
817 This command can only be run using an |authtoken| with admin
820 This command can only be run using an |authtoken| with admin
818 rights to the specified repository. For more information,
821 rights to the specified repository. For more information,
819 see :ref:`config-token-ref`.
822 see :ref:`config-token-ref`.
820
823
821 This command takes the following options:
824 This command takes the following options:
822
825
823 :param apiuser: This is filled automatically from the |authtoken|.
826 :param apiuser: This is filled automatically from the |authtoken|.
824 :type apiuser: AuthUser
827 :type apiuser: AuthUser
825 :param repoid: The repository name or repository ID.
828 :param repoid: The repository name or repository ID.
826 :type repoid: str or int
829 :type repoid: str or int
827
830
828 Example output:
831 Example output:
829
832
830 .. code-block:: bash
833 .. code-block:: bash
831
834
832 id : <id_given_in_input>
835 id : <id_given_in_input>
833 result : {
836 result : {
834 "msg": "Pulled from `<repository name>`"
837 "msg": "Pulled from `<repository name>`"
835 "repository": "<repository name>"
838 "repository": "<repository name>"
836 }
839 }
837 error : null
840 error : null
838
841
839 Example error output:
842 Example error output:
840
843
841 .. code-block:: bash
844 .. code-block:: bash
842
845
843 id : <id_given_in_input>
846 id : <id_given_in_input>
844 result : null
847 result : null
845 error : {
848 error : {
846 "Unable to pull changes from `<reponame>`"
849 "Unable to pull changes from `<reponame>`"
847 }
850 }
848
851
849
852
850 remove_field_from_repo
853 remove_field_from_repo
851 ----------------------
854 ----------------------
852
855
853 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
856 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
854
857
855 Removes an extra field from a repository.
858 Removes an extra field from a repository.
856
859
857 This command can only be run using an |authtoken| with at least
860 This command can only be run using an |authtoken| with at least
858 write permissions to the |repo|.
861 write permissions to the |repo|.
859
862
860 :param apiuser: This is filled automatically from the |authtoken|.
863 :param apiuser: This is filled automatically from the |authtoken|.
861 :type apiuser: AuthUser
864 :type apiuser: AuthUser
862 :param repoid: Set the repository name or repository ID.
865 :param repoid: Set the repository name or repository ID.
863 :type repoid: str or int
866 :type repoid: str or int
864 :param key: Set the unique field key for this repository.
867 :param key: Set the unique field key for this repository.
865 :type key: str
868 :type key: str
866
869
867
870
868 revoke_user_group_permission
871 revoke_user_group_permission
869 ----------------------------
872 ----------------------------
870
873
871 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
874 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
872
875
873 Revoke the permissions of a user group on a given repository.
876 Revoke the permissions of a user group on a given repository.
874
877
875 This command can only be run using an |authtoken| with admin
878 This command can only be run using an |authtoken| with admin
876 permissions on the |repo|.
879 permissions on the |repo|.
877
880
878 :param apiuser: This is filled automatically from the |authtoken|.
881 :param apiuser: This is filled automatically from the |authtoken|.
879 :type apiuser: AuthUser
882 :type apiuser: AuthUser
880 :param repoid: Set the repository name or repository ID.
883 :param repoid: Set the repository name or repository ID.
881 :type repoid: str or int
884 :type repoid: str or int
882 :param usergroupid: Specify the user group ID.
885 :param usergroupid: Specify the user group ID.
883 :type usergroupid: str or int
886 :type usergroupid: str or int
884
887
885 Example output:
888 Example output:
886
889
887 .. code-block:: bash
890 .. code-block:: bash
888
891
889 id : <id_given_in_input>
892 id : <id_given_in_input>
890 result: {
893 result: {
891 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
894 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
892 "success": true
895 "success": true
893 }
896 }
894 error: null
897 error: null
895
898
896
899
897 revoke_user_permission
900 revoke_user_permission
898 ----------------------
901 ----------------------
899
902
900 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
903 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
901
904
902 Revoke permission for a user on the specified repository.
905 Revoke permission for a user on the specified repository.
903
906
904 This command can only be run using an |authtoken| with admin
907 This command can only be run using an |authtoken| with admin
905 permissions on the |repo|.
908 permissions on the |repo|.
906
909
907 :param apiuser: This is filled automatically from the |authtoken|.
910 :param apiuser: This is filled automatically from the |authtoken|.
908 :type apiuser: AuthUser
911 :type apiuser: AuthUser
909 :param repoid: Set the repository name or repository ID.
912 :param repoid: Set the repository name or repository ID.
910 :type repoid: str or int
913 :type repoid: str or int
911 :param userid: Set the user name of revoked user.
914 :param userid: Set the user name of revoked user.
912 :type userid: str or int
915 :type userid: str or int
913
916
914 Example error output:
917 Example error output:
915
918
916 .. code-block:: bash
919 .. code-block:: bash
917
920
918 id : <id_given_in_input>
921 id : <id_given_in_input>
919 result: {
922 result: {
920 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
923 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
921 "success": true
924 "success": true
922 }
925 }
923 error: null
926 error: null
924
927
925
928
926 set_repo_settings
929 set_repo_settings
927 -----------------
930 -----------------
928
931
929 .. py:function:: set_repo_settings(apiuser, repoid, settings)
932 .. py:function:: set_repo_settings(apiuser, repoid, settings)
930
933
931 Update repository settings. Returns true on success.
934 Update repository settings. Returns true on success.
932
935
933 :param apiuser: This is filled automatically from the |authtoken|.
936 :param apiuser: This is filled automatically from the |authtoken|.
934 :type apiuser: AuthUser
937 :type apiuser: AuthUser
935 :param repoid: The repository name or repository id.
938 :param repoid: The repository name or repository id.
936 :type repoid: str or int
939 :type repoid: str or int
937 :param settings: The new settings for the repository.
940 :param settings: The new settings for the repository.
938 :type: settings: dict
941 :type: settings: dict
939
942
940 Example output:
943 Example output:
941
944
942 .. code-block:: bash
945 .. code-block:: bash
943
946
944 {
947 {
945 "error": null,
948 "error": null,
946 "id": 237,
949 "id": 237,
947 "result": true
950 "result": true
948 }
951 }
949
952
950
953
951 strip
954 strip
952 -----
955 -----
953
956
954 .. py:function:: strip(apiuser, repoid, revision, branch)
957 .. py:function:: strip(apiuser, repoid, revision, branch)
955
958
956 Strips the given revision from the specified repository.
959 Strips the given revision from the specified repository.
957
960
958 * This will remove the revision and all of its decendants.
961 * This will remove the revision and all of its decendants.
959
962
960 This command can only be run using an |authtoken| with admin rights to
963 This command can only be run using an |authtoken| with admin rights to
961 the specified repository.
964 the specified repository.
962
965
963 This command takes the following options:
966 This command takes the following options:
964
967
965 :param apiuser: This is filled automatically from the |authtoken|.
968 :param apiuser: This is filled automatically from the |authtoken|.
966 :type apiuser: AuthUser
969 :type apiuser: AuthUser
967 :param repoid: The repository name or repository ID.
970 :param repoid: The repository name or repository ID.
968 :type repoid: str or int
971 :type repoid: str or int
969 :param revision: The revision you wish to strip.
972 :param revision: The revision you wish to strip.
970 :type revision: str
973 :type revision: str
971 :param branch: The branch from which to strip the revision.
974 :param branch: The branch from which to strip the revision.
972 :type branch: str
975 :type branch: str
973
976
974 Example output:
977 Example output:
975
978
976 .. code-block:: bash
979 .. code-block:: bash
977
980
978 id : <id_given_in_input>
981 id : <id_given_in_input>
979 result : {
982 result : {
980 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
983 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
981 "repository": "<repository name>"
984 "repository": "<repository name>"
982 }
985 }
983 error : null
986 error : null
984
987
985 Example error output:
988 Example error output:
986
989
987 .. code-block:: bash
990 .. code-block:: bash
988
991
989 id : <id_given_in_input>
992 id : <id_given_in_input>
990 result : null
993 result : null
991 error : {
994 error : {
992 "Unable to strip commit <commit_hash> from repo `<repository name>`"
995 "Unable to strip commit <commit_hash> from repo `<repository name>`"
993 }
996 }
994
997
995
998
996 update_repo
999 update_repo
997 -----------
1000 -----------
998
1001
999 .. py:function:: update_repo(apiuser, repoid, repo_name=<Optional:None>, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, fork_of=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, fields=<Optional:''>)
1002 .. py:function:: update_repo(apiuser, repoid, repo_name=<Optional:None>, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, private=<Optional:False>, clone_uri=<Optional:None>, landing_rev=<Optional:'rev:tip'>, fork_of=<Optional:None>, enable_statistics=<Optional:False>, enable_locking=<Optional:False>, enable_downloads=<Optional:False>, fields=<Optional:''>)
1000
1003
1001 Updates a repository with the given information.
1004 Updates a repository with the given information.
1002
1005
1003 This command can only be run using an |authtoken| with at least
1006 This command can only be run using an |authtoken| with at least
1004 admin permissions to the |repo|.
1007 admin permissions to the |repo|.
1005
1008
1006 * If the repository name contains "/", repository will be updated
1009 * If the repository name contains "/", repository will be updated
1007 accordingly with a repository group or nested repository groups
1010 accordingly with a repository group or nested repository groups
1008
1011
1009 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1012 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1010 called "repo-test" and place it inside group "foo/bar".
1013 called "repo-test" and place it inside group "foo/bar".
1011 You have to have permissions to access and write to the last repository
1014 You have to have permissions to access and write to the last repository
1012 group ("bar" in this example)
1015 group ("bar" in this example)
1013
1016
1014 :param apiuser: This is filled automatically from the |authtoken|.
1017 :param apiuser: This is filled automatically from the |authtoken|.
1015 :type apiuser: AuthUser
1018 :type apiuser: AuthUser
1016 :param repoid: repository name or repository ID.
1019 :param repoid: repository name or repository ID.
1017 :type repoid: str or int
1020 :type repoid: str or int
1018 :param repo_name: Update the |repo| name, including the
1021 :param repo_name: Update the |repo| name, including the
1019 repository group it's in.
1022 repository group it's in.
1020 :type repo_name: str
1023 :type repo_name: str
1021 :param owner: Set the |repo| owner.
1024 :param owner: Set the |repo| owner.
1022 :type owner: str
1025 :type owner: str
1023 :param fork_of: Set the |repo| as fork of another |repo|.
1026 :param fork_of: Set the |repo| as fork of another |repo|.
1024 :type fork_of: str
1027 :type fork_of: str
1025 :param description: Update the |repo| description.
1028 :param description: Update the |repo| description.
1026 :type description: str
1029 :type description: str
1027 :param private: Set the |repo| as private. (True | False)
1030 :param private: Set the |repo| as private. (True | False)
1028 :type private: bool
1031 :type private: bool
1029 :param clone_uri: Update the |repo| clone URI.
1032 :param clone_uri: Update the |repo| clone URI.
1030 :type clone_uri: str
1033 :type clone_uri: str
1031 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
1034 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
1032 :type landing_rev: str
1035 :type landing_rev: str
1033 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1036 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1034 :type enable_statistics: bool
1037 :type enable_statistics: bool
1035 :param enable_locking: Enable |repo| locking.
1038 :param enable_locking: Enable |repo| locking.
1036 :type enable_locking: bool
1039 :type enable_locking: bool
1037 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1040 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1038 :type enable_downloads: bool
1041 :type enable_downloads: bool
1039 :param fields: Add extra fields to the |repo|. Use the following
1042 :param fields: Add extra fields to the |repo|. Use the following
1040 example format: ``field_key=field_val,field_key2=fieldval2``.
1043 example format: ``field_key=field_val,field_key2=fieldval2``.
1041 Escape ', ' with \,
1044 Escape ', ' with \,
1042 :type fields: str
1045 :type fields: str
1043
1046
1044
1047
@@ -1,210 +1,234 b''
1 .. _server-methods-ref:
1 .. _server-methods-ref:
2
2
3 server methods
3 server methods
4 ==============
4 ==============
5
5
6 cleanup_sessions
6 cleanup_sessions
7 ----------------
7 ----------------
8
8
9 .. py:function:: cleanup_sessions(apiuser, older_then=<Optional:60>)
9 .. py:function:: cleanup_sessions(apiuser, older_then=<Optional:60>)
10
10
11 Triggers a session cleanup action.
11 Triggers a session cleanup action.
12
12
13 If the ``older_then`` option is set, only sessions that hasn't been
13 If the ``older_then`` option is set, only sessions that hasn't been
14 accessed in the given number of days will be removed.
14 accessed in the given number of days will be removed.
15
15
16 This command can only be run using an |authtoken| with admin rights to
16 This command can only be run using an |authtoken| with admin rights to
17 the specified repository.
17 the specified repository.
18
18
19 This command takes the following options:
19 This command takes the following options:
20
20
21 :param apiuser: This is filled automatically from the |authtoken|.
21 :param apiuser: This is filled automatically from the |authtoken|.
22 :type apiuser: AuthUser
22 :type apiuser: AuthUser
23 :param older_then: Deletes session that hasn't been accessed
23 :param older_then: Deletes session that hasn't been accessed
24 in given number of days.
24 in given number of days.
25 :type older_then: Optional(int)
25 :type older_then: Optional(int)
26
26
27 Example output:
27 Example output:
28
28
29 .. code-block:: bash
29 .. code-block:: bash
30
30
31 id : <id_given_in_input>
31 id : <id_given_in_input>
32 result: {
32 result: {
33 "backend": "<type of backend>",
33 "backend": "<type of backend>",
34 "sessions_removed": <number_of_removed_sessions>
34 "sessions_removed": <number_of_removed_sessions>
35 }
35 }
36 error : null
36 error : null
37
37
38 Example error output:
38 Example error output:
39
39
40 .. code-block:: bash
40 .. code-block:: bash
41
41
42 id : <id_given_in_input>
42 id : <id_given_in_input>
43 result : null
43 result : null
44 error : {
44 error : {
45 'Error occurred during session cleanup'
45 'Error occurred during session cleanup'
46 }
46 }
47
47
48
48
49 get_ip
49 get_ip
50 ------
50 ------
51
51
52 .. py:function:: get_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
52 .. py:function:: get_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
53
53
54 Displays the IP Address as seen from the |RCE| server.
54 Displays the IP Address as seen from the |RCE| server.
55
55
56 * This command displays the IP Address, as well as all the defined IP
56 * This command displays the IP Address, as well as all the defined IP
57 addresses for the specified user. If the ``userid`` is not set, the
57 addresses for the specified user. If the ``userid`` is not set, the
58 data returned is for the user calling the method.
58 data returned is for the user calling the method.
59
59
60 This command can only be run using an |authtoken| with admin rights to
60 This command can only be run using an |authtoken| with admin rights to
61 the specified repository.
61 the specified repository.
62
62
63 This command takes the following options:
63 This command takes the following options:
64
64
65 :param apiuser: This is filled automatically from |authtoken|.
65 :param apiuser: This is filled automatically from |authtoken|.
66 :type apiuser: AuthUser
66 :type apiuser: AuthUser
67 :param userid: Sets the userid for which associated IP Address data
67 :param userid: Sets the userid for which associated IP Address data
68 is returned.
68 is returned.
69 :type userid: Optional(str or int)
69 :type userid: Optional(str or int)
70
70
71 Example output:
71 Example output:
72
72
73 .. code-block:: bash
73 .. code-block:: bash
74
74
75 id : <id_given_in_input>
75 id : <id_given_in_input>
76 result : {
76 result : {
77 "server_ip_addr": "<ip_from_clien>",
77 "server_ip_addr": "<ip_from_clien>",
78 "user_ips": [
78 "user_ips": [
79 {
79 {
80 "ip_addr": "<ip_with_mask>",
80 "ip_addr": "<ip_with_mask>",
81 "ip_range": ["<start_ip>", "<end_ip>"],
81 "ip_range": ["<start_ip>", "<end_ip>"],
82 },
82 },
83 ...
83 ...
84 ]
84 ]
85 }
85 }
86
86
87
87
88 get_method
88 get_method
89 ----------
89 ----------
90
90
91 .. py:function:: get_method(apiuser, pattern=<Optional:'*'>)
91 .. py:function:: get_method(apiuser, pattern=<Optional:'*'>)
92
92
93 Returns list of all available API methods. By default match pattern
93 Returns list of all available API methods. By default match pattern
94 os "*" but any other pattern can be specified. eg *comment* will return
94 os "*" but any other pattern can be specified. eg *comment* will return
95 all methods with comment inside them. If just single method is matched
95 all methods with comment inside them. If just single method is matched
96 returned data will also include method specification
96 returned data will also include method specification
97
97
98 This command can only be run using an |authtoken| with admin rights to
98 This command can only be run using an |authtoken| with admin rights to
99 the specified repository.
99 the specified repository.
100
100
101 This command takes the following options:
101 This command takes the following options:
102
102
103 :param apiuser: This is filled automatically from the |authtoken|.
103 :param apiuser: This is filled automatically from the |authtoken|.
104 :type apiuser: AuthUser
104 :type apiuser: AuthUser
105 :param pattern: pattern to match method names against
105 :param pattern: pattern to match method names against
106 :type older_then: Optional("*")
106 :type older_then: Optional("*")
107
107
108 Example output:
108 Example output:
109
109
110 .. code-block:: bash
110 .. code-block:: bash
111
111
112 id : <id_given_in_input>
112 id : <id_given_in_input>
113 "result": [
113 "result": [
114 "changeset_comment",
114 "changeset_comment",
115 "comment_pull_request",
115 "comment_pull_request",
116 "comment_commit"
116 "comment_commit"
117 ]
117 ]
118 error : null
118 error : null
119
119
120 .. code-block:: bash
120 .. code-block:: bash
121
121
122 id : <id_given_in_input>
122 id : <id_given_in_input>
123 "result": [
123 "result": [
124 "comment_commit",
124 "comment_commit",
125 {
125 {
126 "apiuser": "<RequiredType>",
126 "apiuser": "<RequiredType>",
127 "comment_type": "<Optional:u'note'>",
127 "comment_type": "<Optional:u'note'>",
128 "commit_id": "<RequiredType>",
128 "commit_id": "<RequiredType>",
129 "message": "<RequiredType>",
129 "message": "<RequiredType>",
130 "repoid": "<RequiredType>",
130 "repoid": "<RequiredType>",
131 "request": "<RequiredType>",
131 "request": "<RequiredType>",
132 "resolves_comment_id": "<Optional:None>",
132 "resolves_comment_id": "<Optional:None>",
133 "status": "<Optional:None>",
133 "status": "<Optional:None>",
134 "userid": "<Optional:<OptionalAttr:apiuser>>"
134 "userid": "<Optional:<OptionalAttr:apiuser>>"
135 }
135 }
136 ]
136 ]
137 error : null
137 error : null
138
138
139
139
140 get_repo_store
141 --------------
142
143 .. py:function:: get_repo_store(apiuser)
144
145 Returns the |RCE| repository storage information.
146
147 :param apiuser: This is filled automatically from the |authtoken|.
148 :type apiuser: AuthUser
149
150 Example output:
151
152 .. code-block:: bash
153
154 id : <id_given_in_input>
155 result : {
156 'modules': [<module name>,...]
157 'py_version': <python version>,
158 'platform': <platform type>,
159 'rhodecode_version': <rhodecode version>
160 }
161 error : null
162
163
140 get_server_info
164 get_server_info
141 ---------------
165 ---------------
142
166
143 .. py:function:: get_server_info(apiuser)
167 .. py:function:: get_server_info(apiuser)
144
168
145 Returns the |RCE| server information.
169 Returns the |RCE| server information.
146
170
147 This includes the running version of |RCE| and all installed
171 This includes the running version of |RCE| and all installed
148 packages. This command takes the following options:
172 packages. This command takes the following options:
149
173
150 :param apiuser: This is filled automatically from the |authtoken|.
174 :param apiuser: This is filled automatically from the |authtoken|.
151 :type apiuser: AuthUser
175 :type apiuser: AuthUser
152
176
153 Example output:
177 Example output:
154
178
155 .. code-block:: bash
179 .. code-block:: bash
156
180
157 id : <id_given_in_input>
181 id : <id_given_in_input>
158 result : {
182 result : {
159 'modules': [<module name>,...]
183 'modules': [<module name>,...]
160 'py_version': <python version>,
184 'py_version': <python version>,
161 'platform': <platform type>,
185 'platform': <platform type>,
162 'rhodecode_version': <rhodecode version>
186 'rhodecode_version': <rhodecode version>
163 }
187 }
164 error : null
188 error : null
165
189
166
190
167 rescan_repos
191 rescan_repos
168 ------------
192 ------------
169
193
170 .. py:function:: rescan_repos(apiuser, remove_obsolete=<Optional:False>)
194 .. py:function:: rescan_repos(apiuser, remove_obsolete=<Optional:False>)
171
195
172 Triggers a rescan of the specified repositories.
196 Triggers a rescan of the specified repositories.
173
197
174 * If the ``remove_obsolete`` option is set, it also deletes repositories
198 * If the ``remove_obsolete`` option is set, it also deletes repositories
175 that are found in the database but not on the file system, so called
199 that are found in the database but not on the file system, so called
176 "clean zombies".
200 "clean zombies".
177
201
178 This command can only be run using an |authtoken| with admin rights to
202 This command can only be run using an |authtoken| with admin rights to
179 the specified repository.
203 the specified repository.
180
204
181 This command takes the following options:
205 This command takes the following options:
182
206
183 :param apiuser: This is filled automatically from the |authtoken|.
207 :param apiuser: This is filled automatically from the |authtoken|.
184 :type apiuser: AuthUser
208 :type apiuser: AuthUser
185 :param remove_obsolete: Deletes repositories from the database that
209 :param remove_obsolete: Deletes repositories from the database that
186 are not found on the filesystem.
210 are not found on the filesystem.
187 :type remove_obsolete: Optional(``True`` | ``False``)
211 :type remove_obsolete: Optional(``True`` | ``False``)
188
212
189 Example output:
213 Example output:
190
214
191 .. code-block:: bash
215 .. code-block:: bash
192
216
193 id : <id_given_in_input>
217 id : <id_given_in_input>
194 result : {
218 result : {
195 'added': [<added repository name>,...]
219 'added': [<added repository name>,...]
196 'removed': [<removed repository name>,...]
220 'removed': [<removed repository name>,...]
197 }
221 }
198 error : null
222 error : null
199
223
200 Example error output:
224 Example error output:
201
225
202 .. code-block:: bash
226 .. code-block:: bash
203
227
204 id : <id_given_in_input>
228 id : <id_given_in_input>
205 result : null
229 result : null
206 error : {
230 error : {
207 'Error occurred during rescan repositories action'
231 'Error occurred during rescan repositories action'
208 }
232 }
209
233
210
234
@@ -1,88 +1,90 b''
1 .. _config-ldap-ref:
1 .. _config-ldap-ref:
2
2
3 LDAP
3 LDAP
4 ----
4 ----
5
5
6 |RCM| supports LDAP (Lightweight Directory Access Protocol) authentication.
6 |RCM| supports LDAP (Lightweight Directory Access Protocol) or
7 AD (active Directory) authentication.
7 All LDAP versions are supported, with the following |RCM| plugins managing each:
8 All LDAP versions are supported, with the following |RCM| plugins managing each:
8
9
9 * For LDAPv3 use ``rhodecode.lib.auth_modules.auth_ldap_group``
10 * For LDAPv3 use ``LDAP (egg:rhodecode-enterprise-ce#ldap)``
10 * For older LDAP versions use ``rhodecode.lib.auth_modules.auth_ldap``
11 * For LDAPv3 with user group sync use ``LDAP + User Groups (egg:rhodecode-enterprise-ee#ldap_group)``
12
11
13
12 .. important::
14 .. important::
13
15
14 The email used with your |RCE| super-admin account needs to match the email
16 The email used with your |RCE| super-admin account needs to match the email
15 address attached to your admin profile in LDAP. This is because
17 address attached to your admin profile in LDAP. This is because
16 within |RCE| the user email needs to be unique, and multiple users
18 within |RCE| the user email needs to be unique, and multiple users
17 cannot share an email account.
19 cannot share an email account.
18
20
19 Likewise, if as an admin you also have a user account, the email address
21 Likewise, if as an admin you also have a user account, the email address
20 attached to the user account needs to be different.
22 attached to the user account needs to be different.
21
23
22 LDAP Configuration Steps
24 LDAP Configuration Steps
23 ^^^^^^^^^^^^^^^^^^^^^^^^
25 ^^^^^^^^^^^^^^^^^^^^^^^^
24
26
25 To configure |LDAP|, use the following steps:
27 To configure |LDAP|, use the following steps:
26
28
27 1. From the |RCM| interface, select
29 1. From the |RCM| interface, select
28 :menuselection:`Admin --> Authentication`
30 :menuselection:`Admin --> Authentication`
29 2. Enable the required plugin and select :guilabel:`Save`
31 2. Enable the required plugin and select :guilabel:`Save`
30 3. Select the :guilabel:`Enabled` check box in the plugin configuration section
32 3. Select the :guilabel:`Enabled` check box in the plugin configuration section
31 4. Add the required LDAP information and :guilabel:`Save`, for more details,
33 4. Add the required LDAP information and :guilabel:`Save`, for more details,
32 see :ref:`config-ldap-examples`
34 see :ref:`config-ldap-examples`
33
35
34 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
36 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
35
37
36 .. _config-ldap-examples:
38 .. _config-ldap-examples:
37
39
38 Example LDAP configuration
40 Example LDAP configuration
39 ^^^^^^^^^^^^^^^^^^^^^^^^^^
41 ^^^^^^^^^^^^^^^^^^^^^^^^^^
40 .. code-block:: bash
42 .. code-block:: bash
41
43
42 # Auth Cache TTL
44 # Auth Cache TTL
43 3600
45 3600
44 # Host
46 # Host
45 https://ldap1.server.com/ldap-admin/,https://ldap2.server.com/ldap-admin/
47 https://ldap1.server.com/ldap-admin/,https://ldap2.server.com/ldap-admin/
46 # Port
48 # Port
47 389
49 389
48 # Account
50 # Account
49 cn=admin,dc=rhodecode,dc=com
51 cn=admin,dc=rhodecode,dc=com
50 # Password
52 # Password
51 ldap-user-password
53 ldap-user-password
52 # LDAP connection security
54 # LDAP connection security
53 LDAPS
55 LDAPS
54 # Certificate checks level
56 # Certificate checks level
55 DEMAND
57 DEMAND
56 # Base DN
58 # Base DN
57 cn=Rufus Magillacuddy,ou=users,dc=rhodecode,dc=com
59 cn=Rufus Magillacuddy,ou=users,dc=rhodecode,dc=com
58 # User Search Base
60 # User Search Base
59 ou=groups,ou=users
61 ou=groups,ou=users
60 # LDAP search filter
62 # LDAP search filter
61 (objectClass=person)
63 (objectClass=person)
62 # LDAP search scope
64 # LDAP search scope
63 SUBTREE
65 SUBTREE
64 # Login attribute
66 # Login attribute
65 rmagillacuddy
67 rmagillacuddy
66 # First Name Attribute
68 # First Name Attribute
67 Rufus
69 Rufus
68 # Last Name Attribute
70 # Last Name Attribute
69 Magillacuddy
71 Magillacuddy
70 # Email Attribute
72 # Email Attribute
71 LDAP-Registered@email.ac
73 LDAP-Registered@email.ac
72 # User Member of Attribute
74 # User Member of Attribute
73 Organizational Role
75 Organizational Role
74 # Group search base
76 # Group search base
75 cn=users,ou=groups,dc=rhodecode,dc=com
77 cn=users,ou=groups,dc=rhodecode,dc=com
76 # LDAP Group Search Filter
78 # LDAP Group Search Filter
77 (objectclass=posixGroup)
79 (objectclass=posixGroup)
78 # Group Name Attribute
80 # Group Name Attribute
79 users
81 users
80 # Group Member Of Attribute
82 # Group Member Of Attribute
81 cn
83 cn
82 # Admin Groups
84 # Admin Groups
83 admin,devops,qa
85 admin,devops,qa
84
86
85 .. toctree::
87 .. toctree::
86
88
87 ldap-active-directory
89 ldap-active-directory
88 ldap-authentication
90 ldap-authentication
@@ -1,129 +1,138 b''
1 .. _ssh-connection:
1 .. _ssh-connection:
2
2
3 SSH Connection
3 SSH Connection
4 --------------
4 --------------
5
5
6 If you wish to connect to your Git or Mercurial |repos| using SSH, use the
6 If you wish to connect to your |repos| using SSH protocol, use the
7 following instructions.
7 following instructions.
8
8
9 .. note::
9 1. Include |RCE| generated `authorized_keys` file into your sshd_config.
10
11 SSH access with full |RCE| permissions will require an Admin |authtoken|.
12
13 You need to install the |RC| SSH tool on the server which is running
14 the |RCE| instance.
15
16 1. Gather the following information about the instance you wish to connect to:
17
10
18 * *Hostname*: Use the ``rccontrol status`` command to view instance details.
11 By default a file `authorized_keys_rhodecode` is created containing
19 * *API key*: From the |RCE|, go to
12 configuration and all allowed user connection keys are stored inside.
20 :menuselection:`username --> My Account --> Auth Tokens`
13 On each change of stored keys inside |RCE| this file is updated with
21 * *Configuration file*: Identify the configuration file for that instance,
14 proper data.
22 the default is :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
23 * Identify which |git| and |hg| packages your |RCM| instance is using.
24
15
25 * For |git|, see
16 .. code-block:: bash
26 :menuselection:`Admin --> Settings --> System Info`
27 * For |hg|, use the ``which hg`` command.
28
29 2. Clone the |RC| SSH script,
30 ``hg clone https://code.rhodecode.com/rhodecode-ssh``
31 3. Copy the ``sshwrapper.sample.ini``, and save it as ``sshwrapper.ini``
32 4. Configure the :file:`sshwrapper.ini` file using the following example:
33
34 .. code-block:: ini
35
17
36 [api]
18 # Edit sshd_config file most likely at /etc/ssh/sshd_config
37 host=http://localhost:10005
19 # add or edit the AuthorizedKeysFile, and set to use custom files
38 key=24a67076d69c84670132f55166ac79d1faafd660
39
20
40 [shell]
21 AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
41 shell=/bin/bash -l
42
43 [vcs]
44 root=/path/to/repos/
45
46 [rhodecode]
47 config=/home/user/.rccontrol/enterprise-3/rhodecode.ini
48
22
49 [vcs:hg]
23 This way we use a separate file for SSH access and separate one for
50 path=/usr/bin/hg
24 SSH access to |RCE| repositories.
51
25
52 # should be a base dir for all git binaries, i.e. not ../bin/git
53 [vcs:git]
54 path=/usr/bin
55
26
56 [keys]
27 2. Enable the SSH module on instance.
57 path=/home/user/.ssh/authorized_keys
58
28
59 5. Add the public key to your |RCE| instance server using the
29 On the server where |RCE| is running executing:
60 :file:`addkey.py` script. This script automatically creates
61 the :file:`authorized_keys` file which was specified in your
62 :file:`sshwrapper.ini` configuration. Use the following example:
63
30
64 .. code-block:: bash
31 .. code-block:: bash
65
32
66 $ ./addkey.py --user username --shell --key /home/username/.ssh/id_rsa.pub
33 rccontrol enable-module ssh {instance-id}
34
35 This will add the following configuration into :file:`rhodecode.ini`.
36 This also can be done manually:
37
38 .. code-block:: ini
39
40 ############################################################
41 ### SSH Support Settings ###
42 ############################################################
43
44 ## Defines if a custom authorized_keys file should be created and written on
45 ## any change user ssh keys. Setting this to false also disables posibility
46 ## of adding SSH keys by users from web interface. Super admins can still
47 ## manage SSH Keys.
48 ssh.generate_authorized_keyfile = true
49
50 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
51 # ssh.authorized_keys_ssh_opts =
67
52
68 .. important::
53 ## Path to the authrozied_keys file where the generate entries are placed.
54 ## It is possible to have multiple key files specified in `sshd_config` e.g.
55 ## AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
56 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
57
58 ## Command to execute the SSH wrapper. The binary is available in the
59 ## rhodecode installation directory.
60 ## e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
61 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
62
63 ## Allow shell when executing the ssh-wrapper command
64 ssh.wrapper_cmd_allow_shell = false
65
66 ## Enables logging, and detailed output send back to the client during SSH
67 ## operations. Usefull for debugging, shouldn't be used in production.
68 ssh.enable_debug_logging = false
69
70 ## Paths to binary executable, by default they are the names, but we can
71 ## override them if we want to use a custom one
72 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
73 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
74 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
69
75
70 To give SSH access to all users, you will need to maintain
76
71 each users |authtoken| in the :file:`authorized_keys` file.
77 3. Set base_url for instance to enable proper event handling (Optional):
78
79 If you wish to have integrations working correctly via SSH please configure
80 The Application base_url.
81
82 Use the ``rccontrol status`` command to view instance details.
83 Hostname is required for the integration to properly set the instance URL.
84
85 When your hostname is known (e.g https://code.rhodecode.com) please set it
86 inside :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
87
88 add into `[app:main]` section the following configuration:
89
90 .. code-block:: ini
91
92 app.base_url = https://code.rhodecode.com
93
72
94
73 6. Connect to your server using SSH from your local machine.
95 4. Add the public key to your user account for testing.
96 First generate a new key, or use your existing one and have your public key
97 at hand.
98
99 Go to
100 :menuselection:`My Account --> SSH Keys` and add the public key with proper description.
101
102 This will generate a new entry inside our configured `authorized_keys_rhodecode` file.
103
104 Test the connection from your local machine using the following example:
105
106 .. note::
107
108 In case of connection problems please set
109 `ssh.enable_debug_logging = true` inside the SSH configuration of
110 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
111 Then add, remove your SSH key and try connecting again.
112 Debug logging will be printed to help find the problems on the server side.
113
114 Test connection using the ssh command from the local machine
115
116
117 For SVN:
74
118
75 .. code-block:: bash
119 .. code-block:: bash
76
120
77 $ ssh user@localhost
121 SVN_SSH="ssh -i ~/.ssh/id_rsa_test_ssh" svn checkout svn+ssh://rhodecode@rc-server/repo_name
78 Enter passphrase for key '/home/username/.ssh/id_rsa':
79
80 If you need to manually configure the ``authorized_keys`` file,
81 add a line for each key using the following example:
82
83 .. code-block:: vim
84
85 command="/home/user/.rhodecode-ssh/sshwrapper.py --user username --shell",
86 no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-rsa yourpublickey
87
122
88 .. tip::
123 For GIT:
89
90 Best practice would be to create a special SSH user account with each
91 users |authtoken| attached.
92
93 |RCE| will manage the user permissions based on the |authtoken| supplied.
94 This would allow you to immediately revoke all SSH access by removing one
95 user from your server if you needed to.
96
97 See the following command line example of setting this up. These steps
98 take place on the server.
99
124
100 .. code-block:: bash
125 .. code-block:: bash
101
126
102 # On the RhodeCode Enterprise server
127 GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_test_ssh' git clone ssh://rhodecode@rc-server/repo_name
103 # set up user and clone SSH tool
104 $ sudo adduser testuser
105 $ sudo su - testuser
106 $ hg clone https://code.rhodecode.com/rhodecode-ssh
107 $ cd rhodecode-ssh
108
109 # Copy and modify the sshwrapper.ini as explained in step 4
110 $ cp sshwrapper.sample.ini sshwrapper.ini
111
128
112 $ cd ~
129 For Mercurial:
113 $ mkdir .ssh
114 $ touch .ssh/authorized_keys
115
116 # copy your ssh public key, id_rsa.pub, from your local machine
117 # to the server. We’ll use it in the next step
118
119 $ python addkey.py --user testuser --shell --key /path/to/id_rsa.pub
120
121 # Note: testssh - user on the rhodecode instance
122 $ chmod 755 sshwrapper.py
123
124 Test the connection from your local machine using the following example:
125
130
126 .. code-block:: bash
131 .. code-block:: bash
127
132
128 # Test connection using the ssh command from the local machine
133 Add to hgrc:
129 $ ssh testuser@my-server.example.com
134
135 [ui]
136 ssh = ssh -C -i ~/.ssh/id_rsa_test_ssh
137
138 hg clone ssh://rhodecode@rc-server/repo_name
@@ -1,60 +1,58 b''
1
1
2 ===================
2 ===================
3 CONTRIBUTING TO API
3 CONTRIBUTING TO API
4 ===================
4 ===================
5
5
6
6
7
7
8 Naming conventions
8 Naming conventions
9 ==================
9 ==================
10
10
11 We keep the calls in the form ``{verb}_{noun}``.
11 We keep the calls in the form ``{verb}_{noun}``.
12
12
13
13
14
14
15 Change and Deprecation
15 Change and Deprecation
16 ======================
16 ======================
17
17
18 API deprecation is documented in the section :ref:`deprecated` together with
18 API deprecation is documented in the section `deprecated` together with
19 other notes about deprecated parts of the application.
19 other notes about deprecated parts of the application.
20
20
21
21
22 Deprecated API calls
22 Deprecated API calls
23 --------------------
23 --------------------
24
24
25 - Make sure to add them into the section :ref:`deprecated`.
26
27 - Use `deprecated` inside of the call docstring to make our users aware of the
25 - Use `deprecated` inside of the call docstring to make our users aware of the
28 deprecation::
26 deprecation::
29
27
30 .. deprecated:: 1.2.3
28 .. deprecated:: 1.2.3
31
29
32 Use `new_call_name` instead to fetch this information.
30 Use `new_call_name` instead to fetch this information.
33
31
34 - Make sure to log on level `logging.WARNING` a message that the API call or
32 - Make sure to log on level `logging.WARNING` a message that the API call or
35 specific parameters are deprecated.
33 specific parameters are deprecated.
36
34
37 - If possible return deprecation information inside of the result from the API
35 - If possible return deprecation information inside of the result from the API
38 call. Use the attribute `_warning_` to contain a message.
36 call. Use the attribute `_warning_` to contain a message.
39
37
40
38
41 Changed API calls
39 Changed API calls
42 -----------------
40 -----------------
43
41
44 - If the change is significant, consider to use `versionchanged` in the
42 - If the change is significant, consider to use `versionchanged` in the
45 docstring::
43 docstring::
46
44
47 .. versionchanged:: 1.2.3
45 .. versionchanged:: 1.2.3
48
46
49 Optional explanation if reasonable.
47 Optional explanation if reasonable.
50
48
51
49
52 Added API calls
50 Added API calls
53 ---------------
51 ---------------
54
52
55 - Use `versionadded` to document since which version this API call is
53 - Use `versionadded` to document since which version this API call is
56 available::
54 available::
57
55
58 .. versionadded:: 1.2.3
56 .. versionadded:: 1.2.3
59
57
60 Optional explanation if reasonable.
58 Optional explanation if reasonable.
@@ -1,71 +1,73 b''
1
1
2 .. _config-celery:
2 .. _config-celery:
3
3
4 Install Celery
4 Configure Celery
5 --------------
5 ----------------
6
6
7 To improve |RCM| performance you should install Celery_ as it makes
7 To improve |RCM| performance you should configure and enabled Celery_ as it makes
8 asynchronous tasks work efficiently. If you
8 asynchronous tasks work efficiently. Most important it allows sending notification
9 install Celery you also need multi-broker support. The recommended message
9 emails, create repository forks, and import repositories in async way.
10 broker is rabbitmq_. |RCM| works in sync
10
11 mode, but running Celery_ will give you a large speed improvement when
11 If you decide to use Celery you also need a working message queue.
12 managing many big repositories.
12 The recommended message broker is rabbitmq_.
13
14
15 In order to have install and configure Celery, follow these steps:
13
16
14 If you want to run |RCM| with Celery you need to run ``celeryd`` using the
17 1. Install RabbitMQ, see the documentation on the Celery website for
15 ``paster`` command and the message broker.
18 `rabbitmq installation`_.
16 The ``paster`` command is already installed during |RCM| installation.
17
19
18 To install and configure Celery, use the following steps:
20 2. Configure Celery in the
21 :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
22 Set the following minimal settings, that are set during rabbitmq_ installation::
19
23
20 1. Install Celery and RabbitMQ, see the documentation on the Celery website for
24 broker.host =
21 `Celery installation`_ and `rabbitmq installation`_.
25 broker.vhost =
22 2. Enable Celery in the
26 broker.user =
23 :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
27 broker.password =
24 3. Run the Celery daemon with the ``paster`` command,
28
25 using the following example
29 Full configuration example is below:
26 ``.rccontrol/enterprise-1/profile/bin/paster celeryd .rccontrol/enterprise-1/rhodecode.ini``
27
30
28 .. code-block:: ini
31 .. code-block:: ini
29
32
30 # Set this section of the ini file to match your Celery installation
33 # Set this section of the ini file to match your Celery installation
31 ####################################
34 ####################################
32 ### CELERY CONFIG ####
35 ### CELERY CONFIG ####
33 ####################################
36 ####################################
34 ## Set to true
37 ## Set to true
35 use_celery = false
38 use_celery = true
36 broker.host = localhost
39 broker.host = localhost
37 broker.vhost = rabbitmqhost
40 broker.vhost = rabbitmqvhost
38 broker.port = 5672
41 broker.port = 5672
39 broker.user = rabbitmq
42 broker.user = rabbitmq
40 broker.password = qweqwe
43 broker.password = secret
41
44
42 celery.imports = rhodecode.lib.celerylib.tasks
45 celery.imports = rhodecode.lib.celerylib.tasks
43
46
44 celery.result.backend = amqp
47 celery.result.backend = amqp
45 celery.result.dburi = amqp://
48 celery.result.dburi = amqp://
46 celery.result.serialier = json
49 celery.result.serialier = json
47
50
48 #celery.send.task.error.emails = true
51 #celery.send.task.error.emails = true
49 #celery.amqp.task.result.expires = 18000
52 #celery.amqp.task.result.expires = 18000
50
53
51 celeryd.concurrency = 2
54 celeryd.concurrency = 2
52 #celeryd.log.file = celeryd.log
55 #celeryd.log.file = celeryd.log
53 celeryd.log.level = debug
56 celeryd.log.level = debug
54 celeryd.max.tasks.per.child = 1
57 celeryd.max.tasks.per.child = 1
55
58
56 ## tasks will never be sent to the queue, but executed locally instead.
59 ## tasks will never be sent to the queue, but executed locally instead.
57 celery.always.eager = false
60 celery.always.eager = false
58
61
59 .. code-block:: bash
62
63 3. Enable celery, and install `celeryd` process script using the `enable-module`::
60
64
61 # Once the above is configured and saved
65 rccontrol enable-module celery {instance-id}
62 # Run celery with the paster command and specify the ini file
66
63 .rccontrol/enterprise-1/profile/bin/paster celeryd .rccontrol/enterprise-1/rhodecode.ini
64
67
65 .. _python: http://www.python.org/
68 .. _python: http://www.python.org/
66 .. _mercurial: http://mercurial.selenic.com/
69 .. _mercurial: http://mercurial.selenic.com/
67 .. _celery: http://celeryproject.org/
70 .. _celery: http://celeryproject.org/
68 .. _rabbitmq: http://www.rabbitmq.com/
71 .. _rabbitmq: http://www.rabbitmq.com/
69 .. _rabbitmq installation: http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html
72 .. _rabbitmq installation: http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html
70 .. _Celery installation: http://docs.celeryproject.org/en/latest/getting-started/introduction.html#bundles
73 .. _Celery installation: http://docs.celeryproject.org/en/latest/getting-started/introduction.html#bundles
71 .. _virtualenv: http://docs.python-guide.org/en/latest/dev/virtualenvs/
@@ -1,14 +1,14 b''
1 .. _rhodecode-post-instal-ref:
1 .. _rhodecode-post-instal-ref:
2
2
3 Post Installation Tasks
3 Post Installation Tasks
4 =======================
4 =======================
5
5
6 The following tasks are the most common post installation requirements. Use
6 The following tasks are the most common post installation requirements. Use
7 the information in these sections to configure your instance of |RCM|.
7 the information in these sections to configure your instance of |RCM|.
8
8
9 .. toctree::
9 .. toctree::
10
10
11 setup-email
11 setup-email
12 database-string
12 database-string
13 install-celery
13 configure-celery
14 migrate-repos
14 migrate-repos
@@ -1,100 +1,101 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.10.0.rst
12 release-notes-4.9.1.rst
13 release-notes-4.9.1.rst
13 release-notes-4.9.0.rst
14 release-notes-4.9.0.rst
14 release-notes-4.8.0.rst
15 release-notes-4.8.0.rst
15 release-notes-4.7.2.rst
16 release-notes-4.7.2.rst
16 release-notes-4.7.1.rst
17 release-notes-4.7.1.rst
17 release-notes-4.7.0.rst
18 release-notes-4.7.0.rst
18 release-notes-4.6.1.rst
19 release-notes-4.6.1.rst
19 release-notes-4.6.0.rst
20 release-notes-4.6.0.rst
20 release-notes-4.5.2.rst
21 release-notes-4.5.2.rst
21 release-notes-4.5.1.rst
22 release-notes-4.5.1.rst
22 release-notes-4.5.0.rst
23 release-notes-4.5.0.rst
23 release-notes-4.4.2.rst
24 release-notes-4.4.2.rst
24 release-notes-4.4.1.rst
25 release-notes-4.4.1.rst
25 release-notes-4.4.0.rst
26 release-notes-4.4.0.rst
26 release-notes-4.3.1.rst
27 release-notes-4.3.1.rst
27 release-notes-4.3.0.rst
28 release-notes-4.3.0.rst
28 release-notes-4.2.1.rst
29 release-notes-4.2.1.rst
29 release-notes-4.2.0.rst
30 release-notes-4.2.0.rst
30 release-notes-4.1.2.rst
31 release-notes-4.1.2.rst
31 release-notes-4.1.1.rst
32 release-notes-4.1.1.rst
32 release-notes-4.1.0.rst
33 release-notes-4.1.0.rst
33 release-notes-4.0.1.rst
34 release-notes-4.0.1.rst
34 release-notes-4.0.0.rst
35 release-notes-4.0.0.rst
35
36
36 |RCE| 3.x Versions
37 |RCE| 3.x Versions
37 ------------------
38 ------------------
38
39
39 .. toctree::
40 .. toctree::
40 :maxdepth: 1
41 :maxdepth: 1
41
42
42 release-notes-3.8.4.rst
43 release-notes-3.8.4.rst
43 release-notes-3.8.3.rst
44 release-notes-3.8.3.rst
44 release-notes-3.8.2.rst
45 release-notes-3.8.2.rst
45 release-notes-3.8.1.rst
46 release-notes-3.8.1.rst
46 release-notes-3.8.0.rst
47 release-notes-3.8.0.rst
47 release-notes-3.7.1.rst
48 release-notes-3.7.1.rst
48 release-notes-3.7.0.rst
49 release-notes-3.7.0.rst
49 release-notes-3.6.1.rst
50 release-notes-3.6.1.rst
50 release-notes-3.6.0.rst
51 release-notes-3.6.0.rst
51 release-notes-3.5.2.rst
52 release-notes-3.5.2.rst
52 release-notes-3.5.1.rst
53 release-notes-3.5.1.rst
53 release-notes-3.5.0.rst
54 release-notes-3.5.0.rst
54 release-notes-3.4.1.rst
55 release-notes-3.4.1.rst
55 release-notes-3.4.0.rst
56 release-notes-3.4.0.rst
56 release-notes-3.3.4.rst
57 release-notes-3.3.4.rst
57 release-notes-3.3.3.rst
58 release-notes-3.3.3.rst
58 release-notes-3.3.2.rst
59 release-notes-3.3.2.rst
59 release-notes-3.3.1.rst
60 release-notes-3.3.1.rst
60 release-notes-3.3.0.rst
61 release-notes-3.3.0.rst
61 release-notes-3.2.3.rst
62 release-notes-3.2.3.rst
62 release-notes-3.2.2.rst
63 release-notes-3.2.2.rst
63 release-notes-3.2.1.rst
64 release-notes-3.2.1.rst
64 release-notes-3.2.0.rst
65 release-notes-3.2.0.rst
65 release-notes-3.1.1.rst
66 release-notes-3.1.1.rst
66 release-notes-3.1.0.rst
67 release-notes-3.1.0.rst
67 release-notes-3.0.2.rst
68 release-notes-3.0.2.rst
68 release-notes-3.0.1.rst
69 release-notes-3.0.1.rst
69 release-notes-3.0.0.rst
70 release-notes-3.0.0.rst
70
71
71 |RCE| 2.x Versions
72 |RCE| 2.x Versions
72 ------------------
73 ------------------
73
74
74 .. toctree::
75 .. toctree::
75 :maxdepth: 1
76 :maxdepth: 1
76
77
77 release-notes-2.2.8.rst
78 release-notes-2.2.8.rst
78 release-notes-2.2.7.rst
79 release-notes-2.2.7.rst
79 release-notes-2.2.6.rst
80 release-notes-2.2.6.rst
80 release-notes-2.2.5.rst
81 release-notes-2.2.5.rst
81 release-notes-2.2.4.rst
82 release-notes-2.2.4.rst
82 release-notes-2.2.3.rst
83 release-notes-2.2.3.rst
83 release-notes-2.2.2.rst
84 release-notes-2.2.2.rst
84 release-notes-2.2.1.rst
85 release-notes-2.2.1.rst
85 release-notes-2.2.0.rst
86 release-notes-2.2.0.rst
86 release-notes-2.1.0.rst
87 release-notes-2.1.0.rst
87 release-notes-2.0.2.rst
88 release-notes-2.0.2.rst
88 release-notes-2.0.1.rst
89 release-notes-2.0.1.rst
89 release-notes-2.0.0.rst
90 release-notes-2.0.0.rst
90
91
91 |RCE| 1.x Versions
92 |RCE| 1.x Versions
92 ------------------
93 ------------------
93
94
94 .. toctree::
95 .. toctree::
95 :maxdepth: 1
96 :maxdepth: 1
96
97
97 release-notes-1.7.2.rst
98 release-notes-1.7.2.rst
98 release-notes-1.7.1.rst
99 release-notes-1.7.1.rst
99 release-notes-1.7.0.rst
100 release-notes-1.7.0.rst
100 release-notes-1.6.0.rst
101 release-notes-1.6.0.rst
@@ -1,85 +1,85 b''
1 .. _install-tools:
1 .. _install-tools:
2
2
3 |RCT| Installation
3 |RCT| Installation
4 ------------------
4 ------------------
5
5
6 As of |RCE| 3.4.1 |RCT| is installed automatically on the server with |RCE|. You
6 As of |RCE| 3.4.1 |RCT| is installed automatically on the server with |RCE|. You
7 do not need to install |RCT| on the server, but you will need to install them
7 do not need to install |RCT| on the server, but you will need to install them
8 on machines that need remote access. The tools are linked to the instance
8 on machines that need remote access. The tools are linked to the instance
9 folder, for example :file:`~/.rccontrol/{instance-id}/profile/bin`
9 folder, for example :file:`~/.rccontrol/{instance-id}/profile/bin`
10
10
11 You can list the available tools using the following example, and the valid
11 You can list the available tools using the following example, and the valid
12 tools options are those which correspond with those in the :ref:`rc-tools`
12 tools options are those which correspond with those in the :ref:`rc-tools`
13 section.
13 section.
14
14
15 .. code-block:: bash
15 .. code-block:: bash
16
16
17 $ ls ~/.rccontrol/enterprise-4/profile/bin/
17 $ ls ~/.rccontrol/enterprise-4/profile/bin/
18
18
19 gen_js_i18n rhodecode-cleanup-gists rhodecode-tools svnrdump
19 gen_js_i18n rhodecode-cleanup-gists rhodecode-tools svnrdump
20 gen_js_routes rhodecode-cleanup-repos supervisorctl svnserve
20 gen_js_routes rhodecode-cleanup-repos supervisorctl svnserve
21 git rhodecode-config supervisord svnsync
21 git rhodecode-config supervisord svnsync
22 gunicorn rhodecode-extensions svn svnversion
22 gunicorn rhodecode-extensions svn svnversion
23 hg rhodecode-gist svnadmin vcsserver
23 hg rhodecode-gist svnadmin vcsserver
24 paster rhodecode-index svndumpfilter
24 paster rhodecode-index svndumpfilter
25 rcserver rhodecode-list-instances svnlook
25 rc-server rhodecode-list-instances svnlook
26 rhodecode-api rhodecode-setup-config svnmucc
26 rhodecode-api rhodecode-setup-config svnmucc
27
27
28 You can then use the tools as described in the :ref:`rc-tools` section using the
28 You can then use the tools as described in the :ref:`rc-tools` section using the
29 following example:
29 following example:
30
30
31 .. code-block:: bash
31 .. code-block:: bash
32
32
33 # Running the indexer
33 # Running the indexer
34 $ ~/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
34 $ ~/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
35 --instance-name=enterprise-1
35 --instance-name=enterprise-1
36
36
37 # Cleaning up gists
37 # Cleaning up gists
38 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-cleanup-gists \
38 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-cleanup-gists \
39 --instance-name=enterprise-4
39 --instance-name=enterprise-4
40
40
41 Scanning for gists in /home/brian/repos/.rc_gist_store...
41 Scanning for gists in /home/brian/repos/.rc_gist_store...
42 preparing to remove [1] found gists
42 preparing to remove [1] found gists
43
43
44 Installing |RCT|
44 Installing |RCT|
45 ^^^^^^^^^^^^^^^^
45 ^^^^^^^^^^^^^^^^
46
46
47 |RCT| enable you to automate many of the most common |RCM| functions through
47 |RCT| enable you to automate many of the most common |RCM| functions through
48 the API. Installing them on a local machine lets you carry out maintenance on
48 the API. Installing them on a local machine lets you carry out maintenance on
49 the server remotely. Once installed you can use them to index your |repos|
49 the server remotely. Once installed you can use them to index your |repos|
50 to setup full-text search, strip commits, or install |RC| Extensions for
50 to setup full-text search, strip commits, or install |RC| Extensions for
51 additional functionality.
51 additional functionality.
52
52
53 For more detailed instructions about using |RCT| for indexing and full-text
53 For more detailed instructions about using |RCT| for indexing and full-text
54 search, see :ref:`indexing-ref`
54 search, see :ref:`indexing-ref`
55
55
56 To install |RCT|, use the following steps:
56 To install |RCT|, use the following steps:
57
57
58 1. Set up a ``virtualenv`` on your local machine, see virtualenv_ instructions
58 1. Set up a ``virtualenv`` on your local machine, see virtualenv_ instructions
59 here.
59 here.
60 2. Install |RCT| using pip. Full url with token is available at https://rhodecode.com/u/#rhodecode-tools
60 2. Install |RCT| using pip. Full url with token is available at https://rhodecode.com/u/#rhodecode-tools
61 ``pip install -I https://dls.rhodecode.com/dls/<token>/rhodecode-tools/latest``
61 ``pip install -I https://dls.rhodecode.com/dls/<token>/rhodecode-tools/latest``
62
62
63
63
64 Once |RCT| is installed using these steps there are a few extra
64 Once |RCT| is installed using these steps there are a few extra
65 configuration changes you can make. These are explained in more detail in the
65 configuration changes you can make. These are explained in more detail in the
66 :ref:`indexing-ref` section, and the :ref:`rc-tools` section.
66 :ref:`indexing-ref` section, and the :ref:`rc-tools` section.
67
67
68 .. code-block:: bash
68 .. code-block:: bash
69
69
70 # Create a virtualenv
70 # Create a virtualenv
71 brian@ubuntu:~$ virtualenv venv
71 brian@ubuntu:~$ virtualenv venv
72 New python executable in venv/bin/python
72 New python executable in venv/bin/python
73 Installing setuptools, pip...done.
73 Installing setuptools, pip...done.
74
74
75 # Activate the virtualenv
75 # Activate the virtualenv
76 brian@ubuntu:~$ . venv/bin/activate
76 brian@ubuntu:~$ . venv/bin/activate
77
77
78 # Install RhodeCode Tools inside the virtualenv, full url with token is available at https://rhodecode.com/u/#rhodecode-tools
78 # Install RhodeCode Tools inside the virtualenv, full url with token is available at https://rhodecode.com/u/#rhodecode-tools
79 $ pip install -I https://dls.rhodecode.com/dls/<token>/rhodecode-tools/latest
79 $ pip install -I https://dls.rhodecode.com/dls/<token>/rhodecode-tools/latest
80
80
81 # Check the installation
81 # Check the installation
82 $ rhodecode-tools --help
82 $ rhodecode-tools --help
83
83
84 .. _virtualenv: https://virtualenv.pypa.io/en/latest/index.html
84 .. _virtualenv: https://virtualenv.pypa.io/en/latest/index.html
85
85
@@ -1,191 +1,194 b''
1 {
1 {
2 "dirs": {
2 "dirs": {
3 "css": {
3 "css": {
4 "src":"rhodecode/public/css",
4 "src":"rhodecode/public/css",
5 "dest":"rhodecode/public/css"
5 "dest":"rhodecode/public/css"
6 },
6 },
7 "js": {
7 "js": {
8 "src": "rhodecode/public/js/src",
8 "src": "rhodecode/public/js/src",
9 "src_rc": "rhodecode/public/js/rhodecode",
9 "dest": "rhodecode/public/js",
10 "dest": "rhodecode/public/js",
10 "bower": "bower_components",
11 "bower": "bower_components",
11 "node_modules": "node_modules"
12 "node_modules": "node_modules"
12 }
13 }
13 },
14 },
14 "copy": {
15 "copy": {
15 "main": {
16 "main": {
16 "expand": true,
17 "expand": true,
17 "cwd": "bower_components",
18 "cwd": "bower_components",
18 "src": "webcomponentsjs/webcomponents-lite.js",
19 "src": "webcomponentsjs/webcomponents-lite.js",
19 "dest": "<%= dirs.js.dest %>/vendors"
20 "dest": "<%= dirs.js.dest %>/vendors"
20 }
21 }
21 },
22 },
22 "concat": {
23 "concat": {
23 "polymercss": {
24 "polymercss": {
24 "src": [
25 "src": [
25 "<%= dirs.js.src %>/components/root-styles-prefix.html",
26 "<%= dirs.js.src %>/components/root-styles-prefix.html",
26 "<%= dirs.css.src %>/style-polymer.css",
27 "<%= dirs.css.src %>/style-polymer.css",
27 "<%= dirs.js.src %>/components/root-styles-suffix.html"
28 "<%= dirs.js.src %>/components/root-styles-suffix.html"
28 ],
29 ],
29 "dest": "<%= dirs.js.dest %>/src/components/root-styles.gen.html",
30 "dest": "<%= dirs.js.dest %>/src/components/root-styles.gen.html",
30 "nonull": true
31 "nonull": true
31 },
32 },
32 "dist": {
33 "dist": {
33 "src": [
34 "src": [
34 "<%= dirs.js.src %>/jquery-1.11.1.min.js",
35 "<%= dirs.js.node_modules %>/jquery/dist/jquery.min.js",
36 "<%= dirs.js.node_modules %>/mousetrap/mousetrap.min.js",
37 "<%= dirs.js.node_modules %>/moment/min/moment.min.js",
38 "<%= dirs.js.node_modules %>/clipboard/dist/clipboard.min.js",
39 "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js",
40 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
35 "<%= dirs.js.src %>/logging.js",
41 "<%= dirs.js.src %>/logging.js",
36 "<%= dirs.js.src %>/bootstrap.js",
42 "<%= dirs.js.src %>/bootstrap.js",
37 "<%= dirs.js.src %>/mousetrap.js",
38 "<%= dirs.js.src %>/moment.js",
39 "<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
40 "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js",
41 "<%= dirs.js.src %>/i18n_utils.js",
43 "<%= dirs.js.src %>/i18n_utils.js",
42 "<%= dirs.js.src %>/deform.js",
44 "<%= dirs.js.src %>/deform.js",
43 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
45 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
44 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
46 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
45 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
47 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
46 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
48 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
47 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
49 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
48 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
50 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
49 "<%= dirs.js.src %>/plugins/jquery.mark.js",
51 "<%= dirs.js.src %>/plugins/jquery.mark.js",
50 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
52 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
51 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
53 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
52 "<%= dirs.js.src %>/select2/select2.js",
54 "<%= dirs.js.src %>/select2/select2.js",
53 "<%= dirs.js.src %>/codemirror/codemirror.js",
55 "<%= dirs.js.src %>/codemirror/codemirror.js",
54 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
56 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
55 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
57 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
56 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
58 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
57 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
59 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
60 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
58 "<%= dirs.js.dest %>/mode/meta.js",
61 "<%= dirs.js.dest %>/mode/meta.js",
59 "<%= dirs.js.dest %>/mode/meta_ext.js",
62 "<%= dirs.js.dest %>/mode/meta_ext.js",
60 "<%= dirs.js.dest %>/rhodecode/i18n/select2/translations.js",
63 "<%= dirs.js.src_rc %>/i18n/select2/translations.js",
61 "<%= dirs.js.src %>/rhodecode/utils/array.js",
64 "<%= dirs.js.src %>/rhodecode/utils/array.js",
62 "<%= dirs.js.src %>/rhodecode/utils/string.js",
65 "<%= dirs.js.src %>/rhodecode/utils/string.js",
63 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
66 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
64 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
67 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
65 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
68 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
66 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
69 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
67 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
70 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
68 "<%= dirs.js.src %>/rhodecode/utils/os.js",
71 "<%= dirs.js.src %>/rhodecode/utils/os.js",
69 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
72 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
70 "<%= dirs.js.src %>/rhodecode/init.js",
73 "<%= dirs.js.src %>/rhodecode/init.js",
71 "<%= dirs.js.src %>/rhodecode/changelog.js",
74 "<%= dirs.js.src %>/rhodecode/changelog.js",
72 "<%= dirs.js.src %>/rhodecode/codemirror.js",
75 "<%= dirs.js.src %>/rhodecode/codemirror.js",
73 "<%= dirs.js.src %>/rhodecode/comments.js",
76 "<%= dirs.js.src %>/rhodecode/comments.js",
74 "<%= dirs.js.src %>/rhodecode/constants.js",
77 "<%= dirs.js.src %>/rhodecode/constants.js",
75 "<%= dirs.js.src %>/rhodecode/files.js",
78 "<%= dirs.js.src %>/rhodecode/files.js",
76 "<%= dirs.js.src %>/rhodecode/followers.js",
79 "<%= dirs.js.src %>/rhodecode/followers.js",
77 "<%= dirs.js.src %>/rhodecode/menus.js",
80 "<%= dirs.js.src %>/rhodecode/menus.js",
78 "<%= dirs.js.src %>/rhodecode/notifications.js",
81 "<%= dirs.js.src %>/rhodecode/notifications.js",
79 "<%= dirs.js.src %>/rhodecode/permissions.js",
82 "<%= dirs.js.src %>/rhodecode/permissions.js",
80 "<%= dirs.js.src %>/rhodecode/pjax.js",
83 "<%= dirs.js.src %>/rhodecode/pjax.js",
81 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
84 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
82 "<%= dirs.js.src %>/rhodecode/settings.js",
85 "<%= dirs.js.src %>/rhodecode/settings.js",
83 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
86 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
84 "<%= dirs.js.src %>/rhodecode/tooltips.js",
87 "<%= dirs.js.src %>/rhodecode/tooltips.js",
85 "<%= dirs.js.src %>/rhodecode/users.js",
88 "<%= dirs.js.src %>/rhodecode/users.js",
86 "<%= dirs.js.src %>/rhodecode/appenlight.js",
89 "<%= dirs.js.src %>/rhodecode/appenlight.js",
87 "<%= dirs.js.src %>/rhodecode.js"
90 "<%= dirs.js.src %>/rhodecode.js"
88 ],
91 ],
89 "dest": "<%= dirs.js.dest %>/scripts.js",
92 "dest": "<%= dirs.js.dest %>/scripts.js",
90 "nonull": true
93 "nonull": true
91 }
94 }
92 },
95 },
93 "crisper": {
96 "crisper": {
94 "dist": {
97 "dist": {
95 "options": {
98 "options": {
96 "cleanup": false,
99 "cleanup": false,
97 "onlySplit": true
100 "onlySplit": true
98 },
101 },
99 "src": "<%= dirs.js.dest %>/rhodecode-components.html",
102 "src": "<%= dirs.js.dest %>/rhodecode-components.html",
100 "dest": "<%= dirs.js.dest %>/rhodecode-components.js"
103 "dest": "<%= dirs.js.dest %>/rhodecode-components.js"
101 }
104 }
102 },
105 },
103 "less": {
106 "less": {
104 "development": {
107 "development": {
105 "options": {
108 "options": {
106 "compress": false,
109 "compress": false,
107 "yuicompress": false,
110 "yuicompress": false,
108 "optimization": 0
111 "optimization": 0
109 },
112 },
110 "files": {
113 "files": {
111 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
114 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
112 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
115 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
113 }
116 }
114 },
117 },
115 "production": {
118 "production": {
116 "options": {
119 "options": {
117 "compress": true,
120 "compress": true,
118 "yuicompress": true,
121 "yuicompress": true,
119 "optimization": 2
122 "optimization": 2
120 },
123 },
121 "files": {
124 "files": {
122 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
125 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
123 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
126 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
124 }
127 }
125 },
128 },
126 "components": {
129 "components": {
127 "files": [
130 "files": [
128 {
131 {
129 "cwd": "<%= dirs.js.src %>/components/",
132 "cwd": "<%= dirs.js.src %>/components/",
130 "dest": "<%= dirs.js.src %>/components/",
133 "dest": "<%= dirs.js.src %>/components/",
131 "src": [
134 "src": [
132 "**/*.less"
135 "**/*.less"
133 ],
136 ],
134 "expand": true,
137 "expand": true,
135 "ext": ".css"
138 "ext": ".css"
136 }
139 }
137 ]
140 ]
138 }
141 }
139 },
142 },
140 "watch": {
143 "watch": {
141 "less": {
144 "less": {
142 "files": [
145 "files": [
143 "<%= dirs.css.src %>/**/*.less",
146 "<%= dirs.css.src %>/**/*.less",
144 "<%= dirs.js.src %>/components/**/*.less"
147 "<%= dirs.js.src %>/components/**/*.less"
145 ],
148 ],
146 "tasks": [
149 "tasks": [
147 "less:development",
150 "less:development",
148 "less:components",
151 "less:components",
149 "concat:polymercss",
152 "concat:polymercss",
150 "vulcanize",
153 "vulcanize",
151 "crisper",
154 "crisper",
152 "concat:dist"
155 "concat:dist"
153 ]
156 ]
154 },
157 },
155 "js": {
158 "js": {
156 "files": [
159 "files": [
157 "!<%= dirs.js.src %>/components/root-styles.gen.html",
160 "!<%= dirs.js.src %>/components/root-styles.gen.html",
158 "<%= dirs.js.src %>/**/*.js",
161 "<%= dirs.js.src %>/**/*.js",
159 "<%= dirs.js.src %>/components/**/*.html"
162 "<%= dirs.js.src %>/components/**/*.html"
160 ],
163 ],
161 "tasks": [
164 "tasks": [
162 "less:components",
165 "less:components",
163 "concat:polymercss",
166 "concat:polymercss",
164 "vulcanize",
167 "vulcanize",
165 "crisper",
168 "crisper",
166 "concat:dist"
169 "concat:dist"
167 ]
170 ]
168 }
171 }
169 },
172 },
170 "jshint": {
173 "jshint": {
171 "rhodecode": {
174 "rhodecode": {
172 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
175 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
173 "options": {
176 "options": {
174 "jshintrc": ".jshintrc"
177 "jshintrc": ".jshintrc"
175 }
178 }
176 }
179 }
177 },
180 },
178 "vulcanize": {
181 "vulcanize": {
179 "default": {
182 "default": {
180 "options": {
183 "options": {
181 "abspath": "",
184 "abspath": "",
182 "inlineScripts": true,
185 "inlineScripts": true,
183 "inlineCss": true,
186 "inlineCss": true,
184 "stripComments": true
187 "stripComments": true
185 },
188 },
186 "files": {
189 "files": {
187 "<%= dirs.js.dest %>/rhodecode-components.html": "<%= dirs.js.src %>/components/shared-components.html"
190 "<%= dirs.js.dest %>/rhodecode-components.html": "<%= dirs.js.src %>/components/shared-components.html"
188 }
191 }
189 }
192 }
190 }
193 }
191 }
194 }
@@ -1,20 +1,25 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-copy": "^1.0.0",
7 "grunt-contrib-concat": "^0.5.1",
7 "grunt-contrib-concat": "^0.5.1",
8 "grunt-contrib-jshint": "^0.12.0",
8 "grunt-contrib-jshint": "^0.12.0",
9 "grunt-contrib-less": "^1.1.0",
9 "grunt-contrib-less": "^1.1.0",
10 "grunt-contrib-watch": "^0.6.1",
10 "grunt-contrib-watch": "^0.6.1",
11 "crisper": "^2.0.2",
11 "crisper": "^2.0.2",
12 "vulcanize": "^1.14.8",
12 "vulcanize": "^1.14.8",
13 "grunt-crisper": "^1.0.1",
13 "grunt-crisper": "^1.0.1",
14 "grunt-vulcanize": "^1.0.0",
14 "grunt-vulcanize": "^1.0.0",
15 "node2nix": "^1.0.0",
15 "jshint": "^2.9.1-rc3",
16 "jshint": "^2.9.1-rc3",
16 "bower": "^1.7.9",
17 "bower": "^1.7.9",
18 "jquery": "1.11.3",
17 "favico.js": "^0.3.10",
19 "favico.js": "^0.3.10",
18 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.0"
20 "clipboard": "^1.7.1",
21 "moment": "^2.18.1",
22 "mousetrap": "^1.6.1",
23 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1"
19 }
24 }
20 }
25 }
@@ -1,33 +1,33 b''
1 { fetchbower, buildEnv }:
1 { fetchbower, buildEnv }:
2 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
2 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
3 (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "0ggh3k8ssafd056ib1m5bvzi7cpz3ry7gr5176d79na1w0c3i7dz")
3 (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "0ggh3k8ssafd056ib1m5bvzi7cpz3ry7gr5176d79na1w0c3i7dz")
4 (fetchbower "polymer" "Polymer/polymer#1.6.1" "Polymer/polymer#^1.6.1" "09mm0jgk457gvwqlc155swch7gjr6fs3g7spnvhi6vh5b6518540")
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")
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")
6 (fetchbower "paper-spinner" "PolymerElements/paper-spinner#1.2.0" "PolymerElements/paper-spinner#^1.2.0" "1av1m6y81jw3hjhz1yqy3rwcgxarjzl58ldfn4q6sn51pgzngfqb")
7 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.3" "PolymerElements/paper-tooltip#^1.1.2" "0vmrm1n8k9sk9nvqy03q177axy22pia6i3j1gxbk72j3pqiqvg6k")
7 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.3" "PolymerElements/paper-tooltip#^1.1.2" "0vmrm1n8k9sk9nvqy03q177axy22pia6i3j1gxbk72j3pqiqvg6k")
8 (fetchbower "paper-toast" "PolymerElements/paper-toast#1.3.0" "PolymerElements/paper-toast#^1.3.0" "0x9rqxsks5455s8pk4aikpp99ijdn6kxr9gvhwh99nbcqdzcxq1m")
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")
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" "1b1z3112ggjdflgrwbpmnbsh3kgcm4hn255wshvrlzds4w069gja")
10 (fetchbower "iron-ajax" "PolymerElements/iron-ajax#1.4.3" "PolymerElements/iron-ajax#^1.4.3" "0m3dx27arwmlcp00b7n516sc5a51f40p9vapr1nvd57l3i3z0pzm")
11 (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#1.0.13" "PolymerElements/iron-autogrow-textarea#^1.0.13" "0zwhpl97vii1s8k0lgain8i9dnw29b0mxc5ixdscx9las13n2lqq")
11 (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#1.0.13" "PolymerElements/iron-autogrow-textarea#^1.0.13" "0zwhpl97vii1s8k0lgain8i9dnw29b0mxc5ixdscx9las13n2lqq")
12 (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1.0.6" "PolymerElements/iron-a11y-keys#^1.0.6" "1xz3mgghfcxixq28sdb654iaxj4nyi1bzcwf77ydkms6fviqs9mv")
12 (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1.0.6" "PolymerElements/iron-a11y-keys#^1.0.6" "1xz3mgghfcxixq28sdb654iaxj4nyi1bzcwf77ydkms6fviqs9mv")
13 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl")
13 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl")
14 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8")
14 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8")
15 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh")
15 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh")
16 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.1.4" "PolymerElements/paper-styles#^1.0.0" "0j8vg74xrcxlni8i93dsab3y80f34kk30lv4yblqpkp9c3nrilf7")
16 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.1.4" "PolymerElements/paper-styles#^1.0.0" "0j8vg74xrcxlni8i93dsab3y80f34kk30lv4yblqpkp9c3nrilf7")
17 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j")
17 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j")
18 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d")
18 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d")
19 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.8.6" "PolymerElements/iron-overlay-behavior#^1.0.9" "14brn9gz6qqskarg3fxk91xs7vg02vgcsz9a9743kidxr0l0413m")
19 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.8.6" "PolymerElements/iron-overlay-behavior#^1.0.9" "14brn9gz6qqskarg3fxk91xs7vg02vgcsz9a9743kidxr0l0413m")
20 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf")
20 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf")
21 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.5" "PolymerElements/iron-checked-element-behavior#^1.0.0" "0l0yy4ah454s8bzfv076s8by7h67zy9ni6xb932qwyhx8br6c1m7")
21 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.5" "PolymerElements/iron-checked-element-behavior#^1.0.0" "0l0yy4ah454s8bzfv076s8by7h67zy9ni6xb932qwyhx8br6c1m7")
22 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb")
22 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb")
23 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.17" "PolymerElements/iron-behaviors#^1.0.0" "021qvkmbk32jrrmmphpmwgby4bzi5jyf47rh1bxmq2ip07ly4bpr")
23 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.17" "PolymerElements/iron-behaviors#^1.0.0" "021qvkmbk32jrrmmphpmwgby4bzi5jyf47rh1bxmq2ip07ly4bpr")
24 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv")
24 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv")
25 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1")
25 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1")
26 (fetchbower "iron-a11y-keys-behavior" "polymerelements/iron-a11y-keys-behavior#1.1.9" "polymerelements/iron-a11y-keys-behavior#^1.0.0" "1imm4gc84qizihhbyhfa8lwjh3myhj837f79i5m04xjgwrjmkaf6")
26 (fetchbower "iron-a11y-keys-behavior" "polymerelements/iron-a11y-keys-behavior#1.1.9" "polymerelements/iron-a11y-keys-behavior#^1.0.0" "1imm4gc84qizihhbyhfa8lwjh3myhj837f79i5m04xjgwrjmkaf6")
27 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns")
27 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns")
28 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj")
28 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj")
29 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl")
29 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl")
30 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn")
30 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn")
31 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r")
31 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r")
32 (fetchbower "web-animations-js" "web-animations/web-animations-js#2.2.2" "web-animations/web-animations-js#^2.2.0" "1izfvm3l67vwys0bqbhidi9rqziw2f8wv289386sc6jsxzgkzhga")
32 (fetchbower "web-animations-js" "web-animations/web-animations-js#2.2.2" "web-animations/web-animations-js#^2.2.0" "1izfvm3l67vwys0bqbhidi9rqziw2f8wv289386sc6jsxzgkzhga")
33 ]; }
33 ]; }
This diff has been collapsed as it changes many lines, (2563 lines changed) Show them Hide them
@@ -1,2391 +1,3022 b''
1 # This file has been generated by node2nix 1.0.0. Do not edit!
1 # This file has been generated by node2nix 1.0.0. Do not edit!
2
2
3 {nodeEnv, fetchurl, fetchgit}:
3 {nodeEnv, fetchurl, fetchgit}:
4
4
5 let
5 let
6 sources = {
6 sources = {
7 "grunt-0.4.5" = {
7 "grunt-0.4.5" = {
8 name = "grunt";
8 name = "grunt";
9 packageName = "grunt";
9 packageName = "grunt";
10 version = "0.4.5";
10 version = "0.4.5";
11 src = fetchurl {
11 src = fetchurl {
12 url = "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz";
12 url = "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz";
13 sha1 = "56937cd5194324adff6d207631832a9d6ba4e7f0";
13 sha1 = "56937cd5194324adff6d207631832a9d6ba4e7f0";
14 };
14 };
15 };
15 };
16 "grunt-contrib-copy-1.0.0" = {
16 "grunt-contrib-copy-1.0.0" = {
17 name = "grunt-contrib-copy";
17 name = "grunt-contrib-copy";
18 packageName = "grunt-contrib-copy";
18 packageName = "grunt-contrib-copy";
19 version = "1.0.0";
19 version = "1.0.0";
20 src = fetchurl {
20 src = fetchurl {
21 url = "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz";
21 url = "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz";
22 sha1 = "7060c6581e904b8ab0d00f076e0a8f6e3e7c3573";
22 sha1 = "7060c6581e904b8ab0d00f076e0a8f6e3e7c3573";
23 };
23 };
24 };
24 };
25 "grunt-contrib-concat-0.5.1" = {
25 "grunt-contrib-concat-0.5.1" = {
26 name = "grunt-contrib-concat";
26 name = "grunt-contrib-concat";
27 packageName = "grunt-contrib-concat";
27 packageName = "grunt-contrib-concat";
28 version = "0.5.1";
28 version = "0.5.1";
29 src = fetchurl {
29 src = fetchurl {
30 url = "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz";
30 url = "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz";
31 sha1 = "953c6efdfdfd2c107ab9c85077f2d4b24d31cd49";
31 sha1 = "953c6efdfdfd2c107ab9c85077f2d4b24d31cd49";
32 };
32 };
33 };
33 };
34 "grunt-contrib-jshint-0.12.0" = {
34 "grunt-contrib-jshint-0.12.0" = {
35 name = "grunt-contrib-jshint";
35 name = "grunt-contrib-jshint";
36 packageName = "grunt-contrib-jshint";
36 packageName = "grunt-contrib-jshint";
37 version = "0.12.0";
37 version = "0.12.0";
38 src = fetchurl {
38 src = fetchurl {
39 url = "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.12.0.tgz";
39 url = "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.12.0.tgz";
40 sha1 = "f6b2f06fc715264837a7ab6c69a1ce1a689c2c29";
40 sha1 = "f6b2f06fc715264837a7ab6c69a1ce1a689c2c29";
41 };
41 };
42 };
42 };
43 "grunt-contrib-less-1.4.0" = {
43 "grunt-contrib-less-1.4.1" = {
44 name = "grunt-contrib-less";
44 name = "grunt-contrib-less";
45 packageName = "grunt-contrib-less";
45 packageName = "grunt-contrib-less";
46 version = "1.4.0";
46 version = "1.4.1";
47 src = fetchurl {
47 src = fetchurl {
48 url = "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.0.tgz";
48 url = "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.1.tgz";
49 sha1 = "17ee79cad21c9720ee07b3a991fab5103b513514";
49 sha1 = "3bbdec0b75d12ceaa55d62943625c0b0861cdf6f";
50 };
50 };
51 };
51 };
52 "grunt-contrib-watch-0.6.1" = {
52 "grunt-contrib-watch-0.6.1" = {
53 name = "grunt-contrib-watch";
53 name = "grunt-contrib-watch";
54 packageName = "grunt-contrib-watch";
54 packageName = "grunt-contrib-watch";
55 version = "0.6.1";
55 version = "0.6.1";
56 src = fetchurl {
56 src = fetchurl {
57 url = "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz";
57 url = "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz";
58 sha1 = "64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15";
58 sha1 = "64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15";
59 };
59 };
60 };
60 };
61 "crisper-2.0.2" = {
61 "crisper-2.1.1" = {
62 name = "crisper";
62 name = "crisper";
63 packageName = "crisper";
63 packageName = "crisper";
64 version = "2.0.2";
64 version = "2.1.1";
65 src = fetchurl {
65 src = fetchurl {
66 url = "https://registry.npmjs.org/crisper/-/crisper-2.0.2.tgz";
66 url = "https://registry.npmjs.org/crisper/-/crisper-2.1.1.tgz";
67 sha1 = "188a7da3d00dcf0c64eff7f253d23dacffba7197";
67 sha1 = "4cc7321c3e90f3c5cbdc3503217f118fd7d5c51c";
68 };
68 };
69 };
69 };
70 "vulcanize-1.14.8" = {
70 "vulcanize-1.16.0" = {
71 name = "vulcanize";
71 name = "vulcanize";
72 packageName = "vulcanize";
72 packageName = "vulcanize";
73 version = "1.14.8";
73 version = "1.16.0";
74 src = fetchurl {
74 src = fetchurl {
75 url = "https://registry.npmjs.org/vulcanize/-/vulcanize-1.14.8.tgz";
75 url = "https://registry.npmjs.org/vulcanize/-/vulcanize-1.16.0.tgz";
76 sha1 = "3cdd6f81d9baf2c5796ddd6d2d289e45975086f7";
76 sha1 = "b0ce3b0044d194ad4908ae4f1a6c6110a6e4d5e6";
77 };
77 };
78 };
78 };
79 "grunt-crisper-1.0.1" = {
79 "grunt-crisper-1.0.1" = {
80 name = "grunt-crisper";
80 name = "grunt-crisper";
81 packageName = "grunt-crisper";
81 packageName = "grunt-crisper";
82 version = "1.0.1";
82 version = "1.0.1";
83 src = fetchurl {
83 src = fetchurl {
84 url = "https://registry.npmjs.org/grunt-crisper/-/grunt-crisper-1.0.1.tgz";
84 url = "https://registry.npmjs.org/grunt-crisper/-/grunt-crisper-1.0.1.tgz";
85 sha1 = "e7c091dcaff10deb0091e3035ca7e54008991fe7";
85 sha1 = "e7c091dcaff10deb0091e3035ca7e54008991fe7";
86 };
86 };
87 };
87 };
88 "grunt-vulcanize-1.0.0" = {
88 "grunt-vulcanize-1.0.0" = {
89 name = "grunt-vulcanize";
89 name = "grunt-vulcanize";
90 packageName = "grunt-vulcanize";
90 packageName = "grunt-vulcanize";
91 version = "1.0.0";
91 version = "1.0.0";
92 src = fetchurl {
92 src = fetchurl {
93 url = "https://registry.npmjs.org/grunt-vulcanize/-/grunt-vulcanize-1.0.0.tgz";
93 url = "https://registry.npmjs.org/grunt-vulcanize/-/grunt-vulcanize-1.0.0.tgz";
94 sha1 = "f4d6cfef274f8216c06f6c290e7dbb3b9e9e3b0f";
94 sha1 = "f4d6cfef274f8216c06f6c290e7dbb3b9e9e3b0f";
95 };
95 };
96 };
96 };
97 "jshint-2.9.3" = {
97 "node2nix-1.3.0" = {
98 name = "node2nix";
99 packageName = "node2nix";
100 version = "1.3.0";
101 src = fetchurl {
102 url = "https://registry.npmjs.org/node2nix/-/node2nix-1.3.0.tgz";
103 sha1 = "e830a3bc5880dd22ae47be71a147f776542850cc";
104 };
105 };
106 "jshint-2.9.5" = {
98 name = "jshint";
107 name = "jshint";
99 packageName = "jshint";
108 packageName = "jshint";
100 version = "2.9.3";
109 version = "2.9.5";
101 src = fetchurl {
110 src = fetchurl {
102 url = "https://registry.npmjs.org/jshint/-/jshint-2.9.3.tgz";
111 url = "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz";
103 sha1 = "a2e14ff85c2d6bf8c8080e5aa55129ebc6a2d320";
112 sha1 = "1e7252915ce681b40827ee14248c46d34e9aa62c";
104 };
113 };
105 };
114 };
106 "bower-1.7.9" = {
115 "bower-1.8.2" = {
107 name = "bower";
116 name = "bower";
108 packageName = "bower";
117 packageName = "bower";
109 version = "1.7.9";
118 version = "1.8.2";
110 src = fetchurl {
119 src = fetchurl {
111 url = "https://registry.npmjs.org/bower/-/bower-1.7.9.tgz";
120 url = "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz";
112 sha1 = "b7296c2393e0d75edaa6ca39648132dd255812b0";
121 sha1 = "adf53529c8d4af02ef24fb8d5341c1419d33e2f7";
122 };
123 };
124 "jquery-1.11.3" = {
125 name = "jquery";
126 packageName = "jquery";
127 version = "1.11.3";
128 src = fetchurl {
129 url = "https://registry.npmjs.org/jquery/-/jquery-1.11.3.tgz";
130 sha1 = "dd8b74278b27102d29df63eae28308a8cfa1b583";
113 };
131 };
114 };
132 };
115 "favico.js-0.3.10" = {
133 "favico.js-0.3.10" = {
116 name = "favico.js";
134 name = "favico.js";
117 packageName = "favico.js";
135 packageName = "favico.js";
118 version = "0.3.10";
136 version = "0.3.10";
119 src = fetchurl {
137 src = fetchurl {
120 url = "https://registry.npmjs.org/favico.js/-/favico.js-0.3.10.tgz";
138 url = "https://registry.npmjs.org/favico.js/-/favico.js-0.3.10.tgz";
121 sha1 = "80586e27a117f24a8d51c18a99bdc714d4339301";
139 sha1 = "80586e27a117f24a8d51c18a99bdc714d4339301";
122 };
140 };
123 };
141 };
124 "appenlight-client-git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.0" = {
142 "clipboard-1.7.1" = {
143 name = "clipboard";
144 packageName = "clipboard";
145 version = "1.7.1";
146 src = fetchurl {
147 url = "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz";
148 sha1 = "360d6d6946e99a7a1fef395e42ba92b5e9b5a16b";
149 };
150 };
151 "moment-2.18.1" = {
152 name = "moment";
153 packageName = "moment";
154 version = "2.18.1";
155 src = fetchurl {
156 url = "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz";
157 sha1 = "c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f";
158 };
159 };
160 "mousetrap-1.6.1" = {
161 name = "mousetrap";
162 packageName = "mousetrap";
163 version = "1.6.1";
164 src = fetchurl {
165 url = "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.1.tgz";
166 sha1 = "2a085f5c751294c75e7e81f6ec2545b29cbf42d9";
167 };
168 };
169 "appenlight-client-git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1" = {
125 name = "appenlight-client";
170 name = "appenlight-client";
126 packageName = "appenlight-client";
171 packageName = "appenlight-client";
127 version = "0.5.0";
172 version = "0.5.1";
128 src = fetchgit {
173 src = fetchgit {
129 url = "https://git@github.com/AppEnlight/appenlight-client-js.git";
174 url = "https://git@github.com/AppEnlight/appenlight-client-js.git";
130 rev = "b1d6853345dc3e96468b34537810b3eb77e0764f";
175 rev = "14712c64c230fbbe94fcbc8094aef5eb3b90b307";
131 sha256 = "2ef00aef7dafdecdc1666d2e83fc190a796849985d04a8f0fad148d64aa4f8db";
176 sha256 = "92111f1104cbf0b31303c366c0fa752cf68af7ddde40d0161edd1b5fd9dd07f7";
132 };
177 };
133 };
178 };
134 "async-0.1.22" = {
179 "async-0.1.22" = {
135 name = "async";
180 name = "async";
136 packageName = "async";
181 packageName = "async";
137 version = "0.1.22";
182 version = "0.1.22";
138 src = fetchurl {
183 src = fetchurl {
139 url = "https://registry.npmjs.org/async/-/async-0.1.22.tgz";
184 url = "https://registry.npmjs.org/async/-/async-0.1.22.tgz";
140 sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
185 sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
141 };
186 };
142 };
187 };
143 "coffee-script-1.3.3" = {
188 "coffee-script-1.3.3" = {
144 name = "coffee-script";
189 name = "coffee-script";
145 packageName = "coffee-script";
190 packageName = "coffee-script";
146 version = "1.3.3";
191 version = "1.3.3";
147 src = fetchurl {
192 src = fetchurl {
148 url = "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz";
193 url = "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz";
149 sha1 = "150d6b4cb522894369efed6a2101c20bc7f4a4f4";
194 sha1 = "150d6b4cb522894369efed6a2101c20bc7f4a4f4";
150 };
195 };
151 };
196 };
152 "colors-0.6.2" = {
197 "colors-0.6.2" = {
153 name = "colors";
198 name = "colors";
154 packageName = "colors";
199 packageName = "colors";
155 version = "0.6.2";
200 version = "0.6.2";
156 src = fetchurl {
201 src = fetchurl {
157 url = "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
202 url = "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
158 sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
203 sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
159 };
204 };
160 };
205 };
161 "dateformat-1.0.2-1.2.3" = {
206 "dateformat-1.0.2-1.2.3" = {
162 name = "dateformat";
207 name = "dateformat";
163 packageName = "dateformat";
208 packageName = "dateformat";
164 version = "1.0.2-1.2.3";
209 version = "1.0.2-1.2.3";
165 src = fetchurl {
210 src = fetchurl {
166 url = "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz";
211 url = "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz";
167 sha1 = "b0220c02de98617433b72851cf47de3df2cdbee9";
212 sha1 = "b0220c02de98617433b72851cf47de3df2cdbee9";
168 };
213 };
169 };
214 };
170 "eventemitter2-0.4.14" = {
215 "eventemitter2-0.4.14" = {
171 name = "eventemitter2";
216 name = "eventemitter2";
172 packageName = "eventemitter2";
217 packageName = "eventemitter2";
173 version = "0.4.14";
218 version = "0.4.14";
174 src = fetchurl {
219 src = fetchurl {
175 url = "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
220 url = "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
176 sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
221 sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
177 };
222 };
178 };
223 };
179 "findup-sync-0.1.3" = {
224 "findup-sync-0.1.3" = {
180 name = "findup-sync";
225 name = "findup-sync";
181 packageName = "findup-sync";
226 packageName = "findup-sync";
182 version = "0.1.3";
227 version = "0.1.3";
183 src = fetchurl {
228 src = fetchurl {
184 url = "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
229 url = "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
185 sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
230 sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
186 };
231 };
187 };
232 };
188 "glob-3.1.21" = {
233 "glob-3.1.21" = {
189 name = "glob";
234 name = "glob";
190 packageName = "glob";
235 packageName = "glob";
191 version = "3.1.21";
236 version = "3.1.21";
192 src = fetchurl {
237 src = fetchurl {
193 url = "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
238 url = "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
194 sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
239 sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
195 };
240 };
196 };
241 };
197 "hooker-0.2.3" = {
242 "hooker-0.2.3" = {
198 name = "hooker";
243 name = "hooker";
199 packageName = "hooker";
244 packageName = "hooker";
200 version = "0.2.3";
245 version = "0.2.3";
201 src = fetchurl {
246 src = fetchurl {
202 url = "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
247 url = "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
203 sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
248 sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
204 };
249 };
205 };
250 };
206 "iconv-lite-0.2.11" = {
251 "iconv-lite-0.2.11" = {
207 name = "iconv-lite";
252 name = "iconv-lite";
208 packageName = "iconv-lite";
253 packageName = "iconv-lite";
209 version = "0.2.11";
254 version = "0.2.11";
210 src = fetchurl {
255 src = fetchurl {
211 url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz";
256 url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz";
212 sha1 = "1ce60a3a57864a292d1321ff4609ca4bb965adc8";
257 sha1 = "1ce60a3a57864a292d1321ff4609ca4bb965adc8";
213 };
258 };
214 };
259 };
215 "minimatch-0.2.14" = {
260 "minimatch-0.2.14" = {
216 name = "minimatch";
261 name = "minimatch";
217 packageName = "minimatch";
262 packageName = "minimatch";
218 version = "0.2.14";
263 version = "0.2.14";
219 src = fetchurl {
264 src = fetchurl {
220 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
265 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
221 sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
266 sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
222 };
267 };
223 };
268 };
224 "nopt-1.0.10" = {
269 "nopt-1.0.10" = {
225 name = "nopt";
270 name = "nopt";
226 packageName = "nopt";
271 packageName = "nopt";
227 version = "1.0.10";
272 version = "1.0.10";
228 src = fetchurl {
273 src = fetchurl {
229 url = "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
274 url = "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
230 sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee";
275 sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee";
231 };
276 };
232 };
277 };
233 "rimraf-2.2.8" = {
278 "rimraf-2.2.8" = {
234 name = "rimraf";
279 name = "rimraf";
235 packageName = "rimraf";
280 packageName = "rimraf";
236 version = "2.2.8";
281 version = "2.2.8";
237 src = fetchurl {
282 src = fetchurl {
238 url = "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
283 url = "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
239 sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
284 sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
240 };
285 };
241 };
286 };
242 "lodash-0.9.2" = {
287 "lodash-0.9.2" = {
243 name = "lodash";
288 name = "lodash";
244 packageName = "lodash";
289 packageName = "lodash";
245 version = "0.9.2";
290 version = "0.9.2";
246 src = fetchurl {
291 src = fetchurl {
247 url = "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz";
292 url = "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz";
248 sha1 = "8f3499c5245d346d682e5b0d3b40767e09f1a92c";
293 sha1 = "8f3499c5245d346d682e5b0d3b40767e09f1a92c";
249 };
294 };
250 };
295 };
251 "underscore.string-2.2.1" = {
296 "underscore.string-2.2.1" = {
252 name = "underscore.string";
297 name = "underscore.string";
253 packageName = "underscore.string";
298 packageName = "underscore.string";
254 version = "2.2.1";
299 version = "2.2.1";
255 src = fetchurl {
300 src = fetchurl {
256 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz";
301 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz";
257 sha1 = "d7c0fa2af5d5a1a67f4253daee98132e733f0f19";
302 sha1 = "d7c0fa2af5d5a1a67f4253daee98132e733f0f19";
258 };
303 };
259 };
304 };
260 "which-1.0.9" = {
305 "which-1.0.9" = {
261 name = "which";
306 name = "which";
262 packageName = "which";
307 packageName = "which";
263 version = "1.0.9";
308 version = "1.0.9";
264 src = fetchurl {
309 src = fetchurl {
265 url = "https://registry.npmjs.org/which/-/which-1.0.9.tgz";
310 url = "https://registry.npmjs.org/which/-/which-1.0.9.tgz";
266 sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
311 sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
267 };
312 };
268 };
313 };
269 "js-yaml-2.0.5" = {
314 "js-yaml-2.0.5" = {
270 name = "js-yaml";
315 name = "js-yaml";
271 packageName = "js-yaml";
316 packageName = "js-yaml";
272 version = "2.0.5";
317 version = "2.0.5";
273 src = fetchurl {
318 src = fetchurl {
274 url = "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz";
319 url = "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz";
275 sha1 = "a25ae6509999e97df278c6719da11bd0687743a8";
320 sha1 = "a25ae6509999e97df278c6719da11bd0687743a8";
276 };
321 };
277 };
322 };
278 "exit-0.1.2" = {
323 "exit-0.1.2" = {
279 name = "exit";
324 name = "exit";
280 packageName = "exit";
325 packageName = "exit";
281 version = "0.1.2";
326 version = "0.1.2";
282 src = fetchurl {
327 src = fetchurl {
283 url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
328 url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
284 sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
329 sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
285 };
330 };
286 };
331 };
287 "getobject-0.1.0" = {
332 "getobject-0.1.0" = {
288 name = "getobject";
333 name = "getobject";
289 packageName = "getobject";
334 packageName = "getobject";
290 version = "0.1.0";
335 version = "0.1.0";
291 src = fetchurl {
336 src = fetchurl {
292 url = "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz";
337 url = "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz";
293 sha1 = "047a449789fa160d018f5486ed91320b6ec7885c";
338 sha1 = "047a449789fa160d018f5486ed91320b6ec7885c";
294 };
339 };
295 };
340 };
296 "grunt-legacy-util-0.2.0" = {
341 "grunt-legacy-util-0.2.0" = {
297 name = "grunt-legacy-util";
342 name = "grunt-legacy-util";
298 packageName = "grunt-legacy-util";
343 packageName = "grunt-legacy-util";
299 version = "0.2.0";
344 version = "0.2.0";
300 src = fetchurl {
345 src = fetchurl {
301 url = "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz";
346 url = "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz";
302 sha1 = "93324884dbf7e37a9ff7c026dff451d94a9e554b";
347 sha1 = "93324884dbf7e37a9ff7c026dff451d94a9e554b";
303 };
348 };
304 };
349 };
305 "grunt-legacy-log-0.1.3" = {
350 "grunt-legacy-log-0.1.3" = {
306 name = "grunt-legacy-log";
351 name = "grunt-legacy-log";
307 packageName = "grunt-legacy-log";
352 packageName = "grunt-legacy-log";
308 version = "0.1.3";
353 version = "0.1.3";
309 src = fetchurl {
354 src = fetchurl {
310 url = "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz";
355 url = "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz";
311 sha1 = "ec29426e803021af59029f87d2f9cd7335a05531";
356 sha1 = "ec29426e803021af59029f87d2f9cd7335a05531";
312 };
357 };
313 };
358 };
314 "glob-3.2.11" = {
359 "glob-3.2.11" = {
315 name = "glob";
360 name = "glob";
316 packageName = "glob";
361 packageName = "glob";
317 version = "3.2.11";
362 version = "3.2.11";
318 src = fetchurl {
363 src = fetchurl {
319 url = "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
364 url = "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
320 sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
365 sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
321 };
366 };
322 };
367 };
323 "lodash-2.4.2" = {
368 "lodash-2.4.2" = {
324 name = "lodash";
369 name = "lodash";
325 packageName = "lodash";
370 packageName = "lodash";
326 version = "2.4.2";
371 version = "2.4.2";
327 src = fetchurl {
372 src = fetchurl {
328 url = "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
373 url = "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
329 sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
374 sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
330 };
375 };
331 };
376 };
332 "inherits-2.0.3" = {
377 "inherits-2.0.3" = {
333 name = "inherits";
378 name = "inherits";
334 packageName = "inherits";
379 packageName = "inherits";
335 version = "2.0.3";
380 version = "2.0.3";
336 src = fetchurl {
381 src = fetchurl {
337 url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
382 url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
338 sha1 = "633c2c83e3da42a502f52466022480f4208261de";
383 sha1 = "633c2c83e3da42a502f52466022480f4208261de";
339 };
384 };
340 };
385 };
341 "minimatch-0.3.0" = {
386 "minimatch-0.3.0" = {
342 name = "minimatch";
387 name = "minimatch";
343 packageName = "minimatch";
388 packageName = "minimatch";
344 version = "0.3.0";
389 version = "0.3.0";
345 src = fetchurl {
390 src = fetchurl {
346 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
391 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
347 sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
392 sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
348 };
393 };
349 };
394 };
350 "lru-cache-2.7.3" = {
395 "lru-cache-2.7.3" = {
351 name = "lru-cache";
396 name = "lru-cache";
352 packageName = "lru-cache";
397 packageName = "lru-cache";
353 version = "2.7.3";
398 version = "2.7.3";
354 src = fetchurl {
399 src = fetchurl {
355 url = "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
400 url = "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
356 sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
401 sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
357 };
402 };
358 };
403 };
359 "sigmund-1.0.1" = {
404 "sigmund-1.0.1" = {
360 name = "sigmund";
405 name = "sigmund";
361 packageName = "sigmund";
406 packageName = "sigmund";
362 version = "1.0.1";
407 version = "1.0.1";
363 src = fetchurl {
408 src = fetchurl {
364 url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
409 url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
365 sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
410 sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
366 };
411 };
367 };
412 };
368 "graceful-fs-1.2.3" = {
413 "graceful-fs-1.2.3" = {
369 name = "graceful-fs";
414 name = "graceful-fs";
370 packageName = "graceful-fs";
415 packageName = "graceful-fs";
371 version = "1.2.3";
416 version = "1.2.3";
372 src = fetchurl {
417 src = fetchurl {
373 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
418 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
374 sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
419 sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
375 };
420 };
376 };
421 };
377 "inherits-1.0.2" = {
422 "inherits-1.0.2" = {
378 name = "inherits";
423 name = "inherits";
379 packageName = "inherits";
424 packageName = "inherits";
380 version = "1.0.2";
425 version = "1.0.2";
381 src = fetchurl {
426 src = fetchurl {
382 url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
427 url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
383 sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
428 sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
384 };
429 };
385 };
430 };
386 "abbrev-1.0.9" = {
431 "abbrev-1.1.0" = {
387 name = "abbrev";
432 name = "abbrev";
388 packageName = "abbrev";
433 packageName = "abbrev";
389 version = "1.0.9";
434 version = "1.1.0";
390 src = fetchurl {
435 src = fetchurl {
391 url = "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz";
436 url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz";
392 sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135";
437 sha1 = "d0554c2256636e2f56e7c2e5ad183f859428d81f";
393 };
438 };
394 };
439 };
395 "argparse-0.1.16" = {
440 "argparse-0.1.16" = {
396 name = "argparse";
441 name = "argparse";
397 packageName = "argparse";
442 packageName = "argparse";
398 version = "0.1.16";
443 version = "0.1.16";
399 src = fetchurl {
444 src = fetchurl {
400 url = "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
445 url = "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
401 sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
446 sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
402 };
447 };
403 };
448 };
404 "esprima-1.0.4" = {
449 "esprima-1.0.4" = {
405 name = "esprima";
450 name = "esprima";
406 packageName = "esprima";
451 packageName = "esprima";
407 version = "1.0.4";
452 version = "1.0.4";
408 src = fetchurl {
453 src = fetchurl {
409 url = "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
454 url = "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
410 sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
455 sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
411 };
456 };
412 };
457 };
413 "underscore-1.7.0" = {
458 "underscore-1.7.0" = {
414 name = "underscore";
459 name = "underscore";
415 packageName = "underscore";
460 packageName = "underscore";
416 version = "1.7.0";
461 version = "1.7.0";
417 src = fetchurl {
462 src = fetchurl {
418 url = "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
463 url = "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
419 sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
464 sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
420 };
465 };
421 };
466 };
422 "underscore.string-2.4.0" = {
467 "underscore.string-2.4.0" = {
423 name = "underscore.string";
468 name = "underscore.string";
424 packageName = "underscore.string";
469 packageName = "underscore.string";
425 version = "2.4.0";
470 version = "2.4.0";
426 src = fetchurl {
471 src = fetchurl {
427 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
472 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
428 sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
473 sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
429 };
474 };
430 };
475 };
431 "grunt-legacy-log-utils-0.1.1" = {
476 "grunt-legacy-log-utils-0.1.1" = {
432 name = "grunt-legacy-log-utils";
477 name = "grunt-legacy-log-utils";
433 packageName = "grunt-legacy-log-utils";
478 packageName = "grunt-legacy-log-utils";
434 version = "0.1.1";
479 version = "0.1.1";
435 src = fetchurl {
480 src = fetchurl {
436 url = "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz";
481 url = "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz";
437 sha1 = "c0706b9dd9064e116f36f23fe4e6b048672c0f7e";
482 sha1 = "c0706b9dd9064e116f36f23fe4e6b048672c0f7e";
438 };
483 };
439 };
484 };
440 "underscore.string-2.3.3" = {
485 "underscore.string-2.3.3" = {
441 name = "underscore.string";
486 name = "underscore.string";
442 packageName = "underscore.string";
487 packageName = "underscore.string";
443 version = "2.3.3";
488 version = "2.3.3";
444 src = fetchurl {
489 src = fetchurl {
445 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz";
490 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz";
446 sha1 = "71c08bf6b428b1133f37e78fa3a21c82f7329b0d";
491 sha1 = "71c08bf6b428b1133f37e78fa3a21c82f7329b0d";
447 };
492 };
448 };
493 };
449 "chalk-1.1.3" = {
494 "chalk-1.1.3" = {
450 name = "chalk";
495 name = "chalk";
451 packageName = "chalk";
496 packageName = "chalk";
452 version = "1.1.3";
497 version = "1.1.3";
453 src = fetchurl {
498 src = fetchurl {
454 url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
499 url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
455 sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
500 sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
456 };
501 };
457 };
502 };
458 "file-sync-cmp-0.1.1" = {
503 "file-sync-cmp-0.1.1" = {
459 name = "file-sync-cmp";
504 name = "file-sync-cmp";
460 packageName = "file-sync-cmp";
505 packageName = "file-sync-cmp";
461 version = "0.1.1";
506 version = "0.1.1";
462 src = fetchurl {
507 src = fetchurl {
463 url = "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz";
508 url = "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz";
464 sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b";
509 sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b";
465 };
510 };
466 };
511 };
467 "ansi-styles-2.2.1" = {
512 "ansi-styles-2.2.1" = {
468 name = "ansi-styles";
513 name = "ansi-styles";
469 packageName = "ansi-styles";
514 packageName = "ansi-styles";
470 version = "2.2.1";
515 version = "2.2.1";
471 src = fetchurl {
516 src = fetchurl {
472 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
517 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
473 sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
518 sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
474 };
519 };
475 };
520 };
476 "escape-string-regexp-1.0.5" = {
521 "escape-string-regexp-1.0.5" = {
477 name = "escape-string-regexp";
522 name = "escape-string-regexp";
478 packageName = "escape-string-regexp";
523 packageName = "escape-string-regexp";
479 version = "1.0.5";
524 version = "1.0.5";
480 src = fetchurl {
525 src = fetchurl {
481 url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
526 url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
482 sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
527 sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
483 };
528 };
484 };
529 };
485 "has-ansi-2.0.0" = {
530 "has-ansi-2.0.0" = {
486 name = "has-ansi";
531 name = "has-ansi";
487 packageName = "has-ansi";
532 packageName = "has-ansi";
488 version = "2.0.0";
533 version = "2.0.0";
489 src = fetchurl {
534 src = fetchurl {
490 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
535 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
491 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
536 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
492 };
537 };
493 };
538 };
494 "strip-ansi-3.0.1" = {
539 "strip-ansi-3.0.1" = {
495 name = "strip-ansi";
540 name = "strip-ansi";
496 packageName = "strip-ansi";
541 packageName = "strip-ansi";
497 version = "3.0.1";
542 version = "3.0.1";
498 src = fetchurl {
543 src = fetchurl {
499 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
544 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
500 sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
545 sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
501 };
546 };
502 };
547 };
503 "supports-color-2.0.0" = {
548 "supports-color-2.0.0" = {
504 name = "supports-color";
549 name = "supports-color";
505 packageName = "supports-color";
550 packageName = "supports-color";
506 version = "2.0.0";
551 version = "2.0.0";
507 src = fetchurl {
552 src = fetchurl {
508 url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
553 url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
509 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
554 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
510 };
555 };
511 };
556 };
512 "ansi-regex-2.0.0" = {
557 "ansi-regex-2.1.1" = {
513 name = "ansi-regex";
558 name = "ansi-regex";
514 packageName = "ansi-regex";
559 packageName = "ansi-regex";
515 version = "2.0.0";
560 version = "2.1.1";
516 src = fetchurl {
561 src = fetchurl {
517 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
562 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
518 sha1 = "c5061b6e0ef8a81775e50f5d66151bf6bf371107";
563 sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
519 };
564 };
520 };
565 };
521 "chalk-0.5.1" = {
566 "chalk-0.5.1" = {
522 name = "chalk";
567 name = "chalk";
523 packageName = "chalk";
568 packageName = "chalk";
524 version = "0.5.1";
569 version = "0.5.1";
525 src = fetchurl {
570 src = fetchurl {
526 url = "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
571 url = "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
527 sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
572 sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
528 };
573 };
529 };
574 };
530 "source-map-0.3.0" = {
575 "source-map-0.3.0" = {
531 name = "source-map";
576 name = "source-map";
532 packageName = "source-map";
577 packageName = "source-map";
533 version = "0.3.0";
578 version = "0.3.0";
534 src = fetchurl {
579 src = fetchurl {
535 url = "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz";
580 url = "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz";
536 sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9";
581 sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9";
537 };
582 };
538 };
583 };
539 "ansi-styles-1.1.0" = {
584 "ansi-styles-1.1.0" = {
540 name = "ansi-styles";
585 name = "ansi-styles";
541 packageName = "ansi-styles";
586 packageName = "ansi-styles";
542 version = "1.1.0";
587 version = "1.1.0";
543 src = fetchurl {
588 src = fetchurl {
544 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
589 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
545 sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
590 sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
546 };
591 };
547 };
592 };
548 "has-ansi-0.1.0" = {
593 "has-ansi-0.1.0" = {
549 name = "has-ansi";
594 name = "has-ansi";
550 packageName = "has-ansi";
595 packageName = "has-ansi";
551 version = "0.1.0";
596 version = "0.1.0";
552 src = fetchurl {
597 src = fetchurl {
553 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
598 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
554 sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
599 sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
555 };
600 };
556 };
601 };
557 "strip-ansi-0.3.0" = {
602 "strip-ansi-0.3.0" = {
558 name = "strip-ansi";
603 name = "strip-ansi";
559 packageName = "strip-ansi";
604 packageName = "strip-ansi";
560 version = "0.3.0";
605 version = "0.3.0";
561 src = fetchurl {
606 src = fetchurl {
562 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
607 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
563 sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
608 sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
564 };
609 };
565 };
610 };
566 "supports-color-0.2.0" = {
611 "supports-color-0.2.0" = {
567 name = "supports-color";
612 name = "supports-color";
568 packageName = "supports-color";
613 packageName = "supports-color";
569 version = "0.2.0";
614 version = "0.2.0";
570 src = fetchurl {
615 src = fetchurl {
571 url = "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
616 url = "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
572 sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
617 sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
573 };
618 };
574 };
619 };
575 "ansi-regex-0.2.1" = {
620 "ansi-regex-0.2.1" = {
576 name = "ansi-regex";
621 name = "ansi-regex";
577 packageName = "ansi-regex";
622 packageName = "ansi-regex";
578 version = "0.2.1";
623 version = "0.2.1";
579 src = fetchurl {
624 src = fetchurl {
580 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
625 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
581 sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
626 sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
582 };
627 };
583 };
628 };
584 "amdefine-1.0.0" = {
629 "amdefine-1.0.1" = {
585 name = "amdefine";
630 name = "amdefine";
586 packageName = "amdefine";
631 packageName = "amdefine";
587 version = "1.0.0";
632 version = "1.0.1";
588 src = fetchurl {
633 src = fetchurl {
589 url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
634 url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz";
590 sha1 = "fd17474700cb5cc9c2b709f0be9d23ce3c198c33";
635 sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5";
591 };
636 };
592 };
637 };
593 "async-2.0.1" = {
638 "async-2.5.0" = {
594 name = "async";
639 name = "async";
595 packageName = "async";
640 packageName = "async";
596 version = "2.0.1";
641 version = "2.5.0";
597 src = fetchurl {
642 src = fetchurl {
598 url = "https://registry.npmjs.org/async/-/async-2.0.1.tgz";
643 url = "https://registry.npmjs.org/async/-/async-2.5.0.tgz";
599 sha1 = "b709cc0280a9c36f09f4536be823c838a9049e25";
644 sha1 = "843190fd6b7357a0b9e1c956edddd5ec8462b54d";
600 };
645 };
601 };
646 };
602 "less-2.7.1" = {
647 "less-2.7.2" = {
603 name = "less";
648 name = "less";
604 packageName = "less";
649 packageName = "less";
605 version = "2.7.1";
650 version = "2.7.2";
606 src = fetchurl {
651 src = fetchurl {
607 url = "https://registry.npmjs.org/less/-/less-2.7.1.tgz";
652 url = "https://registry.npmjs.org/less/-/less-2.7.2.tgz";
608 sha1 = "6cbfea22b3b830304e9a5fb371d54fa480c9d7cf";
653 sha1 = "368d6cc73e1fb03981183280918743c5dcf9b3df";
609 };
654 };
610 };
655 };
611 "lodash-4.16.2" = {
656 "lodash-4.17.4" = {
612 name = "lodash";
657 name = "lodash";
613 packageName = "lodash";
658 packageName = "lodash";
614 version = "4.16.2";
659 version = "4.17.4";
615 src = fetchurl {
660 src = fetchurl {
616 url = "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz";
661 url = "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz";
617 sha1 = "3e626db827048a699281a8a125226326cfc0e652";
662 sha1 = "78203a4d1c328ae1d86dca6460e369b57f4055ae";
618 };
663 };
619 };
664 };
620 "errno-0.1.4" = {
665 "errno-0.1.4" = {
621 name = "errno";
666 name = "errno";
622 packageName = "errno";
667 packageName = "errno";
623 version = "0.1.4";
668 version = "0.1.4";
624 src = fetchurl {
669 src = fetchurl {
625 url = "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz";
670 url = "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz";
626 sha1 = "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d";
671 sha1 = "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d";
627 };
672 };
628 };
673 };
629 "graceful-fs-4.1.8" = {
674 "graceful-fs-4.1.11" = {
630 name = "graceful-fs";
675 name = "graceful-fs";
631 packageName = "graceful-fs";
676 packageName = "graceful-fs";
632 version = "4.1.8";
677 version = "4.1.11";
633 src = fetchurl {
678 src = fetchurl {
634 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.8.tgz";
679 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz";
635 sha1 = "da3e11135eb2168bdd374532c4e2649751672890";
680 sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
636 };
681 };
637 };
682 };
638 "image-size-0.5.0" = {
683 "image-size-0.5.5" = {
639 name = "image-size";
684 name = "image-size";
640 packageName = "image-size";
685 packageName = "image-size";
641 version = "0.5.0";
686 version = "0.5.5";
642 src = fetchurl {
687 src = fetchurl {
643 url = "https://registry.npmjs.org/image-size/-/image-size-0.5.0.tgz";
688 url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz";
644 sha1 = "be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651";
689 sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c";
645 };
690 };
646 };
691 };
647 "mime-1.3.4" = {
692 "mime-1.4.0" = {
648 name = "mime";
693 name = "mime";
649 packageName = "mime";
694 packageName = "mime";
650 version = "1.3.4";
695 version = "1.4.0";
651 src = fetchurl {
696 src = fetchurl {
652 url = "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
697 url = "https://registry.npmjs.org/mime/-/mime-1.4.0.tgz";
653 sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
698 sha1 = "69e9e0db51d44f2a3b56e48b7817d7d137f1a343";
654 };
699 };
655 };
700 };
656 "mkdirp-0.5.1" = {
701 "mkdirp-0.5.1" = {
657 name = "mkdirp";
702 name = "mkdirp";
658 packageName = "mkdirp";
703 packageName = "mkdirp";
659 version = "0.5.1";
704 version = "0.5.1";
660 src = fetchurl {
705 src = fetchurl {
661 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
706 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
662 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
707 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
663 };
708 };
664 };
709 };
665 "promise-7.1.1" = {
710 "promise-7.3.1" = {
666 name = "promise";
711 name = "promise";
667 packageName = "promise";
712 packageName = "promise";
668 version = "7.1.1";
713 version = "7.3.1";
669 src = fetchurl {
714 src = fetchurl {
670 url = "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz";
715 url = "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz";
671 sha1 = "489654c692616b8aa55b0724fa809bb7db49c5bf";
716 sha1 = "064b72602b18f90f29192b8b1bc418ffd1ebd3bf";
672 };
717 };
673 };
718 };
674 "source-map-0.5.6" = {
719 "source-map-0.5.7" = {
675 name = "source-map";
720 name = "source-map";
676 packageName = "source-map";
721 packageName = "source-map";
677 version = "0.5.6";
722 version = "0.5.7";
678 src = fetchurl {
723 src = fetchurl {
679 url = "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz";
724 url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
680 sha1 = "75ce38f52bf0733c5a7f0c118d81334a2bb5f412";
725 sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
726 };
727 };
728 "request-2.82.0" = {
729 name = "request";
730 packageName = "request";
731 version = "2.82.0";
732 src = fetchurl {
733 url = "https://registry.npmjs.org/request/-/request-2.82.0.tgz";
734 sha1 = "2ba8a92cd7ac45660ea2b10a53ae67cd247516ea";
681 };
735 };
682 };
736 };
683 "prr-0.0.0" = {
737 "prr-0.0.0" = {
684 name = "prr";
738 name = "prr";
685 packageName = "prr";
739 packageName = "prr";
686 version = "0.0.0";
740 version = "0.0.0";
687 src = fetchurl {
741 src = fetchurl {
688 url = "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz";
742 url = "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz";
689 sha1 = "1a84b85908325501411853d0081ee3fa86e2926a";
743 sha1 = "1a84b85908325501411853d0081ee3fa86e2926a";
690 };
744 };
691 };
745 };
692 "minimist-0.0.8" = {
746 "minimist-0.0.8" = {
693 name = "minimist";
747 name = "minimist";
694 packageName = "minimist";
748 packageName = "minimist";
695 version = "0.0.8";
749 version = "0.0.8";
696 src = fetchurl {
750 src = fetchurl {
697 url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
751 url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
698 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
752 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
699 };
753 };
700 };
754 };
701 "asap-2.0.5" = {
755 "asap-2.0.6" = {
702 name = "asap";
756 name = "asap";
703 packageName = "asap";
757 packageName = "asap";
704 version = "2.0.5";
758 version = "2.0.6";
759 src = fetchurl {
760 url = "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz";
761 sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46";
762 };
763 };
764 "aws-sign2-0.7.0" = {
765 name = "aws-sign2";
766 packageName = "aws-sign2";
767 version = "0.7.0";
768 src = fetchurl {
769 url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
770 sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
771 };
772 };
773 "aws4-1.6.0" = {
774 name = "aws4";
775 packageName = "aws4";
776 version = "1.6.0";
777 src = fetchurl {
778 url = "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz";
779 sha1 = "83ef5ca860b2b32e4a0deedee8c771b9db57471e";
780 };
781 };
782 "caseless-0.12.0" = {
783 name = "caseless";
784 packageName = "caseless";
785 version = "0.12.0";
786 src = fetchurl {
787 url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
788 sha1 = "1b681c21ff84033c826543090689420d187151dc";
789 };
790 };
791 "combined-stream-1.0.5" = {
792 name = "combined-stream";
793 packageName = "combined-stream";
794 version = "1.0.5";
795 src = fetchurl {
796 url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz";
797 sha1 = "938370a57b4a51dea2c77c15d5c5fdf895164009";
798 };
799 };
800 "extend-3.0.1" = {
801 name = "extend";
802 packageName = "extend";
803 version = "3.0.1";
804 src = fetchurl {
805 url = "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz";
806 sha1 = "a755ea7bc1adfcc5a31ce7e762dbaadc5e636444";
807 };
808 };
809 "forever-agent-0.6.1" = {
810 name = "forever-agent";
811 packageName = "forever-agent";
812 version = "0.6.1";
813 src = fetchurl {
814 url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
815 sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
816 };
817 };
818 "form-data-2.3.1" = {
819 name = "form-data";
820 packageName = "form-data";
821 version = "2.3.1";
822 src = fetchurl {
823 url = "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz";
824 sha1 = "6fb94fbd71885306d73d15cc497fe4cc4ecd44bf";
825 };
826 };
827 "har-validator-5.0.3" = {
828 name = "har-validator";
829 packageName = "har-validator";
830 version = "5.0.3";
831 src = fetchurl {
832 url = "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz";
833 sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd";
834 };
835 };
836 "hawk-6.0.2" = {
837 name = "hawk";
838 packageName = "hawk";
839 version = "6.0.2";
840 src = fetchurl {
841 url = "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz";
842 sha1 = "af4d914eb065f9b5ce4d9d11c1cb2126eecc3038";
843 };
844 };
845 "http-signature-1.2.0" = {
846 name = "http-signature";
847 packageName = "http-signature";
848 version = "1.2.0";
849 src = fetchurl {
850 url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
851 sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
852 };
853 };
854 "is-typedarray-1.0.0" = {
855 name = "is-typedarray";
856 packageName = "is-typedarray";
857 version = "1.0.0";
858 src = fetchurl {
859 url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
860 sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
861 };
862 };
863 "isstream-0.1.2" = {
864 name = "isstream";
865 packageName = "isstream";
866 version = "0.1.2";
867 src = fetchurl {
868 url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
869 sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
870 };
871 };
872 "json-stringify-safe-5.0.1" = {
873 name = "json-stringify-safe";
874 packageName = "json-stringify-safe";
875 version = "5.0.1";
876 src = fetchurl {
877 url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
878 sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
879 };
880 };
881 "mime-types-2.1.17" = {
882 name = "mime-types";
883 packageName = "mime-types";
884 version = "2.1.17";
885 src = fetchurl {
886 url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz";
887 sha1 = "09d7a393f03e995a79f8af857b70a9e0ab16557a";
888 };
889 };
890 "oauth-sign-0.8.2" = {
891 name = "oauth-sign";
892 packageName = "oauth-sign";
893 version = "0.8.2";
894 src = fetchurl {
895 url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz";
896 sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43";
897 };
898 };
899 "performance-now-2.1.0" = {
900 name = "performance-now";
901 packageName = "performance-now";
902 version = "2.1.0";
903 src = fetchurl {
904 url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
905 sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
906 };
907 };
908 "qs-6.5.1" = {
909 name = "qs";
910 packageName = "qs";
911 version = "6.5.1";
912 src = fetchurl {
913 url = "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz";
914 sha1 = "349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8";
915 };
916 };
917 "safe-buffer-5.1.1" = {
918 name = "safe-buffer";
919 packageName = "safe-buffer";
920 version = "5.1.1";
921 src = fetchurl {
922 url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz";
923 sha1 = "893312af69b2123def71f57889001671eeb2c853";
924 };
925 };
926 "stringstream-0.0.5" = {
927 name = "stringstream";
928 packageName = "stringstream";
929 version = "0.0.5";
930 src = fetchurl {
931 url = "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz";
932 sha1 = "4e484cd4de5a0bbbee18e46307710a8a81621878";
933 };
934 };
935 "tough-cookie-2.3.3" = {
936 name = "tough-cookie";
937 packageName = "tough-cookie";
938 version = "2.3.3";
939 src = fetchurl {
940 url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz";
941 sha1 = "0b618a5565b6dea90bf3425d04d55edc475a7561";
942 };
943 };
944 "tunnel-agent-0.6.0" = {
945 name = "tunnel-agent";
946 packageName = "tunnel-agent";
947 version = "0.6.0";
948 src = fetchurl {
949 url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
950 sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
951 };
952 };
953 "uuid-3.1.0" = {
954 name = "uuid";
955 packageName = "uuid";
956 version = "3.1.0";
957 src = fetchurl {
958 url = "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz";
959 sha1 = "3dd3d3e790abc24d7b0d3a034ffababe28ebbc04";
960 };
961 };
962 "delayed-stream-1.0.0" = {
963 name = "delayed-stream";
964 packageName = "delayed-stream";
965 version = "1.0.0";
966 src = fetchurl {
967 url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
968 sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
969 };
970 };
971 "asynckit-0.4.0" = {
972 name = "asynckit";
973 packageName = "asynckit";
974 version = "0.4.0";
975 src = fetchurl {
976 url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
977 sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
978 };
979 };
980 "ajv-5.2.2" = {
981 name = "ajv";
982 packageName = "ajv";
983 version = "5.2.2";
984 src = fetchurl {
985 url = "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz";
986 sha1 = "47c68d69e86f5d953103b0074a9430dc63da5e39";
987 };
988 };
989 "har-schema-2.0.0" = {
990 name = "har-schema";
991 packageName = "har-schema";
992 version = "2.0.0";
705 src = fetchurl {
993 src = fetchurl {
706 url = "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz";
994 url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
707 sha1 = "522765b50c3510490e52d7dcfe085ef9ba96958f";
995 sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
996 };
997 };
998 "co-4.6.0" = {
999 name = "co";
1000 packageName = "co";
1001 version = "4.6.0";
1002 src = fetchurl {
1003 url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz";
1004 sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
1005 };
1006 };
1007 "fast-deep-equal-1.0.0" = {
1008 name = "fast-deep-equal";
1009 packageName = "fast-deep-equal";
1010 version = "1.0.0";
1011 src = fetchurl {
1012 url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz";
1013 sha1 = "96256a3bc975595eb36d82e9929d060d893439ff";
1014 };
1015 };
1016 "json-schema-traverse-0.3.1" = {
1017 name = "json-schema-traverse";
1018 packageName = "json-schema-traverse";
1019 version = "0.3.1";
1020 src = fetchurl {
1021 url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
1022 sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340";
1023 };
1024 };
1025 "json-stable-stringify-1.0.1" = {
1026 name = "json-stable-stringify";
1027 packageName = "json-stable-stringify";
1028 version = "1.0.1";
1029 src = fetchurl {
1030 url = "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz";
1031 sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af";
1032 };
1033 };
1034 "jsonify-0.0.0" = {
1035 name = "jsonify";
1036 packageName = "jsonify";
1037 version = "0.0.0";
1038 src = fetchurl {
1039 url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz";
1040 sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
1041 };
1042 };
1043 "hoek-4.2.0" = {
1044 name = "hoek";
1045 packageName = "hoek";
1046 version = "4.2.0";
1047 src = fetchurl {
1048 url = "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz";
1049 sha1 = "72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d";
1050 };
1051 };
1052 "boom-4.3.1" = {
1053 name = "boom";
1054 packageName = "boom";
1055 version = "4.3.1";
1056 src = fetchurl {
1057 url = "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz";
1058 sha1 = "4f8a3005cb4a7e3889f749030fd25b96e01d2e31";
1059 };
1060 };
1061 "cryptiles-3.1.2" = {
1062 name = "cryptiles";
1063 packageName = "cryptiles";
1064 version = "3.1.2";
1065 src = fetchurl {
1066 url = "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz";
1067 sha1 = "a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe";
1068 };
1069 };
1070 "sntp-2.0.2" = {
1071 name = "sntp";
1072 packageName = "sntp";
1073 version = "2.0.2";
1074 src = fetchurl {
1075 url = "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz";
1076 sha1 = "5064110f0af85f7cfdb7d6b67a40028ce52b4b2b";
1077 };
1078 };
1079 "boom-5.2.0" = {
1080 name = "boom";
1081 packageName = "boom";
1082 version = "5.2.0";
1083 src = fetchurl {
1084 url = "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz";
1085 sha1 = "5dd9da6ee3a5f302077436290cb717d3f4a54e02";
1086 };
1087 };
1088 "assert-plus-1.0.0" = {
1089 name = "assert-plus";
1090 packageName = "assert-plus";
1091 version = "1.0.0";
1092 src = fetchurl {
1093 url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
1094 sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
1095 };
1096 };
1097 "jsprim-1.4.1" = {
1098 name = "jsprim";
1099 packageName = "jsprim";
1100 version = "1.4.1";
1101 src = fetchurl {
1102 url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
1103 sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
1104 };
1105 };
1106 "sshpk-1.13.1" = {
1107 name = "sshpk";
1108 packageName = "sshpk";
1109 version = "1.13.1";
1110 src = fetchurl {
1111 url = "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz";
1112 sha1 = "512df6da6287144316dc4c18fe1cf1d940739be3";
1113 };
1114 };
1115 "extsprintf-1.3.0" = {
1116 name = "extsprintf";
1117 packageName = "extsprintf";
1118 version = "1.3.0";
1119 src = fetchurl {
1120 url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
1121 sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
1122 };
1123 };
1124 "json-schema-0.2.3" = {
1125 name = "json-schema";
1126 packageName = "json-schema";
1127 version = "0.2.3";
1128 src = fetchurl {
1129 url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
1130 sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
1131 };
1132 };
1133 "verror-1.10.0" = {
1134 name = "verror";
1135 packageName = "verror";
1136 version = "1.10.0";
1137 src = fetchurl {
1138 url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
1139 sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
1140 };
1141 };
1142 "core-util-is-1.0.2" = {
1143 name = "core-util-is";
1144 packageName = "core-util-is";
1145 version = "1.0.2";
1146 src = fetchurl {
1147 url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
1148 sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
1149 };
1150 };
1151 "asn1-0.2.3" = {
1152 name = "asn1";
1153 packageName = "asn1";
1154 version = "0.2.3";
1155 src = fetchurl {
1156 url = "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz";
1157 sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86";
1158 };
1159 };
1160 "dashdash-1.14.1" = {
1161 name = "dashdash";
1162 packageName = "dashdash";
1163 version = "1.14.1";
1164 src = fetchurl {
1165 url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
1166 sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
1167 };
1168 };
1169 "getpass-0.1.7" = {
1170 name = "getpass";
1171 packageName = "getpass";
1172 version = "0.1.7";
1173 src = fetchurl {
1174 url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
1175 sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
1176 };
1177 };
1178 "jsbn-0.1.1" = {
1179 name = "jsbn";
1180 packageName = "jsbn";
1181 version = "0.1.1";
1182 src = fetchurl {
1183 url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
1184 sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
1185 };
1186 };
1187 "tweetnacl-0.14.5" = {
1188 name = "tweetnacl";
1189 packageName = "tweetnacl";
1190 version = "0.14.5";
1191 src = fetchurl {
1192 url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
1193 sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
1194 };
1195 };
1196 "ecc-jsbn-0.1.1" = {
1197 name = "ecc-jsbn";
1198 packageName = "ecc-jsbn";
1199 version = "0.1.1";
1200 src = fetchurl {
1201 url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz";
1202 sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505";
1203 };
1204 };
1205 "bcrypt-pbkdf-1.0.1" = {
1206 name = "bcrypt-pbkdf";
1207 packageName = "bcrypt-pbkdf";
1208 version = "1.0.1";
1209 src = fetchurl {
1210 url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz";
1211 sha1 = "63bc5dcb61331b92bc05fd528953c33462a06f8d";
1212 };
1213 };
1214 "mime-db-1.30.0" = {
1215 name = "mime-db";
1216 packageName = "mime-db";
1217 version = "1.30.0";
1218 src = fetchurl {
1219 url = "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz";
1220 sha1 = "74c643da2dd9d6a45399963465b26d5ca7d71f01";
1221 };
1222 };
1223 "punycode-1.4.1" = {
1224 name = "punycode";
1225 packageName = "punycode";
1226 version = "1.4.1";
1227 src = fetchurl {
1228 url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
1229 sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
708 };
1230 };
709 };
1231 };
710 "gaze-0.5.2" = {
1232 "gaze-0.5.2" = {
711 name = "gaze";
1233 name = "gaze";
712 packageName = "gaze";
1234 packageName = "gaze";
713 version = "0.5.2";
1235 version = "0.5.2";
714 src = fetchurl {
1236 src = fetchurl {
715 url = "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
1237 url = "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
716 sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
1238 sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
717 };
1239 };
718 };
1240 };
719 "tiny-lr-fork-0.0.5" = {
1241 "tiny-lr-fork-0.0.5" = {
720 name = "tiny-lr-fork";
1242 name = "tiny-lr-fork";
721 packageName = "tiny-lr-fork";
1243 packageName = "tiny-lr-fork";
722 version = "0.0.5";
1244 version = "0.0.5";
723 src = fetchurl {
1245 src = fetchurl {
724 url = "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz";
1246 url = "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz";
725 sha1 = "1e99e1e2a8469b736ab97d97eefa98c71f76ed0a";
1247 sha1 = "1e99e1e2a8469b736ab97d97eefa98c71f76ed0a";
726 };
1248 };
727 };
1249 };
728 "async-0.2.10" = {
1250 "async-0.2.10" = {
729 name = "async";
1251 name = "async";
730 packageName = "async";
1252 packageName = "async";
731 version = "0.2.10";
1253 version = "0.2.10";
732 src = fetchurl {
1254 src = fetchurl {
733 url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
1255 url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
734 sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
1256 sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
735 };
1257 };
736 };
1258 };
737 "globule-0.1.0" = {
1259 "globule-0.1.0" = {
738 name = "globule";
1260 name = "globule";
739 packageName = "globule";
1261 packageName = "globule";
740 version = "0.1.0";
1262 version = "0.1.0";
741 src = fetchurl {
1263 src = fetchurl {
742 url = "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
1264 url = "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
743 sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
1265 sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
744 };
1266 };
745 };
1267 };
746 "lodash-1.0.2" = {
1268 "lodash-1.0.2" = {
747 name = "lodash";
1269 name = "lodash";
748 packageName = "lodash";
1270 packageName = "lodash";
749 version = "1.0.2";
1271 version = "1.0.2";
750 src = fetchurl {
1272 src = fetchurl {
751 url = "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
1273 url = "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
752 sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
1274 sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
753 };
1275 };
754 };
1276 };
755 "qs-0.5.6" = {
1277 "qs-0.5.6" = {
756 name = "qs";
1278 name = "qs";
757 packageName = "qs";
1279 packageName = "qs";
758 version = "0.5.6";
1280 version = "0.5.6";
759 src = fetchurl {
1281 src = fetchurl {
760 url = "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz";
1282 url = "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz";
761 sha1 = "31b1ad058567651c526921506b9a8793911a0384";
1283 sha1 = "31b1ad058567651c526921506b9a8793911a0384";
762 };
1284 };
763 };
1285 };
764 "faye-websocket-0.4.4" = {
1286 "faye-websocket-0.4.4" = {
765 name = "faye-websocket";
1287 name = "faye-websocket";
766 packageName = "faye-websocket";
1288 packageName = "faye-websocket";
767 version = "0.4.4";
1289 version = "0.4.4";
768 src = fetchurl {
1290 src = fetchurl {
769 url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz";
1291 url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz";
770 sha1 = "c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc";
1292 sha1 = "c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc";
771 };
1293 };
772 };
1294 };
773 "noptify-0.0.3" = {
1295 "noptify-0.0.3" = {
774 name = "noptify";
1296 name = "noptify";
775 packageName = "noptify";
1297 packageName = "noptify";
776 version = "0.0.3";
1298 version = "0.0.3";
777 src = fetchurl {
1299 src = fetchurl {
778 url = "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz";
1300 url = "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz";
779 sha1 = "58f654a73d9753df0c51d9686dc92104a67f4bbb";
1301 sha1 = "58f654a73d9753df0c51d9686dc92104a67f4bbb";
780 };
1302 };
781 };
1303 };
782 "debug-0.7.4" = {
1304 "debug-0.7.4" = {
783 name = "debug";
1305 name = "debug";
784 packageName = "debug";
1306 packageName = "debug";
785 version = "0.7.4";
1307 version = "0.7.4";
786 src = fetchurl {
1308 src = fetchurl {
787 url = "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
1309 url = "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
788 sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
1310 sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
789 };
1311 };
790 };
1312 };
791 "nopt-2.0.0" = {
1313 "nopt-2.0.0" = {
792 name = "nopt";
1314 name = "nopt";
793 packageName = "nopt";
1315 packageName = "nopt";
794 version = "2.0.0";
1316 version = "2.0.0";
795 src = fetchurl {
1317 src = fetchurl {
796 url = "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz";
1318 url = "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz";
797 sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d";
1319 sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d";
798 };
1320 };
799 };
1321 };
800 "command-line-args-2.1.6" = {
1322 "command-line-args-3.0.5" = {
801 name = "command-line-args";
1323 name = "command-line-args";
802 packageName = "command-line-args";
1324 packageName = "command-line-args";
803 version = "2.1.6";
1325 version = "3.0.5";
804 src = fetchurl {
1326 src = fetchurl {
805 url = "https://registry.npmjs.org/command-line-args/-/command-line-args-2.1.6.tgz";
1327 url = "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz";
806 sha1 = "f197d6eaff34c9085577484b2864375b294f5697";
1328 sha1 = "5bd4ad45e7983e5c1344918e40280ee2693c5ac0";
1329 };
1330 };
1331 "command-line-usage-3.0.8" = {
1332 name = "command-line-usage";
1333 packageName = "command-line-usage";
1334 version = "3.0.8";
1335 src = fetchurl {
1336 url = "https://registry.npmjs.org/command-line-usage/-/command-line-usage-3.0.8.tgz";
1337 sha1 = "b6a20978c1b383477f5c11a529428b880bfe0f4d";
807 };
1338 };
808 };
1339 };
809 "dom5-1.3.6" = {
1340 "dom5-1.3.6" = {
810 name = "dom5";
1341 name = "dom5";
811 packageName = "dom5";
1342 packageName = "dom5";
812 version = "1.3.6";
1343 version = "1.3.6";
813 src = fetchurl {
1344 src = fetchurl {
814 url = "https://registry.npmjs.org/dom5/-/dom5-1.3.6.tgz";
1345 url = "https://registry.npmjs.org/dom5/-/dom5-1.3.6.tgz";
815 sha1 = "a7088a9fc5f3b08dc9f6eda4c7abaeb241945e0d";
1346 sha1 = "a7088a9fc5f3b08dc9f6eda4c7abaeb241945e0d";
816 };
1347 };
817 };
1348 };
818 "array-back-1.0.3" = {
1349 "array-back-1.0.4" = {
819 name = "array-back";
1350 name = "array-back";
820 packageName = "array-back";
1351 packageName = "array-back";
821 version = "1.0.3";
1352 version = "1.0.4";
822 src = fetchurl {
823 url = "https://registry.npmjs.org/array-back/-/array-back-1.0.3.tgz";
824 sha1 = "f1128a5cf1b91c80bed4a218f8c5b635c8b10663";
825 };
826 };
827 "command-line-usage-2.0.5" = {
828 name = "command-line-usage";
829 packageName = "command-line-usage";
830 version = "2.0.5";
831 src = fetchurl {
1353 src = fetchurl {
832 url = "https://registry.npmjs.org/command-line-usage/-/command-line-usage-2.0.5.tgz";
1354 url = "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz";
833 sha1 = "f80c35ca5e8624841923ea3be3b9bfbf4f7be27b";
1355 sha1 = "644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b";
834 };
835 };
836 "core-js-2.4.1" = {
837 name = "core-js";
838 packageName = "core-js";
839 version = "2.4.1";
840 src = fetchurl {
841 url = "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz";
842 sha1 = "4de911e667b0eae9124e34254b53aea6fc618d3e";
843 };
1356 };
844 };
1357 };
845 "feature-detect-es6-1.3.1" = {
1358 "feature-detect-es6-1.3.1" = {
846 name = "feature-detect-es6";
1359 name = "feature-detect-es6";
847 packageName = "feature-detect-es6";
1360 packageName = "feature-detect-es6";
848 version = "1.3.1";
1361 version = "1.3.1";
849 src = fetchurl {
1362 src = fetchurl {
850 url = "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz";
1363 url = "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz";
851 sha1 = "f888736af9cb0c91f55663bfa4762eb96ee7047f";
1364 sha1 = "f888736af9cb0c91f55663bfa4762eb96ee7047f";
852 };
1365 };
853 };
1366 };
854 "find-replace-1.0.2" = {
1367 "find-replace-1.0.3" = {
855 name = "find-replace";
1368 name = "find-replace";
856 packageName = "find-replace";
1369 packageName = "find-replace";
857 version = "1.0.2";
1370 version = "1.0.3";
858 src = fetchurl {
1371 src = fetchurl {
859 url = "https://registry.npmjs.org/find-replace/-/find-replace-1.0.2.tgz";
1372 url = "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz";
860 sha1 = "a2d6ce740d15f0d92b1b26763e2ce9c0e361fd98";
1373 sha1 = "b88e7364d2d9c959559f388c66670d6130441fa0";
861 };
1374 };
862 };
1375 };
863 "typical-2.6.0" = {
1376 "typical-2.6.1" = {
864 name = "typical";
1377 name = "typical";
865 packageName = "typical";
1378 packageName = "typical";
866 version = "2.6.0";
1379 version = "2.6.1";
867 src = fetchurl {
868 url = "https://registry.npmjs.org/typical/-/typical-2.6.0.tgz";
869 sha1 = "89d51554ab139848a65bcc2c8772f8fb450c40ed";
870 };
871 };
872 "ansi-escape-sequences-2.2.2" = {
873 name = "ansi-escape-sequences";
874 packageName = "ansi-escape-sequences";
875 version = "2.2.2";
876 src = fetchurl {
877 url = "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-2.2.2.tgz";
878 sha1 = "174c78d6f8b7de75f8957ae81c7f72210c701635";
879 };
880 };
881 "column-layout-2.1.4" = {
882 name = "column-layout";
883 packageName = "column-layout";
884 version = "2.1.4";
885 src = fetchurl {
886 url = "https://registry.npmjs.org/column-layout/-/column-layout-2.1.4.tgz";
887 sha1 = "ed2857092ccf8338026fe538379d9672d70b3641";
888 };
889 };
890 "wordwrapjs-1.2.1" = {
891 name = "wordwrapjs";
892 packageName = "wordwrapjs";
893 version = "1.2.1";
894 src = fetchurl {
895 url = "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-1.2.1.tgz";
896 sha1 = "754a5ea0664cfbff50540dc32d67bda3289fc34b";
897 };
898 };
899 "collect-all-0.2.1" = {
900 name = "collect-all";
901 packageName = "collect-all";
902 version = "0.2.1";
903 src = fetchurl {
904 url = "https://registry.npmjs.org/collect-all/-/collect-all-0.2.1.tgz";
905 sha1 = "7225fb4585c22d4ffac886f0abaf5abc563a1a6a";
906 };
907 };
908 "stream-connect-1.0.2" = {
909 name = "stream-connect";
910 packageName = "stream-connect";
911 version = "1.0.2";
912 src = fetchurl {
913 url = "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz";
914 sha1 = "18bc81f2edb35b8b5d9a8009200a985314428a97";
915 };
916 };
917 "stream-via-0.1.1" = {
918 name = "stream-via";
919 packageName = "stream-via";
920 version = "0.1.1";
921 src = fetchurl {
1380 src = fetchurl {
922 url = "https://registry.npmjs.org/stream-via/-/stream-via-0.1.1.tgz";
1381 url = "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz";
923 sha1 = "0cee5df9c959fb1d3f4eda4819f289d5f9205afc";
1382 sha1 = "5c080e5d661cbbe38259d2e70a3c7253e873881d";
924 };
925 };
926 "collect-json-1.0.8" = {
927 name = "collect-json";
928 packageName = "collect-json";
929 version = "1.0.8";
930 src = fetchurl {
931 url = "https://registry.npmjs.org/collect-json/-/collect-json-1.0.8.tgz";
932 sha1 = "aa2fa52b4d1d9444ce690f07a1e3617ab74bb827";
933 };
934 };
935 "deep-extend-0.4.1" = {
936 name = "deep-extend";
937 packageName = "deep-extend";
938 version = "0.4.1";
939 src = fetchurl {
940 url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz";
941 sha1 = "efe4113d08085f4e6f9687759810f807469e2253";
942 };
943 };
944 "object-tools-2.0.6" = {
945 name = "object-tools";
946 packageName = "object-tools";
947 version = "2.0.6";
948 src = fetchurl {
949 url = "https://registry.npmjs.org/object-tools/-/object-tools-2.0.6.tgz";
950 sha1 = "f3fe1c350cda4a6f5d99d9646dc4892a02476ddd";
951 };
952 };
953 "collect-all-1.0.2" = {
954 name = "collect-all";
955 packageName = "collect-all";
956 version = "1.0.2";
957 src = fetchurl {
958 url = "https://registry.npmjs.org/collect-all/-/collect-all-1.0.2.tgz";
959 sha1 = "39450f1e7aa6086570a006bce93ccf1218a77ea1";
960 };
961 };
962 "stream-via-1.0.3" = {
963 name = "stream-via";
964 packageName = "stream-via";
965 version = "1.0.3";
966 src = fetchurl {
967 url = "https://registry.npmjs.org/stream-via/-/stream-via-1.0.3.tgz";
968 sha1 = "cebd32a5a59d74b3b68e3404942e867184ad4ac9";
969 };
970 };
971 "object-get-2.1.0" = {
972 name = "object-get";
973 packageName = "object-get";
974 version = "2.1.0";
975 src = fetchurl {
976 url = "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz";
977 sha1 = "722bbdb60039efa47cad3c6dc2ce51a85c02c5ae";
978 };
979 };
980 "test-value-1.1.0" = {
981 name = "test-value";
982 packageName = "test-value";
983 version = "1.1.0";
984 src = fetchurl {
985 url = "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz";
986 sha1 = "a09136f72ec043d27c893707c2b159bfad7de93f";
987 };
1383 };
988 };
1384 };
989 "test-value-2.1.0" = {
1385 "test-value-2.1.0" = {
990 name = "test-value";
1386 name = "test-value";
991 packageName = "test-value";
1387 packageName = "test-value";
992 version = "2.1.0";
1388 version = "2.1.0";
993 src = fetchurl {
1389 src = fetchurl {
994 url = "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz";
1390 url = "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz";
995 sha1 = "11da6ff670f3471a73b625ca4f3fdcf7bb748291";
1391 sha1 = "11da6ff670f3471a73b625ca4f3fdcf7bb748291";
996 };
1392 };
997 };
1393 };
1394 "ansi-escape-sequences-3.0.0" = {
1395 name = "ansi-escape-sequences";
1396 packageName = "ansi-escape-sequences";
1397 version = "3.0.0";
1398 src = fetchurl {
1399 url = "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz";
1400 sha1 = "1c18394b6af9b76ff9a63509fa497669fd2ce53e";
1401 };
1402 };
1403 "table-layout-0.3.0" = {
1404 name = "table-layout";
1405 packageName = "table-layout";
1406 version = "0.3.0";
1407 src = fetchurl {
1408 url = "https://registry.npmjs.org/table-layout/-/table-layout-0.3.0.tgz";
1409 sha1 = "6ee20dc483db371b3e5c87f704ed2f7c799d2c9a";
1410 };
1411 };
1412 "core-js-2.5.1" = {
1413 name = "core-js";
1414 packageName = "core-js";
1415 version = "2.5.1";
1416 src = fetchurl {
1417 url = "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz";
1418 sha1 = "ae6874dc66937789b80754ff5428df66819ca50b";
1419 };
1420 };
1421 "deep-extend-0.4.2" = {
1422 name = "deep-extend";
1423 packageName = "deep-extend";
1424 version = "0.4.2";
1425 src = fetchurl {
1426 url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz";
1427 sha1 = "48b699c27e334bf89f10892be432f6e4c7d34a7f";
1428 };
1429 };
1430 "wordwrapjs-2.0.0" = {
1431 name = "wordwrapjs";
1432 packageName = "wordwrapjs";
1433 version = "2.0.0";
1434 src = fetchurl {
1435 url = "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-2.0.0.tgz";
1436 sha1 = "ab55f695e6118da93858fdd70c053d1c5e01ac20";
1437 };
1438 };
1439 "reduce-flatten-1.0.1" = {
1440 name = "reduce-flatten";
1441 packageName = "reduce-flatten";
1442 version = "1.0.1";
1443 src = fetchurl {
1444 url = "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz";
1445 sha1 = "258c78efd153ddf93cb561237f61184f3696e327";
1446 };
1447 };
998 "@types/clone-0.1.30" = {
1448 "@types/clone-0.1.30" = {
999 name = "@types/clone";
1449 name = "@types/clone";
1000 packageName = "@types/clone";
1450 packageName = "@types/clone";
1001 version = "0.1.30";
1451 version = "0.1.30";
1002 src = fetchurl {
1452 src = fetchurl {
1003 url = "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz";
1453 url = "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz";
1004 sha1 = "e7365648c1b42136a59c7d5040637b3b5c83b614";
1454 sha1 = "e7365648c1b42136a59c7d5040637b3b5c83b614";
1005 };
1455 };
1006 };
1456 };
1007 "@types/node-4.0.30" = {
1457 "@types/node-4.2.20" = {
1008 name = "@types/node";
1458 name = "@types/node";
1009 packageName = "@types/node";
1459 packageName = "@types/node";
1010 version = "4.0.30";
1460 version = "4.2.20";
1011 src = fetchurl {
1461 src = fetchurl {
1012 url = "https://registry.npmjs.org/@types/node/-/node-4.0.30.tgz";
1462 url = "https://registry.npmjs.org/@types/node/-/node-4.2.20.tgz";
1013 sha1 = "553f490ed3030311620f88003e7abfc0edcb301e";
1463 sha1 = "3f7dceff43e07cfff4407fc3495d98a533b32267";
1014 };
1464 };
1015 };
1465 };
1016 "@types/parse5-0.0.31" = {
1466 "@types/parse5-0.0.31" = {
1017 name = "@types/parse5";
1467 name = "@types/parse5";
1018 packageName = "@types/parse5";
1468 packageName = "@types/parse5";
1019 version = "0.0.31";
1469 version = "0.0.31";
1020 src = fetchurl {
1470 src = fetchurl {
1021 url = "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.31.tgz";
1471 url = "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.31.tgz";
1022 sha1 = "e827a493a443b156e1b582a2e4c3bdc0040f2ee7";
1472 sha1 = "e827a493a443b156e1b582a2e4c3bdc0040f2ee7";
1023 };
1473 };
1024 };
1474 };
1025 "clone-1.0.2" = {
1475 "clone-1.0.2" = {
1026 name = "clone";
1476 name = "clone";
1027 packageName = "clone";
1477 packageName = "clone";
1028 version = "1.0.2";
1478 version = "1.0.2";
1029 src = fetchurl {
1479 src = fetchurl {
1030 url = "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz";
1480 url = "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz";
1031 sha1 = "260b7a99ebb1edfe247538175f783243cb19d149";
1481 sha1 = "260b7a99ebb1edfe247538175f783243cb19d149";
1032 };
1482 };
1033 };
1483 };
1034 "parse5-1.5.1" = {
1484 "parse5-1.5.1" = {
1035 name = "parse5";
1485 name = "parse5";
1036 packageName = "parse5";
1486 packageName = "parse5";
1037 version = "1.5.1";
1487 version = "1.5.1";
1038 src = fetchurl {
1488 src = fetchurl {
1039 url = "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";
1489 url = "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";
1040 sha1 = "9b7f3b0de32be78dc2401b17573ccaf0f6f59d94";
1490 sha1 = "9b7f3b0de32be78dc2401b17573ccaf0f6f59d94";
1041 };
1491 };
1042 };
1492 };
1043 "@types/node-6.0.41" = {
1493 "@types/node-6.0.88" = {
1044 name = "@types/node";
1494 name = "@types/node";
1045 packageName = "@types/node";
1495 packageName = "@types/node";
1046 version = "6.0.41";
1496 version = "6.0.88";
1047 src = fetchurl {
1497 src = fetchurl {
1048 url = "https://registry.npmjs.org/@types/node/-/node-6.0.41.tgz";
1498 url = "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz";
1049 sha1 = "578cf53aaec65887bcaf16792f8722932e8ff8ea";
1499 sha1 = "f618f11a944f6a18d92b5c472028728a3e3d4b66";
1050 };
1500 };
1051 };
1501 };
1052 "es6-promise-2.3.0" = {
1502 "es6-promise-2.3.0" = {
1053 name = "es6-promise";
1503 name = "es6-promise";
1054 packageName = "es6-promise";
1504 packageName = "es6-promise";
1055 version = "2.3.0";
1505 version = "2.3.0";
1056 src = fetchurl {
1506 src = fetchurl {
1057 url = "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz";
1507 url = "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz";
1058 sha1 = "96edb9f2fdb01995822b263dd8aadab6748181bc";
1508 sha1 = "96edb9f2fdb01995822b263dd8aadab6748181bc";
1059 };
1509 };
1060 };
1510 };
1061 "hydrolysis-1.24.1" = {
1511 "hydrolysis-1.25.0" = {
1062 name = "hydrolysis";
1512 name = "hydrolysis";
1063 packageName = "hydrolysis";
1513 packageName = "hydrolysis";
1064 version = "1.24.1";
1514 version = "1.25.0";
1065 src = fetchurl {
1515 src = fetchurl {
1066 url = "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.24.1.tgz";
1516 url = "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.25.0.tgz";
1067 sha1 = "0f94f055d1065ac0d81ff40b762d143fef07eff4";
1517 sha1 = "a4fb14a37a1e03b0db52d8aaa57c682272a14d84";
1068 };
1518 };
1069 };
1519 };
1070 "nopt-3.0.6" = {
1520 "nopt-3.0.6" = {
1071 name = "nopt";
1521 name = "nopt";
1072 packageName = "nopt";
1522 packageName = "nopt";
1073 version = "3.0.6";
1523 version = "3.0.6";
1074 src = fetchurl {
1524 src = fetchurl {
1075 url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
1525 url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
1076 sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
1526 sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
1077 };
1527 };
1078 };
1528 };
1079 "path-posix-1.0.0" = {
1529 "path-posix-1.0.0" = {
1080 name = "path-posix";
1530 name = "path-posix";
1081 packageName = "path-posix";
1531 packageName = "path-posix";
1082 version = "1.0.0";
1532 version = "1.0.0";
1083 src = fetchurl {
1533 src = fetchurl {
1084 url = "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz";
1534 url = "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz";
1085 sha1 = "06b26113f56beab042545a23bfa88003ccac260f";
1535 sha1 = "06b26113f56beab042545a23bfa88003ccac260f";
1086 };
1536 };
1087 };
1537 };
1088 "update-notifier-0.6.3" = {
1538 "acorn-3.3.0" = {
1089 name = "update-notifier";
1539 name = "acorn";
1090 packageName = "update-notifier";
1540 packageName = "acorn";
1091 version = "0.6.3";
1541 version = "3.3.0";
1092 src = fetchurl {
1542 src = fetchurl {
1093 url = "https://registry.npmjs.org/update-notifier/-/update-notifier-0.6.3.tgz";
1543 url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
1094 sha1 = "776dec8daa13e962a341e8a1d98354306b67ae08";
1544 sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
1095 };
1545 };
1096 };
1546 };
1097 "babel-polyfill-6.13.0" = {
1547 "babel-polyfill-6.26.0" = {
1098 name = "babel-polyfill";
1548 name = "babel-polyfill";
1099 packageName = "babel-polyfill";
1549 packageName = "babel-polyfill";
1100 version = "6.13.0";
1550 version = "6.26.0";
1101 src = fetchurl {
1551 src = fetchurl {
1102 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.13.0.tgz";
1552 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz";
1103 sha1 = "5978215c25d49a697eb78afc54e63c9d3a73d5ec";
1553 sha1 = "379937abc67d7895970adc621f284cd966cf2153";
1104 };
1554 };
1105 };
1555 };
1106 "doctrine-0.7.2" = {
1556 "doctrine-0.7.2" = {
1107 name = "doctrine";
1557 name = "doctrine";
1108 packageName = "doctrine";
1558 packageName = "doctrine";
1109 version = "0.7.2";
1559 version = "0.7.2";
1110 src = fetchurl {
1560 src = fetchurl {
1111 url = "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz";
1561 url = "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz";
1112 sha1 = "7cb860359ba3be90e040b26b729ce4bfa654c523";
1562 sha1 = "7cb860359ba3be90e040b26b729ce4bfa654c523";
1113 };
1563 };
1114 };
1564 };
1115 "escodegen-1.8.1" = {
1565 "dom5-1.1.0" = {
1566 name = "dom5";
1567 packageName = "dom5";
1568 version = "1.1.0";
1569 src = fetchurl {
1570 url = "https://registry.npmjs.org/dom5/-/dom5-1.1.0.tgz";
1571 sha1 = "3a0c7700c083ab4c4d26938a78b0f0c6dcc37794";
1572 };
1573 };
1574 "escodegen-1.9.0" = {
1116 name = "escodegen";
1575 name = "escodegen";
1117 packageName = "escodegen";
1576 packageName = "escodegen";
1118 version = "1.8.1";
1577 version = "1.9.0";
1119 src = fetchurl {
1578 src = fetchurl {
1120 url = "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz";
1579 url = "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz";
1121 sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018";
1580 sha1 = "9811a2f265dc1cd3894420ee3717064b632b8852";
1122 };
1581 };
1123 };
1582 };
1124 "espree-3.3.1" = {
1583 "espree-3.5.1" = {
1125 name = "espree";
1584 name = "espree";
1126 packageName = "espree";
1585 packageName = "espree";
1127 version = "3.3.1";
1586 version = "3.5.1";
1128 src = fetchurl {
1587 src = fetchurl {
1129 url = "https://registry.npmjs.org/espree/-/espree-3.3.1.tgz";
1588 url = "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz";
1130 sha1 = "42107376856738a65ff3b5877f3a58bd52497643";
1589 sha1 = "0c988b8ab46db53100a1954ae4ba995ddd27d87e";
1131 };
1590 };
1132 };
1591 };
1133 "estraverse-3.1.0" = {
1592 "estraverse-3.1.0" = {
1134 name = "estraverse";
1593 name = "estraverse";
1135 packageName = "estraverse";
1594 packageName = "estraverse";
1136 version = "3.1.0";
1595 version = "3.1.0";
1137 src = fetchurl {
1596 src = fetchurl {
1138 url = "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz";
1597 url = "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz";
1139 sha1 = "15e28a446b8b82bc700ccc8b96c78af4da0d6cba";
1598 sha1 = "15e28a446b8b82bc700ccc8b96c78af4da0d6cba";
1140 };
1599 };
1141 };
1600 };
1142 "path-is-absolute-1.0.0" = {
1601 "path-is-absolute-1.0.1" = {
1143 name = "path-is-absolute";
1602 name = "path-is-absolute";
1144 packageName = "path-is-absolute";
1603 packageName = "path-is-absolute";
1145 version = "1.0.0";
1604 version = "1.0.1";
1146 src = fetchurl {
1605 src = fetchurl {
1147 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";
1606 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
1148 sha1 = "263dada66ab3f2fb10bf7f9d24dd8f3e570ef912";
1607 sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
1149 };
1608 };
1150 };
1609 };
1151 "babel-runtime-6.11.6" = {
1610 "babel-runtime-6.26.0" = {
1152 name = "babel-runtime";
1611 name = "babel-runtime";
1153 packageName = "babel-runtime";
1612 packageName = "babel-runtime";
1154 version = "6.11.6";
1613 version = "6.26.0";
1155 src = fetchurl {
1614 src = fetchurl {
1156 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.11.6.tgz";
1615 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";
1157 sha1 = "6db707fef2d49c49bfa3cb64efdb436b518b8222";
1616 sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
1158 };
1617 };
1159 };
1618 };
1160 "regenerator-runtime-0.9.5" = {
1619 "regenerator-runtime-0.10.5" = {
1161 name = "regenerator-runtime";
1620 name = "regenerator-runtime";
1162 packageName = "regenerator-runtime";
1621 packageName = "regenerator-runtime";
1163 version = "0.9.5";
1622 version = "0.10.5";
1164 src = fetchurl {
1623 src = fetchurl {
1165 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz";
1624 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz";
1166 sha1 = "403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc";
1625 sha1 = "336c3efc1220adcedda2c9fab67b5a7955a33658";
1626 };
1627 };
1628 "regenerator-runtime-0.11.0" = {
1629 name = "regenerator-runtime";
1630 packageName = "regenerator-runtime";
1631 version = "0.11.0";
1632 src = fetchurl {
1633 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz";
1634 sha1 = "7e54fe5b5ccd5d6624ea6255c3473be090b802e1";
1167 };
1635 };
1168 };
1636 };
1169 "esutils-1.1.6" = {
1637 "esutils-1.1.6" = {
1170 name = "esutils";
1638 name = "esutils";
1171 packageName = "esutils";
1639 packageName = "esutils";
1172 version = "1.1.6";
1640 version = "1.1.6";
1173 src = fetchurl {
1641 src = fetchurl {
1174 url = "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz";
1642 url = "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz";
1175 sha1 = "c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375";
1643 sha1 = "c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375";
1176 };
1644 };
1177 };
1645 };
1178 "isarray-0.0.1" = {
1646 "isarray-0.0.1" = {
1179 name = "isarray";
1647 name = "isarray";
1180 packageName = "isarray";
1648 packageName = "isarray";
1181 version = "0.0.1";
1649 version = "0.0.1";
1182 src = fetchurl {
1650 src = fetchurl {
1183 url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
1651 url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
1184 sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
1652 sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
1185 };
1653 };
1186 };
1654 };
1187 "estraverse-1.9.3" = {
1655 "estraverse-4.2.0" = {
1188 name = "estraverse";
1656 name = "estraverse";
1189 packageName = "estraverse";
1657 packageName = "estraverse";
1190 version = "1.9.3";
1658 version = "4.2.0";
1191 src = fetchurl {
1659 src = fetchurl {
1192 url = "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz";
1660 url = "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz";
1193 sha1 = "af67f2dc922582415950926091a4005d29c9bb44";
1661 sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13";
1194 };
1662 };
1195 };
1663 };
1196 "esutils-2.0.2" = {
1664 "esutils-2.0.2" = {
1197 name = "esutils";
1665 name = "esutils";
1198 packageName = "esutils";
1666 packageName = "esutils";
1199 version = "2.0.2";
1667 version = "2.0.2";
1200 src = fetchurl {
1668 src = fetchurl {
1201 url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
1669 url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
1202 sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
1670 sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
1203 };
1671 };
1204 };
1672 };
1205 "esprima-2.7.3" = {
1673 "esprima-3.1.3" = {
1206 name = "esprima";
1674 name = "esprima";
1207 packageName = "esprima";
1675 packageName = "esprima";
1208 version = "2.7.3";
1676 version = "3.1.3";
1209 src = fetchurl {
1677 src = fetchurl {
1210 url = "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz";
1678 url = "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz";
1211 sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581";
1679 sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633";
1212 };
1680 };
1213 };
1681 };
1214 "optionator-0.8.2" = {
1682 "optionator-0.8.2" = {
1215 name = "optionator";
1683 name = "optionator";
1216 packageName = "optionator";
1684 packageName = "optionator";
1217 version = "0.8.2";
1685 version = "0.8.2";
1218 src = fetchurl {
1686 src = fetchurl {
1219 url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz";
1687 url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz";
1220 sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64";
1688 sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64";
1221 };
1689 };
1222 };
1690 };
1223 "source-map-0.2.0" = {
1224 name = "source-map";
1225 packageName = "source-map";
1226 version = "0.2.0";
1227 src = fetchurl {
1228 url = "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz";
1229 sha1 = "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d";
1230 };
1231 };
1232 "prelude-ls-1.1.2" = {
1691 "prelude-ls-1.1.2" = {
1233 name = "prelude-ls";
1692 name = "prelude-ls";
1234 packageName = "prelude-ls";
1693 packageName = "prelude-ls";
1235 version = "1.1.2";
1694 version = "1.1.2";
1236 src = fetchurl {
1695 src = fetchurl {
1237 url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
1696 url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
1238 sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
1697 sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
1239 };
1698 };
1240 };
1699 };
1241 "deep-is-0.1.3" = {
1700 "deep-is-0.1.3" = {
1242 name = "deep-is";
1701 name = "deep-is";
1243 packageName = "deep-is";
1702 packageName = "deep-is";
1244 version = "0.1.3";
1703 version = "0.1.3";
1245 src = fetchurl {
1704 src = fetchurl {
1246 url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
1705 url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
1247 sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
1706 sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
1248 };
1707 };
1249 };
1708 };
1250 "wordwrap-1.0.0" = {
1709 "wordwrap-1.0.0" = {
1251 name = "wordwrap";
1710 name = "wordwrap";
1252 packageName = "wordwrap";
1711 packageName = "wordwrap";
1253 version = "1.0.0";
1712 version = "1.0.0";
1254 src = fetchurl {
1713 src = fetchurl {
1255 url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
1714 url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
1256 sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
1715 sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
1257 };
1716 };
1258 };
1717 };
1259 "type-check-0.3.2" = {
1718 "type-check-0.3.2" = {
1260 name = "type-check";
1719 name = "type-check";
1261 packageName = "type-check";
1720 packageName = "type-check";
1262 version = "0.3.2";
1721 version = "0.3.2";
1263 src = fetchurl {
1722 src = fetchurl {
1264 url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
1723 url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
1265 sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
1724 sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
1266 };
1725 };
1267 };
1726 };
1268 "levn-0.3.0" = {
1727 "levn-0.3.0" = {
1269 name = "levn";
1728 name = "levn";
1270 packageName = "levn";
1729 packageName = "levn";
1271 version = "0.3.0";
1730 version = "0.3.0";
1272 src = fetchurl {
1731 src = fetchurl {
1273 url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
1732 url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
1274 sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
1733 sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
1275 };
1734 };
1276 };
1735 };
1277 "fast-levenshtein-2.0.4" = {
1736 "fast-levenshtein-2.0.6" = {
1278 name = "fast-levenshtein";
1737 name = "fast-levenshtein";
1279 packageName = "fast-levenshtein";
1738 packageName = "fast-levenshtein";
1280 version = "2.0.4";
1739 version = "2.0.6";
1281 src = fetchurl {
1740 src = fetchurl {
1282 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.4.tgz";
1741 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
1283 sha1 = "e31e729eea62233c60a7bc9dce2bdcc88b4fffe3";
1742 sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
1284 };
1743 };
1285 };
1744 };
1286 "acorn-4.0.3" = {
1745 "acorn-5.1.2" = {
1287 name = "acorn";
1746 name = "acorn";
1288 packageName = "acorn";
1747 packageName = "acorn";
1289 version = "4.0.3";
1748 version = "5.1.2";
1290 src = fetchurl {
1749 src = fetchurl {
1291 url = "https://registry.npmjs.org/acorn/-/acorn-4.0.3.tgz";
1750 url = "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz";
1292 sha1 = "1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1";
1751 sha1 = "911cb53e036807cf0fa778dc5d370fbd864246d7";
1293 };
1752 };
1294 };
1753 };
1295 "acorn-jsx-3.0.1" = {
1754 "acorn-jsx-3.0.1" = {
1296 name = "acorn-jsx";
1755 name = "acorn-jsx";
1297 packageName = "acorn-jsx";
1756 packageName = "acorn-jsx";
1298 version = "3.0.1";
1757 version = "3.0.1";
1299 src = fetchurl {
1758 src = fetchurl {
1300 url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
1759 url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
1301 sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
1760 sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
1302 };
1761 };
1303 };
1762 };
1304 "acorn-3.3.0" = {
1763 "object-assign-4.1.1" = {
1305 name = "acorn";
1306 packageName = "acorn";
1307 version = "3.3.0";
1308 src = fetchurl {
1309 url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
1310 sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
1311 };
1312 };
1313 "boxen-0.3.1" = {
1314 name = "boxen";
1315 packageName = "boxen";
1316 version = "0.3.1";
1317 src = fetchurl {
1318 url = "https://registry.npmjs.org/boxen/-/boxen-0.3.1.tgz";
1319 sha1 = "a7d898243ae622f7abb6bb604d740a76c6a5461b";
1320 };
1321 };
1322 "configstore-2.1.0" = {
1323 name = "configstore";
1324 packageName = "configstore";
1325 version = "2.1.0";
1326 src = fetchurl {
1327 url = "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz";
1328 sha1 = "737a3a7036e9886102aa6099e47bb33ab1aba1a1";
1329 };
1330 };
1331 "is-npm-1.0.0" = {
1332 name = "is-npm";
1333 packageName = "is-npm";
1334 version = "1.0.0";
1335 src = fetchurl {
1336 url = "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz";
1337 sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4";
1338 };
1339 };
1340 "latest-version-2.0.0" = {
1341 name = "latest-version";
1342 packageName = "latest-version";
1343 version = "2.0.0";
1344 src = fetchurl {
1345 url = "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz";
1346 sha1 = "56f8d6139620847b8017f8f1f4d78e211324168b";
1347 };
1348 };
1349 "semver-diff-2.1.0" = {
1350 name = "semver-diff";
1351 packageName = "semver-diff";
1352 version = "2.1.0";
1353 src = fetchurl {
1354 url = "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz";
1355 sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36";
1356 };
1357 };
1358 "filled-array-1.1.0" = {
1359 name = "filled-array";
1360 packageName = "filled-array";
1361 version = "1.1.0";
1362 src = fetchurl {
1363 url = "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz";
1364 sha1 = "c3c4f6c663b923459a9aa29912d2d031f1507f84";
1365 };
1366 };
1367 "object-assign-4.1.0" = {
1368 name = "object-assign";
1764 name = "object-assign";
1369 packageName = "object-assign";
1765 packageName = "object-assign";
1370 version = "4.1.0";
1766 version = "4.1.1";
1371 src = fetchurl {
1372 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz";
1373 sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0";
1374 };
1375 };
1376 "repeating-2.0.1" = {
1377 name = "repeating";
1378 packageName = "repeating";
1379 version = "2.0.1";
1380 src = fetchurl {
1381 url = "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz";
1382 sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
1383 };
1384 };
1385 "string-width-1.0.2" = {
1386 name = "string-width";
1387 packageName = "string-width";
1388 version = "1.0.2";
1389 src = fetchurl {
1390 url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
1391 sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
1392 };
1393 };
1394 "widest-line-1.0.0" = {
1395 name = "widest-line";
1396 packageName = "widest-line";
1397 version = "1.0.0";
1398 src = fetchurl {
1399 url = "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz";
1400 sha1 = "0c09c85c2a94683d0d7eaf8ee097d564bf0e105c";
1401 };
1402 };
1403 "is-finite-1.0.1" = {
1404 name = "is-finite";
1405 packageName = "is-finite";
1406 version = "1.0.1";
1407 src = fetchurl {
1408 url = "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz";
1409 sha1 = "6438603eaebe2793948ff4a4262ec8db3d62597b";
1410 };
1411 };
1412 "number-is-nan-1.0.0" = {
1413 name = "number-is-nan";
1414 packageName = "number-is-nan";
1415 version = "1.0.0";
1416 src = fetchurl {
1767 src = fetchurl {
1417 url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";
1768 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
1418 sha1 = "c020f529c5282adfdd233d91d4b181c3d686dc4b";
1769 sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
1419 };
1770 };
1420 };
1771 };
1421 "code-point-at-1.0.0" = {
1772 "crisper-1.2.0" = {
1422 name = "code-point-at";
1773 name = "crisper";
1423 packageName = "code-point-at";
1774 packageName = "crisper";
1424 version = "1.0.0";
1425 src = fetchurl {
1426 url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.0.tgz";
1427 sha1 = "f69b192d3f7d91e382e4b71bddb77878619ab0c6";
1428 };
1429 };
1430 "is-fullwidth-code-point-1.0.0" = {
1431 name = "is-fullwidth-code-point";
1432 packageName = "is-fullwidth-code-point";
1433 version = "1.0.0";
1434 src = fetchurl {
1435 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
1436 sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
1437 };
1438 };
1439 "dot-prop-3.0.0" = {
1440 name = "dot-prop";
1441 packageName = "dot-prop";
1442 version = "3.0.0";
1443 src = fetchurl {
1444 url = "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz";
1445 sha1 = "1b708af094a49c9a0e7dbcad790aba539dac1177";
1446 };
1447 };
1448 "os-tmpdir-1.0.1" = {
1449 name = "os-tmpdir";
1450 packageName = "os-tmpdir";
1451 version = "1.0.1";
1452 src = fetchurl {
1453 url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz";
1454 sha1 = "e9b423a1edaf479882562e92ed71d7743a071b6e";
1455 };
1456 };
1457 "osenv-0.1.3" = {
1458 name = "osenv";
1459 packageName = "osenv";
1460 version = "0.1.3";
1461 src = fetchurl {
1462 url = "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz";
1463 sha1 = "83cf05c6d6458fc4d5ac6362ea325d92f2754217";
1464 };
1465 };
1466 "uuid-2.0.3" = {
1467 name = "uuid";
1468 packageName = "uuid";
1469 version = "2.0.3";
1470 src = fetchurl {
1471 url = "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz";
1472 sha1 = "67e2e863797215530dff318e5bf9dcebfd47b21a";
1473 };
1474 };
1475 "write-file-atomic-1.2.0" = {
1476 name = "write-file-atomic";
1477 packageName = "write-file-atomic";
1478 version = "1.2.0";
1775 version = "1.2.0";
1479 src = fetchurl {
1776 src = fetchurl {
1480 url = "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.2.0.tgz";
1777 url = "https://registry.npmjs.org/crisper/-/crisper-1.2.0.tgz";
1481 sha1 = "14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab";
1778 sha1 = "9a91f597d71f6110294e076ad44dbb3408568e46";
1482 };
1779 };
1483 };
1780 };
1484 "xdg-basedir-2.0.0" = {
1781 "optparse-1.0.5" = {
1485 name = "xdg-basedir";
1782 name = "optparse";
1486 packageName = "xdg-basedir";
1783 packageName = "optparse";
1784 version = "1.0.5";
1785 src = fetchurl {
1786 url = "https://registry.npmjs.org/optparse/-/optparse-1.0.5.tgz";
1787 sha1 = "75e75a96506611eb1c65ba89018ff08a981e2c16";
1788 };
1789 };
1790 "semver-5.4.1" = {
1791 name = "semver";
1792 packageName = "semver";
1793 version = "5.4.1";
1794 src = fetchurl {
1795 url = "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz";
1796 sha1 = "e059c09d8571f0540823733433505d3a2f00b18e";
1797 };
1798 };
1799 "npm-registry-client-8.4.0" = {
1800 name = "npm-registry-client";
1801 packageName = "npm-registry-client";
1802 version = "8.4.0";
1803 src = fetchurl {
1804 url = "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.4.0.tgz";
1805 sha1 = "d52b901685647fc62a4c03eafecb6ceaa5018d4c";
1806 };
1807 };
1808 "npmconf-2.1.2" = {
1809 name = "npmconf";
1810 packageName = "npmconf";
1811 version = "2.1.2";
1812 src = fetchurl {
1813 url = "https://registry.npmjs.org/npmconf/-/npmconf-2.1.2.tgz";
1814 sha1 = "66606a4a736f1e77a059aa071a79c94ab781853a";
1815 };
1816 };
1817 "tar-3.1.15" = {
1818 name = "tar";
1819 packageName = "tar";
1820 version = "3.1.15";
1821 src = fetchurl {
1822 url = "https://registry.npmjs.org/tar/-/tar-3.1.15.tgz";
1823 sha1 = "cccdc35b90917d58e4c3837795d5d022d7a1f46f";
1824 };
1825 };
1826 "temp-0.8.3" = {
1827 name = "temp";
1828 packageName = "temp";
1829 version = "0.8.3";
1830 src = fetchurl {
1831 url = "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz";
1832 sha1 = "e0c6bc4d26b903124410e4fed81103014dfc1f59";
1833 };
1834 };
1835 "fs.extra-1.3.2" = {
1836 name = "fs.extra";
1837 packageName = "fs.extra";
1838 version = "1.3.2";
1839 src = fetchurl {
1840 url = "https://registry.npmjs.org/fs.extra/-/fs.extra-1.3.2.tgz";
1841 sha1 = "dd023f93013bee24531f1b33514c37b20fd93349";
1842 };
1843 };
1844 "findit-2.0.0" = {
1845 name = "findit";
1846 packageName = "findit";
1487 version = "2.0.0";
1847 version = "2.0.0";
1488 src = fetchurl {
1848 src = fetchurl {
1489 url = "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz";
1849 url = "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz";
1490 sha1 = "edbc903cc385fc04523d966a335504b5504d1bd2";
1850 sha1 = "6509f0126af4c178551cfa99394e032e13a4d56e";
1491 };
1851 };
1492 };
1852 };
1493 "is-obj-1.0.1" = {
1853 "base64-js-1.2.1" = {
1494 name = "is-obj";
1854 name = "base64-js";
1495 packageName = "is-obj";
1855 packageName = "base64-js";
1496 version = "1.0.1";
1856 version = "1.2.1";
1857 src = fetchurl {
1858 url = "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz";
1859 sha1 = "a91947da1f4a516ea38e5b4ec0ec3773675e0886";
1860 };
1861 };
1862 "slasp-0.0.4" = {
1863 name = "slasp";
1864 packageName = "slasp";
1865 version = "0.0.4";
1866 src = fetchurl {
1867 url = "https://registry.npmjs.org/slasp/-/slasp-0.0.4.tgz";
1868 sha1 = "9adc26ee729a0f95095851a5489f87a5258d57a9";
1869 };
1870 };
1871 "nijs-0.0.23" = {
1872 name = "nijs";
1873 packageName = "nijs";
1874 version = "0.0.23";
1875 src = fetchurl {
1876 url = "https://registry.npmjs.org/nijs/-/nijs-0.0.23.tgz";
1877 sha1 = "dbf8f4a0acafbe3b8d9b71c24cbd1d851de6c31a";
1878 };
1879 };
1880 "concat-stream-1.6.0" = {
1881 name = "concat-stream";
1882 packageName = "concat-stream";
1883 version = "1.6.0";
1497 src = fetchurl {
1884 src = fetchurl {
1498 url = "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz";
1885 url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz";
1499 sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
1886 sha1 = "0aac662fd52be78964d5532f694784e70110acf7";
1500 };
1887 };
1501 };
1888 };
1502 "os-homedir-1.0.1" = {
1889 "normalize-package-data-2.4.0" = {
1503 name = "os-homedir";
1890 name = "normalize-package-data";
1504 packageName = "os-homedir";
1891 packageName = "normalize-package-data";
1505 version = "1.0.1";
1892 version = "2.4.0";
1893 src = fetchurl {
1894 url = "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz";
1895 sha1 = "12f95a307d58352075a04907b84ac8be98ac012f";
1896 };
1897 };
1898 "npm-package-arg-5.1.2" = {
1899 name = "npm-package-arg";
1900 packageName = "npm-package-arg";
1901 version = "5.1.2";
1506 src = fetchurl {
1902 src = fetchurl {
1507 url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz";
1903 url = "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-5.1.2.tgz";
1508 sha1 = "0d62bdf44b916fd3bbdcf2cab191948fb094f007";
1904 sha1 = "fb18d17bb61e60900d6312619919bd753755ab37";
1509 };
1905 };
1510 };
1906 };
1511 "imurmurhash-0.1.4" = {
1907 "once-1.4.0" = {
1512 name = "imurmurhash";
1908 name = "once";
1513 packageName = "imurmurhash";
1909 packageName = "once";
1514 version = "0.1.4";
1910 version = "1.4.0";
1515 src = fetchurl {
1911 src = fetchurl {
1516 url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
1912 url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
1517 sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
1913 sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
1914 };
1915 };
1916 "retry-0.10.1" = {
1917 name = "retry";
1918 packageName = "retry";
1919 version = "0.10.1";
1920 src = fetchurl {
1921 url = "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz";
1922 sha1 = "e76388d217992c252750241d3d3956fed98d8ff4";
1518 };
1923 };
1519 };
1924 };
1520 "slide-1.1.6" = {
1925 "slide-1.1.6" = {
1521 name = "slide";
1926 name = "slide";
1522 packageName = "slide";
1927 packageName = "slide";
1523 version = "1.1.6";
1928 version = "1.1.6";
1524 src = fetchurl {
1929 src = fetchurl {
1525 url = "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz";
1930 url = "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz";
1526 sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
1931 sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
1527 };
1932 };
1528 };
1933 };
1529 "package-json-2.4.0" = {
1934 "ssri-4.1.6" = {
1530 name = "package-json";
1935 name = "ssri";
1531 packageName = "package-json";
1936 packageName = "ssri";
1532 version = "2.4.0";
1937 version = "4.1.6";
1533 src = fetchurl {
1534 url = "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz";
1535 sha1 = "0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb";
1536 };
1537 };
1538 "got-5.6.0" = {
1539 name = "got";
1540 packageName = "got";
1541 version = "5.6.0";
1542 src = fetchurl {
1543 url = "https://registry.npmjs.org/got/-/got-5.6.0.tgz";
1544 sha1 = "bb1d7ee163b78082bbc8eb836f3f395004ea6fbf";
1545 };
1546 };
1547 "registry-auth-token-3.0.1" = {
1548 name = "registry-auth-token";
1549 packageName = "registry-auth-token";
1550 version = "3.0.1";
1551 src = fetchurl {
1552 url = "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.0.1.tgz";
1553 sha1 = "c3ee5ec585bce29f88bf41629a3944c71ed53e25";
1554 };
1555 };
1556 "registry-url-3.1.0" = {
1557 name = "registry-url";
1558 packageName = "registry-url";
1559 version = "3.1.0";
1560 src = fetchurl {
1938 src = fetchurl {
1561 url = "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz";
1939 url = "https://registry.npmjs.org/ssri/-/ssri-4.1.6.tgz";
1562 sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942";
1940 sha1 = "0cb49b6ac84457e7bdd466cb730c3cb623e9a25b";
1563 };
1941 };
1564 };
1942 };
1565 "semver-5.3.0" = {
1943 "npmlog-4.1.2" = {
1566 name = "semver";
1944 name = "npmlog";
1567 packageName = "semver";
1945 packageName = "npmlog";
1568 version = "5.3.0";
1946 version = "4.1.2";
1569 src = fetchurl {
1570 url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
1571 sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
1572 };
1573 };
1574 "create-error-class-3.0.2" = {
1575 name = "create-error-class";
1576 packageName = "create-error-class";
1577 version = "3.0.2";
1578 src = fetchurl {
1579 url = "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz";
1580 sha1 = "06be7abef947a3f14a30fd610671d401bca8b7b6";
1581 };
1582 };
1583 "duplexer2-0.1.4" = {
1584 name = "duplexer2";
1585 packageName = "duplexer2";
1586 version = "0.1.4";
1587 src = fetchurl {
1588 url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz";
1589 sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1";
1590 };
1591 };
1592 "is-plain-obj-1.1.0" = {
1593 name = "is-plain-obj";
1594 packageName = "is-plain-obj";
1595 version = "1.1.0";
1596 src = fetchurl {
1947 src = fetchurl {
1597 url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
1948 url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
1598 sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
1949 sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b";
1599 };
1950 };
1600 };
1951 };
1601 "is-redirect-1.0.0" = {
1952 "typedarray-0.0.6" = {
1602 name = "is-redirect";
1953 name = "typedarray";
1603 packageName = "is-redirect";
1954 packageName = "typedarray";
1604 version = "1.0.0";
1955 version = "0.0.6";
1605 src = fetchurl {
1606 url = "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz";
1607 sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24";
1608 };
1609 };
1610 "is-retry-allowed-1.1.0" = {
1611 name = "is-retry-allowed";
1612 packageName = "is-retry-allowed";
1613 version = "1.1.0";
1614 src = fetchurl {
1615 url = "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz";
1616 sha1 = "11a060568b67339444033d0125a61a20d564fb34";
1617 };
1618 };
1619 "is-stream-1.1.0" = {
1620 name = "is-stream";
1621 packageName = "is-stream";
1622 version = "1.1.0";
1623 src = fetchurl {
1624 url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
1625 sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
1626 };
1627 };
1628 "lowercase-keys-1.0.0" = {
1629 name = "lowercase-keys";
1630 packageName = "lowercase-keys";
1631 version = "1.0.0";
1632 src = fetchurl {
1956 src = fetchurl {
1633 url = "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz";
1957 url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
1634 sha1 = "4e3366b39e7f5457e35f1324bdf6f88d0bfc7306";
1958 sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
1635 };
1959 };
1636 };
1960 };
1637 "node-status-codes-1.0.0" = {
1961 "readable-stream-2.3.3" = {
1638 name = "node-status-codes";
1639 packageName = "node-status-codes";
1640 version = "1.0.0";
1641 src = fetchurl {
1642 url = "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz";
1643 sha1 = "5ae5541d024645d32a58fcddc9ceecea7ae3ac2f";
1644 };
1645 };
1646 "parse-json-2.2.0" = {
1647 name = "parse-json";
1648 packageName = "parse-json";
1649 version = "2.2.0";
1650 src = fetchurl {
1651 url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
1652 sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
1653 };
1654 };
1655 "pinkie-promise-2.0.1" = {
1656 name = "pinkie-promise";
1657 packageName = "pinkie-promise";
1658 version = "2.0.1";
1659 src = fetchurl {
1660 url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
1661 sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
1662 };
1663 };
1664 "read-all-stream-3.1.0" = {
1665 name = "read-all-stream";
1666 packageName = "read-all-stream";
1667 version = "3.1.0";
1668 src = fetchurl {
1669 url = "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz";
1670 sha1 = "35c3e177f2078ef789ee4bfafa4373074eaef4fa";
1671 };
1672 };
1673 "readable-stream-2.1.5" = {
1674 name = "readable-stream";
1962 name = "readable-stream";
1675 packageName = "readable-stream";
1963 packageName = "readable-stream";
1676 version = "2.1.5";
1964 version = "2.3.3";
1677 src = fetchurl {
1678 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz";
1679 sha1 = "66fa8b720e1438b364681f2ad1a63c618448c9d0";
1680 };
1681 };
1682 "timed-out-2.0.0" = {
1683 name = "timed-out";
1684 packageName = "timed-out";
1685 version = "2.0.0";
1686 src = fetchurl {
1687 url = "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz";
1688 sha1 = "f38b0ae81d3747d628001f41dafc652ace671c0a";
1689 };
1690 };
1691 "unzip-response-1.0.1" = {
1692 name = "unzip-response";
1693 packageName = "unzip-response";
1694 version = "1.0.1";
1695 src = fetchurl {
1696 url = "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.1.tgz";
1697 sha1 = "4a73959f2989470fa503791cefb54e1dbbc68412";
1698 };
1699 };
1700 "url-parse-lax-1.0.0" = {
1701 name = "url-parse-lax";
1702 packageName = "url-parse-lax";
1703 version = "1.0.0";
1704 src = fetchurl {
1705 url = "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz";
1706 sha1 = "7af8f303645e9bd79a272e7a14ac68bc0609da73";
1707 };
1708 };
1709 "capture-stack-trace-1.0.0" = {
1710 name = "capture-stack-trace";
1711 packageName = "capture-stack-trace";
1712 version = "1.0.0";
1713 src = fetchurl {
1965 src = fetchurl {
1714 url = "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz";
1966 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz";
1715 sha1 = "4a6fa07399c26bba47f0b2496b4d0fb408c5550d";
1967 sha1 = "368f2512d79f9d46fdfc71349ae7878bbc1eb95c";
1716 };
1717 };
1718 "error-ex-1.3.0" = {
1719 name = "error-ex";
1720 packageName = "error-ex";
1721 version = "1.3.0";
1722 src = fetchurl {
1723 url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz";
1724 sha1 = "e67b43f3e82c96ea3a584ffee0b9fc3325d802d9";
1725 };
1726 };
1727 "is-arrayish-0.2.1" = {
1728 name = "is-arrayish";
1729 packageName = "is-arrayish";
1730 version = "0.2.1";
1731 src = fetchurl {
1732 url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
1733 sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
1734 };
1735 };
1736 "pinkie-2.0.4" = {
1737 name = "pinkie";
1738 packageName = "pinkie";
1739 version = "2.0.4";
1740 src = fetchurl {
1741 url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
1742 sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
1743 };
1744 };
1745 "buffer-shims-1.0.0" = {
1746 name = "buffer-shims";
1747 packageName = "buffer-shims";
1748 version = "1.0.0";
1749 src = fetchurl {
1750 url = "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz";
1751 sha1 = "9978ce317388c649ad8793028c3477ef044a8b51";
1752 };
1753 };
1754 "core-util-is-1.0.2" = {
1755 name = "core-util-is";
1756 packageName = "core-util-is";
1757 version = "1.0.2";
1758 src = fetchurl {
1759 url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
1760 sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
1761 };
1968 };
1762 };
1969 };
1763 "isarray-1.0.0" = {
1970 "isarray-1.0.0" = {
1764 name = "isarray";
1971 name = "isarray";
1765 packageName = "isarray";
1972 packageName = "isarray";
1766 version = "1.0.0";
1973 version = "1.0.0";
1767 src = fetchurl {
1974 src = fetchurl {
1768 url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
1975 url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
1769 sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
1976 sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
1770 };
1977 };
1771 };
1978 };
1772 "process-nextick-args-1.0.7" = {
1979 "process-nextick-args-1.0.7" = {
1773 name = "process-nextick-args";
1980 name = "process-nextick-args";
1774 packageName = "process-nextick-args";
1981 packageName = "process-nextick-args";
1775 version = "1.0.7";
1982 version = "1.0.7";
1776 src = fetchurl {
1983 src = fetchurl {
1777 url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
1984 url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
1778 sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
1985 sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
1779 };
1986 };
1780 };
1987 };
1781 "string_decoder-0.10.31" = {
1988 "string_decoder-1.0.3" = {
1782 name = "string_decoder";
1989 name = "string_decoder";
1783 packageName = "string_decoder";
1990 packageName = "string_decoder";
1784 version = "0.10.31";
1991 version = "1.0.3";
1785 src = fetchurl {
1992 src = fetchurl {
1786 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
1993 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz";
1787 sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
1994 sha1 = "0fc67d7c141825de94282dd536bec6b9bce860ab";
1788 };
1995 };
1789 };
1996 };
1790 "util-deprecate-1.0.2" = {
1997 "util-deprecate-1.0.2" = {
1791 name = "util-deprecate";
1998 name = "util-deprecate";
1792 packageName = "util-deprecate";
1999 packageName = "util-deprecate";
1793 version = "1.0.2";
2000 version = "1.0.2";
1794 src = fetchurl {
2001 src = fetchurl {
1795 url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
2002 url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
1796 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
2003 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
1797 };
2004 };
1798 };
2005 };
1799 "prepend-http-1.0.4" = {
2006 "hosted-git-info-2.5.0" = {
1800 name = "prepend-http";
2007 name = "hosted-git-info";
1801 packageName = "prepend-http";
2008 packageName = "hosted-git-info";
2009 version = "2.5.0";
2010 src = fetchurl {
2011 url = "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz";
2012 sha1 = "6d60e34b3abbc8313062c3b798ef8d901a07af3c";
2013 };
2014 };
2015 "is-builtin-module-1.0.0" = {
2016 name = "is-builtin-module";
2017 packageName = "is-builtin-module";
2018 version = "1.0.0";
2019 src = fetchurl {
2020 url = "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz";
2021 sha1 = "540572d34f7ac3119f8f76c30cbc1b1e037affbe";
2022 };
2023 };
2024 "validate-npm-package-license-3.0.1" = {
2025 name = "validate-npm-package-license";
2026 packageName = "validate-npm-package-license";
2027 version = "3.0.1";
2028 src = fetchurl {
2029 url = "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz";
2030 sha1 = "2804babe712ad3379459acfbe24746ab2c303fbc";
2031 };
2032 };
2033 "builtin-modules-1.1.1" = {
2034 name = "builtin-modules";
2035 packageName = "builtin-modules";
2036 version = "1.1.1";
2037 src = fetchurl {
2038 url = "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz";
2039 sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f";
2040 };
2041 };
2042 "spdx-correct-1.0.2" = {
2043 name = "spdx-correct";
2044 packageName = "spdx-correct";
2045 version = "1.0.2";
2046 src = fetchurl {
2047 url = "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz";
2048 sha1 = "4b3073d933ff51f3912f03ac5519498a4150db40";
2049 };
2050 };
2051 "spdx-expression-parse-1.0.4" = {
2052 name = "spdx-expression-parse";
2053 packageName = "spdx-expression-parse";
1802 version = "1.0.4";
2054 version = "1.0.4";
1803 src = fetchurl {
2055 src = fetchurl {
1804 url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
2056 url = "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz";
1805 sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
2057 sha1 = "9bdf2f20e1f40ed447fbe273266191fced51626c";
1806 };
2058 };
1807 };
2059 };
1808 "rc-1.1.6" = {
2060 "spdx-license-ids-1.2.2" = {
1809 name = "rc";
2061 name = "spdx-license-ids";
1810 packageName = "rc";
2062 packageName = "spdx-license-ids";
1811 version = "1.1.6";
2063 version = "1.2.2";
2064 src = fetchurl {
2065 url = "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz";
2066 sha1 = "c9df7a3424594ade6bd11900d596696dc06bac57";
2067 };
2068 };
2069 "osenv-0.1.4" = {
2070 name = "osenv";
2071 packageName = "osenv";
2072 version = "0.1.4";
2073 src = fetchurl {
2074 url = "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz";
2075 sha1 = "42fe6d5953df06c8064be6f176c3d05aaaa34644";
2076 };
2077 };
2078 "validate-npm-package-name-3.0.0" = {
2079 name = "validate-npm-package-name";
2080 packageName = "validate-npm-package-name";
2081 version = "3.0.0";
2082 src = fetchurl {
2083 url = "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz";
2084 sha1 = "5fa912d81eb7d0c74afc140de7317f0ca7df437e";
2085 };
2086 };
2087 "os-homedir-1.0.2" = {
2088 name = "os-homedir";
2089 packageName = "os-homedir";
2090 version = "1.0.2";
2091 src = fetchurl {
2092 url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
2093 sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
2094 };
2095 };
2096 "os-tmpdir-1.0.2" = {
2097 name = "os-tmpdir";
2098 packageName = "os-tmpdir";
2099 version = "1.0.2";
2100 src = fetchurl {
2101 url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
2102 sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
2103 };
2104 };
2105 "builtins-1.0.3" = {
2106 name = "builtins";
2107 packageName = "builtins";
2108 version = "1.0.3";
2109 src = fetchurl {
2110 url = "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz";
2111 sha1 = "cb94faeb61c8696451db36534e1422f94f0aee88";
2112 };
2113 };
2114 "wrappy-1.0.2" = {
2115 name = "wrappy";
2116 packageName = "wrappy";
2117 version = "1.0.2";
2118 src = fetchurl {
2119 url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
2120 sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
2121 };
2122 };
2123 "are-we-there-yet-1.1.4" = {
2124 name = "are-we-there-yet";
2125 packageName = "are-we-there-yet";
2126 version = "1.1.4";
2127 src = fetchurl {
2128 url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz";
2129 sha1 = "bb5dca382bb94f05e15194373d16fd3ba1ca110d";
2130 };
2131 };
2132 "console-control-strings-1.1.0" = {
2133 name = "console-control-strings";
2134 packageName = "console-control-strings";
2135 version = "1.1.0";
2136 src = fetchurl {
2137 url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
2138 sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
2139 };
2140 };
2141 "gauge-2.7.4" = {
2142 name = "gauge";
2143 packageName = "gauge";
2144 version = "2.7.4";
1812 src = fetchurl {
2145 src = fetchurl {
1813 url = "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz";
2146 url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
1814 sha1 = "43651b76b6ae53b5c802f1151fa3fc3b059969c9";
2147 sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
2148 };
2149 };
2150 "set-blocking-2.0.0" = {
2151 name = "set-blocking";
2152 packageName = "set-blocking";
2153 version = "2.0.0";
2154 src = fetchurl {
2155 url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
2156 sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
2157 };
2158 };
2159 "delegates-1.0.0" = {
2160 name = "delegates";
2161 packageName = "delegates";
2162 version = "1.0.0";
2163 src = fetchurl {
2164 url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
2165 sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
2166 };
2167 };
2168 "aproba-1.2.0" = {
2169 name = "aproba";
2170 packageName = "aproba";
2171 version = "1.2.0";
2172 src = fetchurl {
2173 url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";
2174 sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a";
2175 };
2176 };
2177 "has-unicode-2.0.1" = {
2178 name = "has-unicode";
2179 packageName = "has-unicode";
2180 version = "2.0.1";
2181 src = fetchurl {
2182 url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
2183 sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
2184 };
2185 };
2186 "signal-exit-3.0.2" = {
2187 name = "signal-exit";
2188 packageName = "signal-exit";
2189 version = "3.0.2";
2190 src = fetchurl {
2191 url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";
2192 sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
2193 };
2194 };
2195 "string-width-1.0.2" = {
2196 name = "string-width";
2197 packageName = "string-width";
2198 version = "1.0.2";
2199 src = fetchurl {
2200 url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
2201 sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
2202 };
2203 };
2204 "wide-align-1.1.2" = {
2205 name = "wide-align";
2206 packageName = "wide-align";
2207 version = "1.1.2";
2208 src = fetchurl {
2209 url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz";
2210 sha1 = "571e0f1b0604636ebc0dfc21b0339bbe31341710";
2211 };
2212 };
2213 "code-point-at-1.1.0" = {
2214 name = "code-point-at";
2215 packageName = "code-point-at";
2216 version = "1.1.0";
2217 src = fetchurl {
2218 url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
2219 sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
2220 };
2221 };
2222 "is-fullwidth-code-point-1.0.0" = {
2223 name = "is-fullwidth-code-point";
2224 packageName = "is-fullwidth-code-point";
2225 version = "1.0.0";
2226 src = fetchurl {
2227 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
2228 sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
2229 };
2230 };
2231 "number-is-nan-1.0.1" = {
2232 name = "number-is-nan";
2233 packageName = "number-is-nan";
2234 version = "1.0.1";
2235 src = fetchurl {
2236 url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
2237 sha1 = "097b602b53422a522c1afb8790318336941a011d";
2238 };
2239 };
2240 "config-chain-1.1.11" = {
2241 name = "config-chain";
2242 packageName = "config-chain";
2243 version = "1.1.11";
2244 src = fetchurl {
2245 url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz";
2246 sha1 = "aba09747dfbe4c3e70e766a6e41586e1859fc6f2";
1815 };
2247 };
1816 };
2248 };
1817 "ini-1.3.4" = {
2249 "ini-1.3.4" = {
1818 name = "ini";
2250 name = "ini";
1819 packageName = "ini";
2251 packageName = "ini";
1820 version = "1.3.4";
2252 version = "1.3.4";
1821 src = fetchurl {
2253 src = fetchurl {
1822 url = "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz";
2254 url = "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz";
1823 sha1 = "0537cb79daf59b59a1a517dff706c86ec039162e";
2255 sha1 = "0537cb79daf59b59a1a517dff706c86ec039162e";
1824 };
2256 };
1825 };
2257 };
1826 "minimist-1.2.0" = {
2258 "once-1.3.3" = {
1827 name = "minimist";
2259 name = "once";
1828 packageName = "minimist";
2260 packageName = "once";
1829 version = "1.2.0";
2261 version = "1.3.3";
2262 src = fetchurl {
2263 url = "https://registry.npmjs.org/once/-/once-1.3.3.tgz";
2264 sha1 = "b2e261557ce4c314ec8304f3fa82663e4297ca20";
2265 };
2266 };
2267 "semver-4.3.6" = {
2268 name = "semver";
2269 packageName = "semver";
2270 version = "4.3.6";
2271 src = fetchurl {
2272 url = "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz";
2273 sha1 = "300bc6e0e86374f7ba61068b5b1ecd57fc6532da";
2274 };
2275 };
2276 "uid-number-0.0.5" = {
2277 name = "uid-number";
2278 packageName = "uid-number";
2279 version = "0.0.5";
1830 src = fetchurl {
2280 src = fetchurl {
1831 url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
2281 url = "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz";
1832 sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
2282 sha1 = "5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e";
1833 };
2283 };
1834 };
2284 };
1835 "strip-json-comments-1.0.4" = {
2285 "proto-list-1.2.4" = {
1836 name = "strip-json-comments";
2286 name = "proto-list";
1837 packageName = "strip-json-comments";
2287 packageName = "proto-list";
1838 version = "1.0.4";
2288 version = "1.2.4";
2289 src = fetchurl {
2290 url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
2291 sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
2292 };
2293 };
2294 "minipass-2.2.1" = {
2295 name = "minipass";
2296 packageName = "minipass";
2297 version = "2.2.1";
2298 src = fetchurl {
2299 url = "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz";
2300 sha1 = "5ada97538b1027b4cf7213432428578cb564011f";
2301 };
2302 };
2303 "minizlib-1.0.3" = {
2304 name = "minizlib";
2305 packageName = "minizlib";
2306 version = "1.0.3";
2307 src = fetchurl {
2308 url = "https://registry.npmjs.org/minizlib/-/minizlib-1.0.3.tgz";
2309 sha1 = "d5c1abf77be154619952e253336eccab9b2a32f5";
2310 };
2311 };
2312 "yallist-3.0.2" = {
2313 name = "yallist";
2314 packageName = "yallist";
2315 version = "3.0.2";
1839 src = fetchurl {
2316 src = fetchurl {
1840 url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
2317 url = "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz";
1841 sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
2318 sha1 = "8452b4bb7e83c7c188d8041c1a837c773d6d8bb9";
1842 };
2319 };
1843 };
2320 };
1844 "crisper-1.2.0" = {
2321 "fs-extra-0.6.4" = {
1845 name = "crisper";
2322 name = "fs-extra";
1846 packageName = "crisper";
2323 packageName = "fs-extra";
1847 version = "1.2.0";
2324 version = "0.6.4";
2325 src = fetchurl {
2326 url = "https://registry.npmjs.org/fs-extra/-/fs-extra-0.6.4.tgz";
2327 sha1 = "f46f0c75b7841f8d200b3348cd4d691d5a099d15";
2328 };
2329 };
2330 "mkdirp-0.3.5" = {
2331 name = "mkdirp";
2332 packageName = "mkdirp";
2333 version = "0.3.5";
2334 src = fetchurl {
2335 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz";
2336 sha1 = "de3e5f8961c88c787ee1368df849ac4413eca8d7";
2337 };
2338 };
2339 "walk-2.3.9" = {
2340 name = "walk";
2341 packageName = "walk";
2342 version = "2.3.9";
1848 src = fetchurl {
2343 src = fetchurl {
1849 url = "https://registry.npmjs.org/crisper/-/crisper-1.2.0.tgz";
2344 url = "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz";
1850 sha1 = "9a91f597d71f6110294e076ad44dbb3408568e46";
2345 sha1 = "31b4db6678f2ae01c39ea9fb8725a9031e558a7b";
1851 };
2346 };
1852 };
2347 };
1853 "cli-1.0.0" = {
2348 "ncp-0.4.2" = {
2349 name = "ncp";
2350 packageName = "ncp";
2351 version = "0.4.2";
2352 src = fetchurl {
2353 url = "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz";
2354 sha1 = "abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574";
2355 };
2356 };
2357 "jsonfile-1.0.1" = {
2358 name = "jsonfile";
2359 packageName = "jsonfile";
2360 version = "1.0.1";
2361 src = fetchurl {
2362 url = "https://registry.npmjs.org/jsonfile/-/jsonfile-1.0.1.tgz";
2363 sha1 = "ea5efe40b83690b98667614a7392fc60e842c0dd";
2364 };
2365 };
2366 "foreachasync-3.0.0" = {
2367 name = "foreachasync";
2368 packageName = "foreachasync";
2369 version = "3.0.0";
2370 src = fetchurl {
2371 url = "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz";
2372 sha1 = "5502987dc8714be3392097f32e0071c9dee07cf6";
2373 };
2374 };
2375 "cli-1.0.1" = {
1854 name = "cli";
2376 name = "cli";
1855 packageName = "cli";
2377 packageName = "cli";
1856 version = "1.0.0";
2378 version = "1.0.1";
1857 src = fetchurl {
2379 src = fetchurl {
1858 url = "https://registry.npmjs.org/cli/-/cli-1.0.0.tgz";
2380 url = "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz";
1859 sha1 = "ee07dfc1390e3f2e6a9957cf88e1d4bfa777719d";
2381 sha1 = "22817534f24bfa4950c34d532d48ecbc621b8c14";
1860 };
2382 };
1861 };
2383 };
1862 "console-browserify-1.1.0" = {
2384 "console-browserify-1.1.0" = {
1863 name = "console-browserify";
2385 name = "console-browserify";
1864 packageName = "console-browserify";
2386 packageName = "console-browserify";
1865 version = "1.1.0";
2387 version = "1.1.0";
1866 src = fetchurl {
2388 src = fetchurl {
1867 url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
2389 url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
1868 sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
2390 sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
1869 };
2391 };
1870 };
2392 };
1871 "htmlparser2-3.8.3" = {
2393 "htmlparser2-3.8.3" = {
1872 name = "htmlparser2";
2394 name = "htmlparser2";
1873 packageName = "htmlparser2";
2395 packageName = "htmlparser2";
1874 version = "3.8.3";
2396 version = "3.8.3";
1875 src = fetchurl {
2397 src = fetchurl {
1876 url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
2398 url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
1877 sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
2399 sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
1878 };
2400 };
1879 };
2401 };
1880 "minimatch-3.0.3" = {
2402 "minimatch-3.0.4" = {
1881 name = "minimatch";
2403 name = "minimatch";
1882 packageName = "minimatch";
2404 packageName = "minimatch";
1883 version = "3.0.3";
2405 version = "3.0.4";
1884 src = fetchurl {
2406 src = fetchurl {
1885 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz";
2407 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
1886 sha1 = "2a4e4090b96b2db06a9d7df01055a62a77c9b774";
2408 sha1 = "5166e286457f03306064be5497e8dbb0c3d32083";
1887 };
2409 };
1888 };
2410 };
1889 "shelljs-0.3.0" = {
2411 "shelljs-0.3.0" = {
1890 name = "shelljs";
2412 name = "shelljs";
1891 packageName = "shelljs";
2413 packageName = "shelljs";
1892 version = "0.3.0";
2414 version = "0.3.0";
1893 src = fetchurl {
2415 src = fetchurl {
1894 url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
2416 url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
1895 sha1 = "3596e6307a781544f591f37da618360f31db57b1";
2417 sha1 = "3596e6307a781544f591f37da618360f31db57b1";
1896 };
2418 };
1897 };
2419 };
2420 "strip-json-comments-1.0.4" = {
2421 name = "strip-json-comments";
2422 packageName = "strip-json-comments";
2423 version = "1.0.4";
2424 src = fetchurl {
2425 url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
2426 sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
2427 };
2428 };
1898 "lodash-3.7.0" = {
2429 "lodash-3.7.0" = {
1899 name = "lodash";
2430 name = "lodash";
1900 packageName = "lodash";
2431 packageName = "lodash";
1901 version = "3.7.0";
2432 version = "3.7.0";
1902 src = fetchurl {
2433 src = fetchurl {
1903 url = "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz";
2434 url = "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz";
1904 sha1 = "3678bd8ab995057c07ade836ed2ef087da811d45";
2435 sha1 = "3678bd8ab995057c07ade836ed2ef087da811d45";
1905 };
2436 };
1906 };
2437 };
1907 "glob-7.1.0" = {
2438 "glob-7.1.2" = {
1908 name = "glob";
2439 name = "glob";
1909 packageName = "glob";
2440 packageName = "glob";
1910 version = "7.1.0";
2441 version = "7.1.2";
1911 src = fetchurl {
2442 src = fetchurl {
1912 url = "https://registry.npmjs.org/glob/-/glob-7.1.0.tgz";
2443 url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz";
1913 sha1 = "36add856d746d0d99e4cc2797bba1ae2c67272fd";
2444 sha1 = "c19c9df9a028702d678612384a6552404c636d15";
1914 };
2445 };
1915 };
2446 };
1916 "fs.realpath-1.0.0" = {
2447 "fs.realpath-1.0.0" = {
1917 name = "fs.realpath";
2448 name = "fs.realpath";
1918 packageName = "fs.realpath";
2449 packageName = "fs.realpath";
1919 version = "1.0.0";
2450 version = "1.0.0";
1920 src = fetchurl {
2451 src = fetchurl {
1921 url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
2452 url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
1922 sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
2453 sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
1923 };
2454 };
1924 };
2455 };
1925 "inflight-1.0.5" = {
2456 "inflight-1.0.6" = {
1926 name = "inflight";
2457 name = "inflight";
1927 packageName = "inflight";
2458 packageName = "inflight";
1928 version = "1.0.5";
2459 version = "1.0.6";
1929 src = fetchurl {
1930 url = "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz";
1931 sha1 = "db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a";
1932 };
1933 };
1934 "once-1.4.0" = {
1935 name = "once";
1936 packageName = "once";
1937 version = "1.4.0";
1938 src = fetchurl {
2460 src = fetchurl {
1939 url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
2461 url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
1940 sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
2462 sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
1941 };
2463 };
1942 };
2464 };
1943 "wrappy-1.0.2" = {
2465 "brace-expansion-1.1.8" = {
1944 name = "wrappy";
1945 packageName = "wrappy";
1946 version = "1.0.2";
1947 src = fetchurl {
1948 url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
1949 sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
1950 };
1951 };
1952 "brace-expansion-1.1.6" = {
1953 name = "brace-expansion";
2466 name = "brace-expansion";
1954 packageName = "brace-expansion";
2467 packageName = "brace-expansion";
1955 version = "1.1.6";
2468 version = "1.1.8";
1956 src = fetchurl {
2469 src = fetchurl {
1957 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz";
2470 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz";
1958 sha1 = "7197d7eaa9b87e648390ea61fc66c84427420df9";
2471 sha1 = "c07b211c7c952ec1f8efd51a77ef0d1d3990a292";
1959 };
2472 };
1960 };
2473 };
1961 "balanced-match-0.4.2" = {
2474 "balanced-match-1.0.0" = {
1962 name = "balanced-match";
2475 name = "balanced-match";
1963 packageName = "balanced-match";
2476 packageName = "balanced-match";
1964 version = "0.4.2";
2477 version = "1.0.0";
1965 src = fetchurl {
2478 src = fetchurl {
1966 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz";
2479 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
1967 sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838";
2480 sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
1968 };
2481 };
1969 };
2482 };
1970 "concat-map-0.0.1" = {
2483 "concat-map-0.0.1" = {
1971 name = "concat-map";
2484 name = "concat-map";
1972 packageName = "concat-map";
2485 packageName = "concat-map";
1973 version = "0.0.1";
2486 version = "0.0.1";
1974 src = fetchurl {
2487 src = fetchurl {
1975 url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
2488 url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
1976 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
2489 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
1977 };
2490 };
1978 };
2491 };
1979 "date-now-0.1.4" = {
2492 "date-now-0.1.4" = {
1980 name = "date-now";
2493 name = "date-now";
1981 packageName = "date-now";
2494 packageName = "date-now";
1982 version = "0.1.4";
2495 version = "0.1.4";
1983 src = fetchurl {
2496 src = fetchurl {
1984 url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
2497 url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
1985 sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
2498 sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
1986 };
2499 };
1987 };
2500 };
1988 "domhandler-2.3.0" = {
2501 "domhandler-2.3.0" = {
1989 name = "domhandler";
2502 name = "domhandler";
1990 packageName = "domhandler";
2503 packageName = "domhandler";
1991 version = "2.3.0";
2504 version = "2.3.0";
1992 src = fetchurl {
2505 src = fetchurl {
1993 url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
2506 url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
1994 sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
2507 sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
1995 };
2508 };
1996 };
2509 };
1997 "domutils-1.5.1" = {
2510 "domutils-1.5.1" = {
1998 name = "domutils";
2511 name = "domutils";
1999 packageName = "domutils";
2512 packageName = "domutils";
2000 version = "1.5.1";
2513 version = "1.5.1";
2001 src = fetchurl {
2514 src = fetchurl {
2002 url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
2515 url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
2003 sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
2516 sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
2004 };
2517 };
2005 };
2518 };
2006 "domelementtype-1.3.0" = {
2519 "domelementtype-1.3.0" = {
2007 name = "domelementtype";
2520 name = "domelementtype";
2008 packageName = "domelementtype";
2521 packageName = "domelementtype";
2009 version = "1.3.0";
2522 version = "1.3.0";
2010 src = fetchurl {
2523 src = fetchurl {
2011 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
2524 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
2012 sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
2525 sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
2013 };
2526 };
2014 };
2527 };
2015 "readable-stream-1.1.14" = {
2528 "readable-stream-1.1.14" = {
2016 name = "readable-stream";
2529 name = "readable-stream";
2017 packageName = "readable-stream";
2530 packageName = "readable-stream";
2018 version = "1.1.14";
2531 version = "1.1.14";
2019 src = fetchurl {
2532 src = fetchurl {
2020 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
2533 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
2021 sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
2534 sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
2022 };
2535 };
2023 };
2536 };
2024 "entities-1.0.0" = {
2537 "entities-1.0.0" = {
2025 name = "entities";
2538 name = "entities";
2026 packageName = "entities";
2539 packageName = "entities";
2027 version = "1.0.0";
2540 version = "1.0.0";
2028 src = fetchurl {
2541 src = fetchurl {
2029 url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
2542 url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
2030 sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
2543 sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
2031 };
2544 };
2032 };
2545 };
2033 "dom-serializer-0.1.0" = {
2546 "dom-serializer-0.1.0" = {
2034 name = "dom-serializer";
2547 name = "dom-serializer";
2035 packageName = "dom-serializer";
2548 packageName = "dom-serializer";
2036 version = "0.1.0";
2549 version = "0.1.0";
2037 src = fetchurl {
2550 src = fetchurl {
2038 url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
2551 url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
2039 sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
2552 sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
2040 };
2553 };
2041 };
2554 };
2042 "domelementtype-1.1.3" = {
2555 "domelementtype-1.1.3" = {
2043 name = "domelementtype";
2556 name = "domelementtype";
2044 packageName = "domelementtype";
2557 packageName = "domelementtype";
2045 version = "1.1.3";
2558 version = "1.1.3";
2046 src = fetchurl {
2559 src = fetchurl {
2047 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
2560 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
2048 sha1 = "bd28773e2642881aec51544924299c5cd822185b";
2561 sha1 = "bd28773e2642881aec51544924299c5cd822185b";
2049 };
2562 };
2050 };
2563 };
2051 "entities-1.1.1" = {
2564 "entities-1.1.1" = {
2052 name = "entities";
2565 name = "entities";
2053 packageName = "entities";
2566 packageName = "entities";
2054 version = "1.1.1";
2567 version = "1.1.1";
2055 src = fetchurl {
2568 src = fetchurl {
2056 url = "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
2569 url = "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
2057 sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
2570 sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
2058 };
2571 };
2059 };
2572 };
2573 "string_decoder-0.10.31" = {
2574 name = "string_decoder";
2575 packageName = "string_decoder";
2576 version = "0.10.31";
2577 src = fetchurl {
2578 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
2579 sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
2580 };
2581 };
2582 "good-listener-1.2.2" = {
2583 name = "good-listener";
2584 packageName = "good-listener";
2585 version = "1.2.2";
2586 src = fetchurl {
2587 url = "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz";
2588 sha1 = "d53b30cdf9313dffb7dc9a0d477096aa6d145c50";
2589 };
2590 };
2591 "select-1.1.2" = {
2592 name = "select";
2593 packageName = "select";
2594 version = "1.1.2";
2595 src = fetchurl {
2596 url = "https://registry.npmjs.org/select/-/select-1.1.2.tgz";
2597 sha1 = "0e7350acdec80b1108528786ec1d4418d11b396d";
2598 };
2599 };
2600 "tiny-emitter-2.0.2" = {
2601 name = "tiny-emitter";
2602 packageName = "tiny-emitter";
2603 version = "2.0.2";
2604 src = fetchurl {
2605 url = "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz";
2606 sha1 = "82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c";
2607 };
2608 };
2609 "delegate-3.1.3" = {
2610 name = "delegate";
2611 packageName = "delegate";
2612 version = "3.1.3";
2613 src = fetchurl {
2614 url = "https://registry.npmjs.org/delegate/-/delegate-3.1.3.tgz";
2615 sha1 = "9a8251a777d7025faa55737bc3b071742127a9fd";
2616 };
2617 };
2060 };
2618 };
2061 args = {
2619 args = {
2062 name = "rhodecode-enterprise";
2620 name = "rhodecode-enterprise";
2063 packageName = "rhodecode-enterprise";
2621 packageName = "rhodecode-enterprise";
2064 version = "0.0.1";
2622 version = "0.0.1";
2065 src = ./.;
2623 src = ./.;
2066 dependencies = [
2624 dependencies = [
2067 sources."grunt-0.4.5"
2625 sources."grunt-0.4.5"
2068 sources."grunt-contrib-copy-1.0.0"
2626 sources."grunt-contrib-copy-1.0.0"
2069 (sources."grunt-contrib-concat-0.5.1" // {
2627 (sources."grunt-contrib-concat-0.5.1" // {
2070 dependencies = [
2628 dependencies = [
2071 sources."chalk-0.5.1"
2629 sources."chalk-0.5.1"
2072 sources."ansi-styles-1.1.0"
2630 sources."ansi-styles-1.1.0"
2073 sources."has-ansi-0.1.0"
2631 sources."has-ansi-0.1.0"
2074 sources."strip-ansi-0.3.0"
2632 sources."strip-ansi-0.3.0"
2075 sources."supports-color-0.2.0"
2633 sources."supports-color-0.2.0"
2076 sources."ansi-regex-0.2.1"
2634 sources."ansi-regex-0.2.1"
2077 ];
2635 ];
2078 })
2636 })
2079 sources."grunt-contrib-jshint-0.12.0"
2637 sources."grunt-contrib-jshint-0.12.0"
2080 (sources."grunt-contrib-less-1.4.0" // {
2638 (sources."grunt-contrib-less-1.4.1" // {
2081 dependencies = [
2639 dependencies = [
2082 sources."async-2.0.1"
2640 sources."async-2.5.0"
2083 sources."lodash-4.16.2"
2641 sources."lodash-4.17.4"
2084 ];
2642 ];
2085 })
2643 })
2086 (sources."grunt-contrib-watch-0.6.1" // {
2644 (sources."grunt-contrib-watch-0.6.1" // {
2087 dependencies = [
2645 dependencies = [
2088 sources."lodash-2.4.2"
2646 sources."lodash-2.4.2"
2089 sources."async-0.2.10"
2647 sources."async-0.2.10"
2090 ];
2648 ];
2091 })
2649 })
2092 sources."crisper-2.0.2"
2650 sources."crisper-2.1.1"
2093 (sources."vulcanize-1.14.8" // {
2651 (sources."vulcanize-1.16.0" // {
2094 dependencies = [
2652 dependencies = [
2095 sources."nopt-3.0.6"
2653 sources."nopt-3.0.6"
2096 ];
2654 ];
2097 })
2655 })
2098 sources."grunt-crisper-1.0.1"
2656 sources."grunt-crisper-1.0.1"
2099 (sources."grunt-vulcanize-1.0.0" // {
2657 (sources."grunt-vulcanize-1.0.0" // {
2100 dependencies = [
2658 dependencies = [
2101 sources."crisper-1.2.0"
2659 sources."crisper-1.2.0"
2102 sources."nopt-3.0.6"
2660 sources."nopt-3.0.6"
2103 ];
2661 ];
2104 })
2662 })
2105 (sources."jshint-2.9.3" // {
2663 sources."node2nix-1.3.0"
2664 (sources."jshint-2.9.5" // {
2106 dependencies = [
2665 dependencies = [
2107 sources."minimatch-3.0.3"
2666 sources."minimatch-3.0.4"
2108 sources."lodash-3.7.0"
2667 sources."lodash-3.7.0"
2109 ];
2668 ];
2110 })
2669 })
2111 sources."bower-1.7.9"
2670 sources."bower-1.8.2"
2671 sources."jquery-1.11.3"
2112 sources."favico.js-0.3.10"
2672 sources."favico.js-0.3.10"
2113 sources."appenlight-client-git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.0"
2673 sources."clipboard-1.7.1"
2674 sources."moment-2.18.1"
2675 sources."mousetrap-1.6.1"
2676 sources."appenlight-client-git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.1"
2114 sources."async-0.1.22"
2677 sources."async-0.1.22"
2115 sources."coffee-script-1.3.3"
2678 sources."coffee-script-1.3.3"
2116 sources."colors-0.6.2"
2679 sources."colors-0.6.2"
2117 sources."dateformat-1.0.2-1.2.3"
2680 sources."dateformat-1.0.2-1.2.3"
2118 sources."eventemitter2-0.4.14"
2681 sources."eventemitter2-0.4.14"
2119 (sources."findup-sync-0.1.3" // {
2682 (sources."findup-sync-0.1.3" // {
2120 dependencies = [
2683 dependencies = [
2121 sources."glob-3.2.11"
2684 sources."glob-3.2.11"
2122 sources."lodash-2.4.2"
2685 sources."lodash-2.4.2"
2123 sources."minimatch-0.3.0"
2686 sources."minimatch-0.3.0"
2124 ];
2687 ];
2125 })
2688 })
2126 (sources."glob-3.1.21" // {
2689 (sources."glob-3.1.21" // {
2127 dependencies = [
2690 dependencies = [
2128 sources."inherits-1.0.2"
2691 sources."inherits-1.0.2"
2129 ];
2692 ];
2130 })
2693 })
2131 sources."hooker-0.2.3"
2694 sources."hooker-0.2.3"
2132 sources."iconv-lite-0.2.11"
2695 sources."iconv-lite-0.2.11"
2133 sources."minimatch-0.2.14"
2696 sources."minimatch-0.2.14"
2134 sources."nopt-1.0.10"
2697 sources."nopt-1.0.10"
2135 sources."rimraf-2.2.8"
2698 sources."rimraf-2.2.8"
2136 sources."lodash-0.9.2"
2699 sources."lodash-0.9.2"
2137 sources."underscore.string-2.2.1"
2700 sources."underscore.string-2.2.1"
2138 sources."which-1.0.9"
2701 sources."which-1.0.9"
2139 sources."js-yaml-2.0.5"
2702 sources."js-yaml-2.0.5"
2140 sources."exit-0.1.2"
2703 sources."exit-0.1.2"
2141 sources."getobject-0.1.0"
2704 sources."getobject-0.1.0"
2142 sources."grunt-legacy-util-0.2.0"
2705 sources."grunt-legacy-util-0.2.0"
2143 (sources."grunt-legacy-log-0.1.3" // {
2706 (sources."grunt-legacy-log-0.1.3" // {
2144 dependencies = [
2707 dependencies = [
2145 sources."lodash-2.4.2"
2708 sources."lodash-2.4.2"
2146 sources."underscore.string-2.3.3"
2709 sources."underscore.string-2.3.3"
2147 ];
2710 ];
2148 })
2711 })
2149 sources."inherits-2.0.3"
2712 sources."inherits-2.0.3"
2150 sources."lru-cache-2.7.3"
2713 sources."lru-cache-2.7.3"
2151 sources."sigmund-1.0.1"
2714 sources."sigmund-1.0.1"
2152 sources."graceful-fs-1.2.3"
2715 sources."graceful-fs-1.2.3"
2153 sources."abbrev-1.0.9"
2716 sources."abbrev-1.1.0"
2154 (sources."argparse-0.1.16" // {
2717 (sources."argparse-0.1.16" // {
2155 dependencies = [
2718 dependencies = [
2156 sources."underscore.string-2.4.0"
2719 sources."underscore.string-2.4.0"
2157 ];
2720 ];
2158 })
2721 })
2159 sources."esprima-1.0.4"
2722 sources."esprima-1.0.4"
2160 sources."underscore-1.7.0"
2723 sources."underscore-1.7.0"
2161 (sources."grunt-legacy-log-utils-0.1.1" // {
2724 (sources."grunt-legacy-log-utils-0.1.1" // {
2162 dependencies = [
2725 dependencies = [
2163 sources."lodash-2.4.2"
2726 sources."lodash-2.4.2"
2164 sources."underscore.string-2.3.3"
2727 sources."underscore.string-2.3.3"
2165 ];
2728 ];
2166 })
2729 })
2167 sources."chalk-1.1.3"
2730 sources."chalk-1.1.3"
2168 sources."file-sync-cmp-0.1.1"
2731 sources."file-sync-cmp-0.1.1"
2169 sources."ansi-styles-2.2.1"
2732 sources."ansi-styles-2.2.1"
2170 sources."escape-string-regexp-1.0.5"
2733 sources."escape-string-regexp-1.0.5"
2171 sources."has-ansi-2.0.0"
2734 sources."has-ansi-2.0.0"
2172 sources."strip-ansi-3.0.1"
2735 sources."strip-ansi-3.0.1"
2173 sources."supports-color-2.0.0"
2736 sources."supports-color-2.0.0"
2174 sources."ansi-regex-2.0.0"
2737 sources."ansi-regex-2.1.1"
2175 sources."source-map-0.3.0"
2738 sources."source-map-0.3.0"
2176 sources."amdefine-1.0.0"
2739 sources."amdefine-1.0.1"
2177 (sources."less-2.7.1" // {
2740 (sources."less-2.7.2" // {
2178 dependencies = [
2741 dependencies = [
2179 sources."graceful-fs-4.1.8"
2742 sources."graceful-fs-4.1.11"
2180 sources."source-map-0.5.6"
2743 sources."source-map-0.5.7"
2181 ];
2744 ];
2182 })
2745 })
2183 sources."errno-0.1.4"
2746 sources."errno-0.1.4"
2184 sources."image-size-0.5.0"
2747 sources."image-size-0.5.5"
2185 sources."mime-1.3.4"
2748 sources."mime-1.4.0"
2186 sources."mkdirp-0.5.1"
2749 sources."mkdirp-0.5.1"
2187 sources."promise-7.1.1"
2750 sources."promise-7.3.1"
2751 sources."request-2.82.0"
2188 sources."prr-0.0.0"
2752 sources."prr-0.0.0"
2189 sources."minimist-0.0.8"
2753 sources."minimist-0.0.8"
2190 sources."asap-2.0.5"
2754 sources."asap-2.0.6"
2755 sources."aws-sign2-0.7.0"
2756 sources."aws4-1.6.0"
2757 sources."caseless-0.12.0"
2758 sources."combined-stream-1.0.5"
2759 sources."extend-3.0.1"
2760 sources."forever-agent-0.6.1"
2761 sources."form-data-2.3.1"
2762 sources."har-validator-5.0.3"
2763 sources."hawk-6.0.2"
2764 sources."http-signature-1.2.0"
2765 sources."is-typedarray-1.0.0"
2766 sources."isstream-0.1.2"
2767 sources."json-stringify-safe-5.0.1"
2768 sources."mime-types-2.1.17"
2769 sources."oauth-sign-0.8.2"
2770 sources."performance-now-2.1.0"
2771 sources."qs-6.5.1"
2772 sources."safe-buffer-5.1.1"
2773 sources."stringstream-0.0.5"
2774 sources."tough-cookie-2.3.3"
2775 sources."tunnel-agent-0.6.0"
2776 sources."uuid-3.1.0"
2777 sources."delayed-stream-1.0.0"
2778 sources."asynckit-0.4.0"
2779 sources."ajv-5.2.2"
2780 sources."har-schema-2.0.0"
2781 sources."co-4.6.0"
2782 sources."fast-deep-equal-1.0.0"
2783 sources."json-schema-traverse-0.3.1"
2784 sources."json-stable-stringify-1.0.1"
2785 sources."jsonify-0.0.0"
2786 sources."hoek-4.2.0"
2787 sources."boom-4.3.1"
2788 (sources."cryptiles-3.1.2" // {
2789 dependencies = [
2790 sources."boom-5.2.0"
2791 ];
2792 })
2793 sources."sntp-2.0.2"
2794 sources."assert-plus-1.0.0"
2795 sources."jsprim-1.4.1"
2796 sources."sshpk-1.13.1"
2797 sources."extsprintf-1.3.0"
2798 sources."json-schema-0.2.3"
2799 sources."verror-1.10.0"
2800 sources."core-util-is-1.0.2"
2801 sources."asn1-0.2.3"
2802 sources."dashdash-1.14.1"
2803 sources."getpass-0.1.7"
2804 sources."jsbn-0.1.1"
2805 sources."tweetnacl-0.14.5"
2806 sources."ecc-jsbn-0.1.1"
2807 sources."bcrypt-pbkdf-1.0.1"
2808 sources."mime-db-1.30.0"
2809 sources."punycode-1.4.1"
2191 sources."gaze-0.5.2"
2810 sources."gaze-0.5.2"
2192 sources."tiny-lr-fork-0.0.5"
2811 (sources."tiny-lr-fork-0.0.5" // {
2812 dependencies = [
2813 sources."qs-0.5.6"
2814 ];
2815 })
2193 (sources."globule-0.1.0" // {
2816 (sources."globule-0.1.0" // {
2194 dependencies = [
2817 dependencies = [
2195 sources."lodash-1.0.2"
2818 sources."lodash-1.0.2"
2196 ];
2819 ];
2197 })
2820 })
2198 sources."qs-0.5.6"
2199 sources."faye-websocket-0.4.4"
2821 sources."faye-websocket-0.4.4"
2200 (sources."noptify-0.0.3" // {
2822 (sources."noptify-0.0.3" // {
2201 dependencies = [
2823 dependencies = [
2202 sources."nopt-2.0.0"
2824 sources."nopt-2.0.0"
2203 ];
2825 ];
2204 })
2826 })
2205 sources."debug-0.7.4"
2827 sources."debug-0.7.4"
2206 sources."command-line-args-2.1.6"
2828 sources."command-line-args-3.0.5"
2829 sources."command-line-usage-3.0.8"
2207 sources."dom5-1.3.6"
2830 sources."dom5-1.3.6"
2208 sources."array-back-1.0.3"
2831 sources."array-back-1.0.4"
2209 sources."command-line-usage-2.0.5"
2210 sources."core-js-2.4.1"
2211 sources."feature-detect-es6-1.3.1"
2832 sources."feature-detect-es6-1.3.1"
2212 (sources."find-replace-1.0.2" // {
2833 sources."find-replace-1.0.3"
2213 dependencies = [
2834 sources."typical-2.6.1"
2214 sources."test-value-2.1.0"
2835 sources."test-value-2.1.0"
2215 ];
2836 sources."ansi-escape-sequences-3.0.0"
2216 })
2837 sources."table-layout-0.3.0"
2217 sources."typical-2.6.0"
2838 sources."core-js-2.5.1"
2218 sources."ansi-escape-sequences-2.2.2"
2839 sources."deep-extend-0.4.2"
2219 sources."column-layout-2.1.4"
2840 sources."wordwrapjs-2.0.0"
2220 sources."wordwrapjs-1.2.1"
2841 sources."reduce-flatten-1.0.1"
2221 sources."collect-all-0.2.1"
2222 sources."stream-connect-1.0.2"
2223 sources."stream-via-0.1.1"
2224 (sources."collect-json-1.0.8" // {
2225 dependencies = [
2226 sources."collect-all-1.0.2"
2227 sources."stream-via-1.0.3"
2228 ];
2229 })
2230 sources."deep-extend-0.4.1"
2231 sources."object-tools-2.0.6"
2232 sources."object-get-2.1.0"
2233 sources."test-value-1.1.0"
2234 sources."@types/clone-0.1.30"
2842 sources."@types/clone-0.1.30"
2235 sources."@types/node-4.0.30"
2843 sources."@types/node-4.2.20"
2236 (sources."@types/parse5-0.0.31" // {
2844 (sources."@types/parse5-0.0.31" // {
2237 dependencies = [
2845 dependencies = [
2238 sources."@types/node-6.0.41"
2846 sources."@types/node-6.0.88"
2239 ];
2847 ];
2240 })
2848 })
2241 sources."clone-1.0.2"
2849 sources."clone-1.0.2"
2242 sources."parse5-1.5.1"
2850 sources."parse5-1.5.1"
2243 sources."es6-promise-2.3.0"
2851 sources."es6-promise-2.3.0"
2244 sources."hydrolysis-1.24.1"
2852 (sources."hydrolysis-1.25.0" // {
2245 sources."path-posix-1.0.0"
2246 sources."update-notifier-0.6.3"
2247 sources."babel-polyfill-6.13.0"
2248 sources."doctrine-0.7.2"
2249 (sources."escodegen-1.8.1" // {
2250 dependencies = [
2853 dependencies = [
2251 sources."estraverse-1.9.3"
2854 sources."dom5-1.1.0"
2252 sources."esutils-2.0.2"
2253 sources."esprima-2.7.3"
2254 sources."source-map-0.2.0"
2255 ];
2855 ];
2256 })
2856 })
2257 sources."espree-3.3.1"
2857 sources."path-posix-1.0.0"
2858 sources."acorn-3.3.0"
2859 sources."babel-polyfill-6.26.0"
2860 sources."doctrine-0.7.2"
2861 (sources."escodegen-1.9.0" // {
2862 dependencies = [
2863 sources."estraverse-4.2.0"
2864 sources."esutils-2.0.2"
2865 sources."esprima-3.1.3"
2866 sources."source-map-0.5.7"
2867 ];
2868 })
2869 (sources."espree-3.5.1" // {
2870 dependencies = [
2871 sources."acorn-5.1.2"
2872 ];
2873 })
2258 sources."estraverse-3.1.0"
2874 sources."estraverse-3.1.0"
2259 sources."path-is-absolute-1.0.0"
2875 sources."path-is-absolute-1.0.1"
2260 sources."babel-runtime-6.11.6"
2876 (sources."babel-runtime-6.26.0" // {
2261 sources."regenerator-runtime-0.9.5"
2877 dependencies = [
2878 sources."regenerator-runtime-0.11.0"
2879 ];
2880 })
2881 sources."regenerator-runtime-0.10.5"
2262 sources."esutils-1.1.6"
2882 sources."esutils-1.1.6"
2263 sources."isarray-0.0.1"
2883 sources."isarray-0.0.1"
2264 sources."optionator-0.8.2"
2884 sources."optionator-0.8.2"
2265 sources."prelude-ls-1.1.2"
2885 sources."prelude-ls-1.1.2"
2266 sources."deep-is-0.1.3"
2886 sources."deep-is-0.1.3"
2267 sources."wordwrap-1.0.0"
2887 sources."wordwrap-1.0.0"
2268 sources."type-check-0.3.2"
2888 sources."type-check-0.3.2"
2269 sources."levn-0.3.0"
2889 sources."levn-0.3.0"
2270 sources."fast-levenshtein-2.0.4"
2890 sources."fast-levenshtein-2.0.6"
2271 sources."acorn-4.0.3"
2891 sources."acorn-jsx-3.0.1"
2272 (sources."acorn-jsx-3.0.1" // {
2892 sources."object-assign-4.1.1"
2893 sources."optparse-1.0.5"
2894 sources."semver-5.4.1"
2895 (sources."npm-registry-client-8.4.0" // {
2273 dependencies = [
2896 dependencies = [
2274 sources."acorn-3.3.0"
2897 sources."graceful-fs-4.1.11"
2275 ];
2898 ];
2276 })
2899 })
2277 sources."boxen-0.3.1"
2900 (sources."npmconf-2.1.2" // {
2278 (sources."configstore-2.1.0" // {
2279 dependencies = [
2901 dependencies = [
2280 sources."graceful-fs-4.1.8"
2902 sources."nopt-3.0.6"
2903 sources."once-1.3.3"
2904 sources."semver-4.3.6"
2281 ];
2905 ];
2282 })
2906 })
2283 sources."is-npm-1.0.0"
2907 sources."tar-3.1.15"
2284 sources."latest-version-2.0.0"
2908 sources."temp-0.8.3"
2285 sources."semver-diff-2.1.0"
2909 (sources."fs.extra-1.3.2" // {
2286 sources."filled-array-1.1.0"
2287 sources."object-assign-4.1.0"
2288 sources."repeating-2.0.1"
2289 sources."string-width-1.0.2"
2290 sources."widest-line-1.0.0"
2291 sources."is-finite-1.0.1"
2292 sources."number-is-nan-1.0.0"
2293 sources."code-point-at-1.0.0"
2294 sources."is-fullwidth-code-point-1.0.0"
2295 sources."dot-prop-3.0.0"
2296 sources."os-tmpdir-1.0.1"
2297 sources."osenv-0.1.3"
2298 sources."uuid-2.0.3"
2299 (sources."write-file-atomic-1.2.0" // {
2300 dependencies = [
2910 dependencies = [
2301 sources."graceful-fs-4.1.8"
2911 sources."mkdirp-0.3.5"
2302 ];
2912 ];
2303 })
2913 })
2304 sources."xdg-basedir-2.0.0"
2914 sources."findit-2.0.0"
2305 sources."is-obj-1.0.1"
2915 sources."base64-js-1.2.1"
2306 sources."os-homedir-1.0.1"
2916 sources."slasp-0.0.4"
2307 sources."imurmurhash-0.1.4"
2917 sources."nijs-0.0.23"
2918 sources."concat-stream-1.6.0"
2919 sources."normalize-package-data-2.4.0"
2920 sources."npm-package-arg-5.1.2"
2921 sources."once-1.4.0"
2922 sources."retry-0.10.1"
2308 sources."slide-1.1.6"
2923 sources."slide-1.1.6"
2309 sources."package-json-2.4.0"
2924 sources."ssri-4.1.6"
2310 sources."got-5.6.0"
2925 sources."npmlog-4.1.2"
2311 sources."registry-auth-token-3.0.1"
2926 sources."typedarray-0.0.6"
2312 sources."registry-url-3.1.0"
2927 (sources."readable-stream-2.3.3" // {
2313 sources."semver-5.3.0"
2314 sources."create-error-class-3.0.2"
2315 sources."duplexer2-0.1.4"
2316 sources."is-plain-obj-1.1.0"
2317 sources."is-redirect-1.0.0"
2318 sources."is-retry-allowed-1.1.0"
2319 sources."is-stream-1.1.0"
2320 sources."lowercase-keys-1.0.0"
2321 sources."node-status-codes-1.0.0"
2322 sources."parse-json-2.2.0"
2323 sources."pinkie-promise-2.0.1"
2324 sources."read-all-stream-3.1.0"
2325 (sources."readable-stream-2.1.5" // {
2326 dependencies = [
2928 dependencies = [
2327 sources."isarray-1.0.0"
2929 sources."isarray-1.0.0"
2328 ];
2930 ];
2329 })
2931 })
2330 sources."timed-out-2.0.0"
2331 sources."unzip-response-1.0.1"
2332 sources."url-parse-lax-1.0.0"
2333 sources."capture-stack-trace-1.0.0"
2334 sources."error-ex-1.3.0"
2335 sources."is-arrayish-0.2.1"
2336 sources."pinkie-2.0.4"
2337 sources."buffer-shims-1.0.0"
2338 sources."core-util-is-1.0.2"
2339 sources."process-nextick-args-1.0.7"
2932 sources."process-nextick-args-1.0.7"
2340 sources."string_decoder-0.10.31"
2933 sources."string_decoder-1.0.3"
2341 sources."util-deprecate-1.0.2"
2934 sources."util-deprecate-1.0.2"
2342 sources."prepend-http-1.0.4"
2935 sources."hosted-git-info-2.5.0"
2343 (sources."rc-1.1.6" // {
2936 sources."is-builtin-module-1.0.0"
2937 sources."validate-npm-package-license-3.0.1"
2938 sources."builtin-modules-1.1.1"
2939 sources."spdx-correct-1.0.2"
2940 sources."spdx-expression-parse-1.0.4"
2941 sources."spdx-license-ids-1.2.2"
2942 sources."osenv-0.1.4"
2943 sources."validate-npm-package-name-3.0.0"
2944 sources."os-homedir-1.0.2"
2945 sources."os-tmpdir-1.0.2"
2946 sources."builtins-1.0.3"
2947 sources."wrappy-1.0.2"
2948 sources."are-we-there-yet-1.1.4"
2949 sources."console-control-strings-1.1.0"
2950 sources."gauge-2.7.4"
2951 sources."set-blocking-2.0.0"
2952 sources."delegates-1.0.0"
2953 sources."aproba-1.2.0"
2954 sources."has-unicode-2.0.1"
2955 sources."signal-exit-3.0.2"
2956 sources."string-width-1.0.2"
2957 sources."wide-align-1.1.2"
2958 sources."code-point-at-1.1.0"
2959 sources."is-fullwidth-code-point-1.0.0"
2960 sources."number-is-nan-1.0.1"
2961 sources."config-chain-1.1.11"
2962 sources."ini-1.3.4"
2963 sources."uid-number-0.0.5"
2964 sources."proto-list-1.2.4"
2965 sources."minipass-2.2.1"
2966 sources."minizlib-1.0.3"
2967 sources."yallist-3.0.2"
2968 (sources."fs-extra-0.6.4" // {
2344 dependencies = [
2969 dependencies = [
2345 sources."minimist-1.2.0"
2970 sources."mkdirp-0.3.5"
2346 ];
2971 ];
2347 })
2972 })
2348 sources."ini-1.3.4"
2973 sources."walk-2.3.9"
2349 sources."strip-json-comments-1.0.4"
2974 sources."ncp-0.4.2"
2350 (sources."cli-1.0.0" // {
2975 sources."jsonfile-1.0.1"
2976 sources."foreachasync-3.0.0"
2977 (sources."cli-1.0.1" // {
2351 dependencies = [
2978 dependencies = [
2352 sources."glob-7.1.0"
2979 sources."glob-7.1.2"
2353 sources."minimatch-3.0.3"
2980 sources."minimatch-3.0.4"
2354 ];
2981 ];
2355 })
2982 })
2356 sources."console-browserify-1.1.0"
2983 sources."console-browserify-1.1.0"
2357 (sources."htmlparser2-3.8.3" // {
2984 (sources."htmlparser2-3.8.3" // {
2358 dependencies = [
2985 dependencies = [
2359 sources."readable-stream-1.1.14"
2986 sources."readable-stream-1.1.14"
2987 sources."string_decoder-0.10.31"
2360 ];
2988 ];
2361 })
2989 })
2362 sources."shelljs-0.3.0"
2990 sources."shelljs-0.3.0"
2991 sources."strip-json-comments-1.0.4"
2363 sources."fs.realpath-1.0.0"
2992 sources."fs.realpath-1.0.0"
2364 sources."inflight-1.0.5"
2993 sources."inflight-1.0.6"
2365 sources."once-1.4.0"
2994 sources."brace-expansion-1.1.8"
2366 sources."wrappy-1.0.2"
2995 sources."balanced-match-1.0.0"
2367 sources."brace-expansion-1.1.6"
2368 sources."balanced-match-0.4.2"
2369 sources."concat-map-0.0.1"
2996 sources."concat-map-0.0.1"
2370 sources."date-now-0.1.4"
2997 sources."date-now-0.1.4"
2371 sources."domhandler-2.3.0"
2998 sources."domhandler-2.3.0"
2372 sources."domutils-1.5.1"
2999 sources."domutils-1.5.1"
2373 sources."domelementtype-1.3.0"
3000 sources."domelementtype-1.3.0"
2374 sources."entities-1.0.0"
3001 sources."entities-1.0.0"
2375 (sources."dom-serializer-0.1.0" // {
3002 (sources."dom-serializer-0.1.0" // {
2376 dependencies = [
3003 dependencies = [
2377 sources."domelementtype-1.1.3"
3004 sources."domelementtype-1.1.3"
2378 sources."entities-1.1.1"
3005 sources."entities-1.1.1"
2379 ];
3006 ];
2380 })
3007 })
3008 sources."good-listener-1.2.2"
3009 sources."select-1.1.2"
3010 sources."tiny-emitter-2.0.2"
3011 sources."delegate-3.1.3"
2381 ];
3012 ];
2382 meta = {
3013 meta = {
2383 };
3014 };
2384 production = false;
3015 production = false;
2385 };
3016 };
2386 in
3017 in
2387 {
3018 {
2388 tarball = nodeEnv.buildNodeSourceDist args;
3019 tarball = nodeEnv.buildNodeSourceDist args;
2389 package = nodeEnv.buildNodePackage args;
3020 package = nodeEnv.buildNodePackage args;
2390 shell = nodeEnv.buildNodeShell args;
3021 shell = nodeEnv.buildNodeShell args;
2391 } No newline at end of file
3022 }
@@ -1,2008 +1,2099 b''
1 # Generated by pip2nix 0.4.0
1 # Generated by pip2nix 0.4.0
2 # See https://github.com/johbo/pip2nix
2 # See https://github.com/johbo/pip2nix
3
3
4 {
4 {
5 Babel = super.buildPythonPackage {
5 Babel = super.buildPythonPackage {
6 name = "Babel-1.3";
6 name = "Babel-1.3";
7 buildInputs = with self; [];
7 buildInputs = with self; [];
8 doCheck = false;
8 doCheck = false;
9 propagatedBuildInputs = with self; [pytz];
9 propagatedBuildInputs = with self; [pytz];
10 src = fetchurl {
10 src = fetchurl {
11 url = "https://pypi.python.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
11 url = "https://pypi.python.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
12 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
12 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
13 };
13 };
14 meta = {
14 meta = {
15 license = [ pkgs.lib.licenses.bsdOriginal ];
15 license = [ pkgs.lib.licenses.bsdOriginal ];
16 };
16 };
17 };
17 };
18 Beaker = super.buildPythonPackage {
18 Beaker = super.buildPythonPackage {
19 name = "Beaker-1.7.0";
19 name = "Beaker-1.9.0";
20 buildInputs = with self; [];
20 buildInputs = with self; [];
21 doCheck = false;
21 doCheck = false;
22 propagatedBuildInputs = with self; [];
22 propagatedBuildInputs = with self; [funcsigs];
23 src = fetchurl {
23 src = fetchurl {
24 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
24 url = "https://pypi.python.org/packages/93/b2/12de6937b06e9615dbb3cb3a1c9af17f133f435bdef59f4ad42032b6eb49/Beaker-1.9.0.tar.gz";
25 md5 = "386be3f7fe427358881eee4622b428b3";
25 md5 = "38b3fcdfa24faf97c6cf66991eb54e9c";
26 };
26 };
27 meta = {
27 meta = {
28 license = [ pkgs.lib.licenses.bsdOriginal ];
28 license = [ pkgs.lib.licenses.bsdOriginal ];
29 };
29 };
30 };
30 };
31 CProfileV = super.buildPythonPackage {
31 CProfileV = super.buildPythonPackage {
32 name = "CProfileV-1.0.6";
32 name = "CProfileV-1.0.7";
33 buildInputs = with self; [];
33 buildInputs = with self; [];
34 doCheck = false;
34 doCheck = false;
35 propagatedBuildInputs = with self; [bottle];
35 propagatedBuildInputs = with self; [bottle];
36 src = fetchurl {
36 src = fetchurl {
37 url = "https://pypi.python.org/packages/eb/df/983a0b6cfd3ac94abf023f5011cb04f33613ace196e33f53c86cf91850d5/CProfileV-1.0.6.tar.gz";
37 url = "https://pypi.python.org/packages/df/50/d8c1ada7d537c64b0f76453fa31dedb6af6e27b82fcf0331e5f71a4cf98b/CProfileV-1.0.7.tar.gz";
38 md5 = "08c7c242b6e64237bc53c5d13537e03d";
38 md5 = "db4c7640438aa3d8887e194c81c7a019";
39 };
39 };
40 meta = {
40 meta = {
41 license = [ pkgs.lib.licenses.mit ];
41 license = [ pkgs.lib.licenses.mit ];
42 };
42 };
43 };
43 };
44 Chameleon = super.buildPythonPackage {
44 Chameleon = super.buildPythonPackage {
45 name = "Chameleon-2.24";
45 name = "Chameleon-2.24";
46 buildInputs = with self; [];
46 buildInputs = with self; [];
47 doCheck = false;
47 doCheck = false;
48 propagatedBuildInputs = with self; [];
48 propagatedBuildInputs = with self; [];
49 src = fetchurl {
49 src = fetchurl {
50 url = "https://pypi.python.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
50 url = "https://pypi.python.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
51 md5 = "1b01f1f6533a8a11d0d2f2366dec5342";
51 md5 = "1b01f1f6533a8a11d0d2f2366dec5342";
52 };
52 };
53 meta = {
53 meta = {
54 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
54 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
55 };
55 };
56 };
56 };
57 FormEncode = super.buildPythonPackage {
57 FormEncode = super.buildPythonPackage {
58 name = "FormEncode-1.2.4";
58 name = "FormEncode-1.2.4";
59 buildInputs = with self; [];
59 buildInputs = with self; [];
60 doCheck = false;
60 doCheck = false;
61 propagatedBuildInputs = with self; [];
61 propagatedBuildInputs = with self; [];
62 src = fetchurl {
62 src = fetchurl {
63 url = "https://pypi.python.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
63 url = "https://pypi.python.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
64 md5 = "6bc17fb9aed8aea198975e888e2077f4";
64 md5 = "6bc17fb9aed8aea198975e888e2077f4";
65 };
65 };
66 meta = {
66 meta = {
67 license = [ pkgs.lib.licenses.psfl ];
67 license = [ pkgs.lib.licenses.psfl ];
68 };
68 };
69 };
69 };
70 Jinja2 = super.buildPythonPackage {
70 Jinja2 = super.buildPythonPackage {
71 name = "Jinja2-2.7.3";
71 name = "Jinja2-2.7.3";
72 buildInputs = with self; [];
72 buildInputs = with self; [];
73 doCheck = false;
73 doCheck = false;
74 propagatedBuildInputs = with self; [MarkupSafe];
74 propagatedBuildInputs = with self; [MarkupSafe];
75 src = fetchurl {
75 src = fetchurl {
76 url = "https://pypi.python.org/packages/b0/73/eab0bca302d6d6a0b5c402f47ad1760dc9cb2dd14bbc1873ad48db258e4d/Jinja2-2.7.3.tar.gz";
76 url = "https://pypi.python.org/packages/b0/73/eab0bca302d6d6a0b5c402f47ad1760dc9cb2dd14bbc1873ad48db258e4d/Jinja2-2.7.3.tar.gz";
77 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
77 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
78 };
78 };
79 meta = {
79 meta = {
80 license = [ pkgs.lib.licenses.bsdOriginal ];
80 license = [ pkgs.lib.licenses.bsdOriginal ];
81 };
81 };
82 };
82 };
83 Mako = super.buildPythonPackage {
83 Mako = super.buildPythonPackage {
84 name = "Mako-1.0.6";
84 name = "Mako-1.0.7";
85 buildInputs = with self; [];
85 buildInputs = with self; [];
86 doCheck = false;
86 doCheck = false;
87 propagatedBuildInputs = with self; [MarkupSafe];
87 propagatedBuildInputs = with self; [MarkupSafe];
88 src = fetchurl {
88 src = fetchurl {
89 url = "https://pypi.python.org/packages/56/4b/cb75836863a6382199aefb3d3809937e21fa4cb0db15a4f4ba0ecc2e7e8e/Mako-1.0.6.tar.gz";
89 url = "https://pypi.python.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz";
90 md5 = "a28e22a339080316b2acc352b9ee631c";
90 md5 = "5836cc997b1b773ef389bf6629c30e65";
91 };
91 };
92 meta = {
92 meta = {
93 license = [ pkgs.lib.licenses.mit ];
93 license = [ pkgs.lib.licenses.mit ];
94 };
94 };
95 };
95 };
96 Markdown = super.buildPythonPackage {
96 Markdown = super.buildPythonPackage {
97 name = "Markdown-2.6.7";
97 name = "Markdown-2.6.8";
98 buildInputs = with self; [];
98 buildInputs = with self; [];
99 doCheck = false;
99 doCheck = false;
100 propagatedBuildInputs = with self; [];
100 propagatedBuildInputs = with self; [];
101 src = fetchurl {
101 src = fetchurl {
102 url = "https://pypi.python.org/packages/48/a4/fc6b002789c2239ac620ca963694c95b8f74e4747769cdf6021276939e74/Markdown-2.6.7.zip";
102 url = "https://pypi.python.org/packages/1d/25/3f6d2cb31ec42ca5bd3bfbea99b63892b735d76e26f20dd2dcc34ffe4f0d/Markdown-2.6.8.tar.gz";
103 md5 = "632710a7474bbb74a82084392251061f";
103 md5 = "d9ef057a5bd185f6f536400a31fc5d45";
104 };
104 };
105 meta = {
105 meta = {
106 license = [ pkgs.lib.licenses.bsdOriginal ];
106 license = [ pkgs.lib.licenses.bsdOriginal ];
107 };
107 };
108 };
108 };
109 MarkupSafe = super.buildPythonPackage {
109 MarkupSafe = super.buildPythonPackage {
110 name = "MarkupSafe-0.23";
110 name = "MarkupSafe-0.23";
111 buildInputs = with self; [];
111 buildInputs = with self; [];
112 doCheck = false;
112 doCheck = false;
113 propagatedBuildInputs = with self; [];
113 propagatedBuildInputs = with self; [];
114 src = fetchurl {
114 src = fetchurl {
115 url = "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz";
115 url = "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz";
116 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
116 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
117 };
117 };
118 meta = {
118 meta = {
119 license = [ pkgs.lib.licenses.bsdOriginal ];
119 license = [ pkgs.lib.licenses.bsdOriginal ];
120 };
120 };
121 };
121 };
122 MySQL-python = super.buildPythonPackage {
122 MySQL-python = super.buildPythonPackage {
123 name = "MySQL-python-1.2.5";
123 name = "MySQL-python-1.2.5";
124 buildInputs = with self; [];
124 buildInputs = with self; [];
125 doCheck = false;
125 doCheck = false;
126 propagatedBuildInputs = with self; [];
126 propagatedBuildInputs = with self; [];
127 src = fetchurl {
127 src = fetchurl {
128 url = "https://pypi.python.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
128 url = "https://pypi.python.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
129 md5 = "654f75b302db6ed8dc5a898c625e030c";
129 md5 = "654f75b302db6ed8dc5a898c625e030c";
130 };
130 };
131 meta = {
131 meta = {
132 license = [ pkgs.lib.licenses.gpl1 ];
132 license = [ pkgs.lib.licenses.gpl1 ];
133 };
133 };
134 };
134 };
135 Paste = super.buildPythonPackage {
135 Paste = super.buildPythonPackage {
136 name = "Paste-2.0.3";
136 name = "Paste-2.0.3";
137 buildInputs = with self; [];
137 buildInputs = with self; [];
138 doCheck = false;
138 doCheck = false;
139 propagatedBuildInputs = with self; [six];
139 propagatedBuildInputs = with self; [six];
140 src = fetchurl {
140 src = fetchurl {
141 url = "https://pypi.python.org/packages/30/c3/5c2f7c7a02e4f58d4454353fa1c32c94f79fa4e36d07a67c0ac295ea369e/Paste-2.0.3.tar.gz";
141 url = "https://pypi.python.org/packages/30/c3/5c2f7c7a02e4f58d4454353fa1c32c94f79fa4e36d07a67c0ac295ea369e/Paste-2.0.3.tar.gz";
142 md5 = "1231e14eae62fa7ed76e9130b04bc61e";
142 md5 = "1231e14eae62fa7ed76e9130b04bc61e";
143 };
143 };
144 meta = {
144 meta = {
145 license = [ pkgs.lib.licenses.mit ];
145 license = [ pkgs.lib.licenses.mit ];
146 };
146 };
147 };
147 };
148 PasteDeploy = super.buildPythonPackage {
148 PasteDeploy = super.buildPythonPackage {
149 name = "PasteDeploy-1.5.2";
149 name = "PasteDeploy-1.5.2";
150 buildInputs = with self; [];
150 buildInputs = with self; [];
151 doCheck = false;
151 doCheck = false;
152 propagatedBuildInputs = with self; [];
152 propagatedBuildInputs = with self; [];
153 src = fetchurl {
153 src = fetchurl {
154 url = "https://pypi.python.org/packages/0f/90/8e20cdae206c543ea10793cbf4136eb9a8b3f417e04e40a29d72d9922cbd/PasteDeploy-1.5.2.tar.gz";
154 url = "https://pypi.python.org/packages/0f/90/8e20cdae206c543ea10793cbf4136eb9a8b3f417e04e40a29d72d9922cbd/PasteDeploy-1.5.2.tar.gz";
155 md5 = "352b7205c78c8de4987578d19431af3b";
155 md5 = "352b7205c78c8de4987578d19431af3b";
156 };
156 };
157 meta = {
157 meta = {
158 license = [ pkgs.lib.licenses.mit ];
158 license = [ pkgs.lib.licenses.mit ];
159 };
159 };
160 };
160 };
161 PasteScript = super.buildPythonPackage {
161 PasteScript = super.buildPythonPackage {
162 name = "PasteScript-1.7.5";
162 name = "PasteScript-1.7.5";
163 buildInputs = with self; [];
163 buildInputs = with self; [];
164 doCheck = false;
164 doCheck = false;
165 propagatedBuildInputs = with self; [Paste PasteDeploy];
165 propagatedBuildInputs = with self; [Paste PasteDeploy];
166 src = fetchurl {
166 src = fetchurl {
167 url = "https://pypi.python.org/packages/a5/05/fc60efa7c2f17a1dbaeccb2a903a1e90902d92b9d00eebabe3095829d806/PasteScript-1.7.5.tar.gz";
167 url = "https://pypi.python.org/packages/a5/05/fc60efa7c2f17a1dbaeccb2a903a1e90902d92b9d00eebabe3095829d806/PasteScript-1.7.5.tar.gz";
168 md5 = "4c72d78dcb6bb993f30536842c16af4d";
168 md5 = "4c72d78dcb6bb993f30536842c16af4d";
169 };
169 };
170 meta = {
170 meta = {
171 license = [ pkgs.lib.licenses.mit ];
171 license = [ pkgs.lib.licenses.mit ];
172 };
172 };
173 };
173 };
174 Pygments = super.buildPythonPackage {
174 Pygments = super.buildPythonPackage {
175 name = "Pygments-2.2.0";
175 name = "Pygments-2.2.0";
176 buildInputs = with self; [];
176 buildInputs = with self; [];
177 doCheck = false;
177 doCheck = false;
178 propagatedBuildInputs = with self; [];
178 propagatedBuildInputs = with self; [];
179 src = fetchurl {
179 src = fetchurl {
180 url = "https://pypi.python.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz";
180 url = "https://pypi.python.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz";
181 md5 = "13037baca42f16917cbd5ad2fab50844";
181 md5 = "13037baca42f16917cbd5ad2fab50844";
182 };
182 };
183 meta = {
183 meta = {
184 license = [ pkgs.lib.licenses.bsdOriginal ];
184 license = [ pkgs.lib.licenses.bsdOriginal ];
185 };
185 };
186 };
186 };
187 Pylons = super.buildPythonPackage {
187 Pylons = super.buildPythonPackage {
188 name = "Pylons-1.0.2.dev20170630";
188 name = "Pylons-1.0.2.dev20170630";
189 buildInputs = with self; [];
189 buildInputs = with self; [];
190 doCheck = false;
190 doCheck = false;
191 propagatedBuildInputs = with self; [Routes WebHelpers Beaker Paste PasteDeploy PasteScript FormEncode simplejson decorator nose Mako WebError WebTest Tempita MarkupSafe WebOb];
191 propagatedBuildInputs = with self; [Routes WebHelpers Beaker Paste PasteDeploy PasteScript FormEncode simplejson decorator nose Mako WebError WebTest Tempita MarkupSafe WebOb];
192 src = fetchurl {
192 src = fetchurl {
193 url = "https://code.rhodecode.com/upstream/pylons/archive/707354ee4261b9c10450404fc9852ccea4fd667d.tar.gz?md5=f26633726fa2cd3a340316ee6a5d218f";
193 url = "https://code.rhodecode.com/upstream/pylons/archive/707354ee4261b9c10450404fc9852ccea4fd667d.tar.gz?md5=f26633726fa2cd3a340316ee6a5d218f";
194 md5 = "f26633726fa2cd3a340316ee6a5d218f";
194 md5 = "f26633726fa2cd3a340316ee6a5d218f";
195 };
195 };
196 meta = {
196 meta = {
197 license = [ pkgs.lib.licenses.bsdOriginal ];
197 license = [ pkgs.lib.licenses.bsdOriginal ];
198 };
198 };
199 };
199 };
200 Routes = super.buildPythonPackage {
200 Routes = super.buildPythonPackage {
201 name = "Routes-1.13";
201 name = "Routes-1.13";
202 buildInputs = with self; [];
202 buildInputs = with self; [];
203 doCheck = false;
203 doCheck = false;
204 propagatedBuildInputs = with self; [repoze.lru];
204 propagatedBuildInputs = with self; [repoze.lru];
205 src = fetchurl {
205 src = fetchurl {
206 url = "https://pypi.python.org/packages/88/d3/259c3b3cde8837eb9441ab5f574a660e8a4acea8f54a078441d4d2acac1c/Routes-1.13.tar.gz";
206 url = "https://pypi.python.org/packages/88/d3/259c3b3cde8837eb9441ab5f574a660e8a4acea8f54a078441d4d2acac1c/Routes-1.13.tar.gz";
207 md5 = "d527b0ab7dd9172b1275a41f97448783";
207 md5 = "d527b0ab7dd9172b1275a41f97448783";
208 };
208 };
209 meta = {
209 meta = {
210 license = [ pkgs.lib.licenses.bsdOriginal ];
210 license = [ pkgs.lib.licenses.bsdOriginal ];
211 };
211 };
212 };
212 };
213 SQLAlchemy = super.buildPythonPackage {
213 SQLAlchemy = super.buildPythonPackage {
214 name = "SQLAlchemy-0.9.9";
214 name = "SQLAlchemy-1.1.11";
215 buildInputs = with self; [];
215 buildInputs = with self; [];
216 doCheck = false;
216 doCheck = false;
217 propagatedBuildInputs = with self; [];
217 propagatedBuildInputs = with self; [];
218 src = fetchurl {
218 src = fetchurl {
219 url = "https://pypi.python.org/packages/28/f7/1bbfd0d8597e8c358d5e15a166a486ad82fc5579b4e67b6ef7c05b1d182b/SQLAlchemy-0.9.9.tar.gz";
219 url = "https://pypi.python.org/packages/59/f1/28f2205c3175e6bf32300c0f30f9d91dbc9eb910debbff3ffecb88d18528/SQLAlchemy-1.1.11.tar.gz";
220 md5 = "8a10a9bd13ed3336ef7333ac2cc679ff";
220 md5 = "3de387eddb4012083a4562928c511e43";
221 };
221 };
222 meta = {
222 meta = {
223 license = [ pkgs.lib.licenses.mit ];
223 license = [ pkgs.lib.licenses.mit ];
224 };
224 };
225 };
225 };
226 Sphinx = super.buildPythonPackage {
226 Sphinx = super.buildPythonPackage {
227 name = "Sphinx-1.2.2";
227 name = "Sphinx-1.2.2";
228 buildInputs = with self; [];
228 buildInputs = with self; [];
229 doCheck = false;
229 doCheck = false;
230 propagatedBuildInputs = with self; [Pygments docutils Jinja2];
230 propagatedBuildInputs = with self; [Pygments docutils Jinja2];
231 src = fetchurl {
231 src = fetchurl {
232 url = "https://pypi.python.org/packages/0a/50/34017e6efcd372893a416aba14b84a1a149fc7074537b0e9cb6ca7b7abe9/Sphinx-1.2.2.tar.gz";
232 url = "https://pypi.python.org/packages/0a/50/34017e6efcd372893a416aba14b84a1a149fc7074537b0e9cb6ca7b7abe9/Sphinx-1.2.2.tar.gz";
233 md5 = "3dc73ccaa8d0bfb2d62fb671b1f7e8a4";
233 md5 = "3dc73ccaa8d0bfb2d62fb671b1f7e8a4";
234 };
234 };
235 meta = {
235 meta = {
236 license = [ pkgs.lib.licenses.bsdOriginal ];
236 license = [ pkgs.lib.licenses.bsdOriginal ];
237 };
237 };
238 };
238 };
239 Tempita = super.buildPythonPackage {
239 Tempita = super.buildPythonPackage {
240 name = "Tempita-0.5.2";
240 name = "Tempita-0.5.2";
241 buildInputs = with self; [];
241 buildInputs = with self; [];
242 doCheck = false;
242 doCheck = false;
243 propagatedBuildInputs = with self; [];
243 propagatedBuildInputs = with self; [];
244 src = fetchurl {
244 src = fetchurl {
245 url = "https://pypi.python.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
245 url = "https://pypi.python.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
246 md5 = "4c2f17bb9d481821c41b6fbee904cea1";
246 md5 = "4c2f17bb9d481821c41b6fbee904cea1";
247 };
247 };
248 meta = {
248 meta = {
249 license = [ pkgs.lib.licenses.mit ];
249 license = [ pkgs.lib.licenses.mit ];
250 };
250 };
251 };
251 };
252 URLObject = super.buildPythonPackage {
252 URLObject = super.buildPythonPackage {
253 name = "URLObject-2.4.0";
253 name = "URLObject-2.4.0";
254 buildInputs = with self; [];
254 buildInputs = with self; [];
255 doCheck = false;
255 doCheck = false;
256 propagatedBuildInputs = with self; [];
256 propagatedBuildInputs = with self; [];
257 src = fetchurl {
257 src = fetchurl {
258 url = "https://pypi.python.org/packages/cb/b6/e25e58500f9caef85d664bec71ec67c116897bfebf8622c32cb75d1ca199/URLObject-2.4.0.tar.gz";
258 url = "https://pypi.python.org/packages/cb/b6/e25e58500f9caef85d664bec71ec67c116897bfebf8622c32cb75d1ca199/URLObject-2.4.0.tar.gz";
259 md5 = "2ed819738a9f0a3051f31dc9924e3065";
259 md5 = "2ed819738a9f0a3051f31dc9924e3065";
260 };
260 };
261 meta = {
261 meta = {
262 license = [ ];
262 license = [ ];
263 };
263 };
264 };
264 };
265 WebError = super.buildPythonPackage {
265 WebError = super.buildPythonPackage {
266 name = "WebError-0.10.3";
266 name = "WebError-0.10.3";
267 buildInputs = with self; [];
267 buildInputs = with self; [];
268 doCheck = false;
268 doCheck = false;
269 propagatedBuildInputs = with self; [WebOb Tempita Pygments Paste];
269 propagatedBuildInputs = with self; [WebOb Tempita Pygments Paste];
270 src = fetchurl {
270 src = fetchurl {
271 url = "https://pypi.python.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
271 url = "https://pypi.python.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
272 md5 = "84b9990b0baae6fd440b1e60cdd06f9a";
272 md5 = "84b9990b0baae6fd440b1e60cdd06f9a";
273 };
273 };
274 meta = {
274 meta = {
275 license = [ pkgs.lib.licenses.mit ];
275 license = [ pkgs.lib.licenses.mit ];
276 };
276 };
277 };
277 };
278 WebHelpers = super.buildPythonPackage {
278 WebHelpers = super.buildPythonPackage {
279 name = "WebHelpers-1.3";
279 name = "WebHelpers-1.3";
280 buildInputs = with self; [];
280 buildInputs = with self; [];
281 doCheck = false;
281 doCheck = false;
282 propagatedBuildInputs = with self; [MarkupSafe];
282 propagatedBuildInputs = with self; [MarkupSafe];
283 src = fetchurl {
283 src = fetchurl {
284 url = "https://pypi.python.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
284 url = "https://pypi.python.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
285 md5 = "32749ffadfc40fea51075a7def32588b";
285 md5 = "32749ffadfc40fea51075a7def32588b";
286 };
286 };
287 meta = {
287 meta = {
288 license = [ pkgs.lib.licenses.bsdOriginal ];
288 license = [ pkgs.lib.licenses.bsdOriginal ];
289 };
289 };
290 };
290 };
291 WebHelpers2 = super.buildPythonPackage {
291 WebHelpers2 = super.buildPythonPackage {
292 name = "WebHelpers2-2.0";
292 name = "WebHelpers2-2.0";
293 buildInputs = with self; [];
293 buildInputs = with self; [];
294 doCheck = false;
294 doCheck = false;
295 propagatedBuildInputs = with self; [MarkupSafe six];
295 propagatedBuildInputs = with self; [MarkupSafe six];
296 src = fetchurl {
296 src = fetchurl {
297 url = "https://pypi.python.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
297 url = "https://pypi.python.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
298 md5 = "0f6b68d70c12ee0aed48c00b24da13d3";
298 md5 = "0f6b68d70c12ee0aed48c00b24da13d3";
299 };
299 };
300 meta = {
300 meta = {
301 license = [ pkgs.lib.licenses.mit ];
301 license = [ pkgs.lib.licenses.mit ];
302 };
302 };
303 };
303 };
304 WebOb = super.buildPythonPackage {
304 WebOb = super.buildPythonPackage {
305 name = "WebOb-1.3.1";
305 name = "WebOb-1.7.3";
306 buildInputs = with self; [];
306 buildInputs = with self; [];
307 doCheck = false;
307 doCheck = false;
308 propagatedBuildInputs = with self; [];
308 propagatedBuildInputs = with self; [];
309 src = fetchurl {
309 src = fetchurl {
310 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
310 url = "https://pypi.python.org/packages/46/87/2f96d8d43b2078fae6e1d33fa86b95c228cebed060f4e3c7576cc44ea83b/WebOb-1.7.3.tar.gz";
311 md5 = "20918251c5726956ba8fef22d1556177";
311 md5 = "350028baffc508e3d23c078118e35316";
312 };
312 };
313 meta = {
313 meta = {
314 license = [ pkgs.lib.licenses.mit ];
314 license = [ pkgs.lib.licenses.mit ];
315 };
315 };
316 };
316 };
317 WebTest = super.buildPythonPackage {
317 WebTest = super.buildPythonPackage {
318 name = "WebTest-1.4.3";
318 name = "WebTest-2.0.27";
319 buildInputs = with self; [];
319 buildInputs = with self; [];
320 doCheck = false;
320 doCheck = false;
321 propagatedBuildInputs = with self; [WebOb];
321 propagatedBuildInputs = with self; [six WebOb waitress beautifulsoup4];
322 src = fetchurl {
322 src = fetchurl {
323 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
323 url = "https://pypi.python.org/packages/80/fa/ca3a759985c72e3a124cbca3e1f8a2e931a07ffd31fd45d8f7bf21cb95cf/WebTest-2.0.27.tar.gz";
324 md5 = "631ce728bed92c681a4020a36adbc353";
324 md5 = "54e6515ac71c51b6fc90179483c749ad";
325 };
325 };
326 meta = {
326 meta = {
327 license = [ pkgs.lib.licenses.mit ];
327 license = [ pkgs.lib.licenses.mit ];
328 };
328 };
329 };
329 };
330 Whoosh = super.buildPythonPackage {
330 Whoosh = super.buildPythonPackage {
331 name = "Whoosh-2.7.4";
331 name = "Whoosh-2.7.4";
332 buildInputs = with self; [];
332 buildInputs = with self; [];
333 doCheck = false;
333 doCheck = false;
334 propagatedBuildInputs = with self; [];
334 propagatedBuildInputs = with self; [];
335 src = fetchurl {
335 src = fetchurl {
336 url = "https://pypi.python.org/packages/25/2b/6beed2107b148edc1321da0d489afc4617b9ed317ef7b72d4993cad9b684/Whoosh-2.7.4.tar.gz";
336 url = "https://pypi.python.org/packages/25/2b/6beed2107b148edc1321da0d489afc4617b9ed317ef7b72d4993cad9b684/Whoosh-2.7.4.tar.gz";
337 md5 = "c2710105f20b3e29936bd2357383c325";
337 md5 = "c2710105f20b3e29936bd2357383c325";
338 };
338 };
339 meta = {
339 meta = {
340 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
340 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
341 };
341 };
342 };
342 };
343 alembic = super.buildPythonPackage {
343 alembic = super.buildPythonPackage {
344 name = "alembic-0.8.4";
344 name = "alembic-0.9.2";
345 buildInputs = with self; [];
345 buildInputs = with self; [];
346 doCheck = false;
346 doCheck = false;
347 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor];
347 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor python-dateutil];
348 src = fetchurl {
348 src = fetchurl {
349 url = "https://pypi.python.org/packages/ca/7e/299b4499b5c75e5a38c5845145ad24755bebfb8eec07a2e1c366b7181eeb/alembic-0.8.4.tar.gz";
349 url = "https://pypi.python.org/packages/78/48/b5b26e7218b415f40b60b92c53853d242e5456c0f19f6c66101d98ff5f2a/alembic-0.9.2.tar.gz";
350 md5 = "5f95d8ee62b443f9b37eb5bee76c582d";
350 md5 = "40daf8bae50969beea40efaaf0839ff4";
351 };
351 };
352 meta = {
352 meta = {
353 license = [ pkgs.lib.licenses.mit ];
353 license = [ pkgs.lib.licenses.mit ];
354 };
354 };
355 };
355 };
356 amqplib = super.buildPythonPackage {
356 amqplib = super.buildPythonPackage {
357 name = "amqplib-1.0.2";
357 name = "amqplib-1.0.2";
358 buildInputs = with self; [];
358 buildInputs = with self; [];
359 doCheck = false;
359 doCheck = false;
360 propagatedBuildInputs = with self; [];
360 propagatedBuildInputs = with self; [];
361 src = fetchurl {
361 src = fetchurl {
362 url = "https://pypi.python.org/packages/75/b7/8c2429bf8d92354a0118614f9a4d15e53bc69ebedce534284111de5a0102/amqplib-1.0.2.tgz";
362 url = "https://pypi.python.org/packages/75/b7/8c2429bf8d92354a0118614f9a4d15e53bc69ebedce534284111de5a0102/amqplib-1.0.2.tgz";
363 md5 = "5c92f17fbedd99b2b4a836d4352d1e2f";
363 md5 = "5c92f17fbedd99b2b4a836d4352d1e2f";
364 };
364 };
365 meta = {
365 meta = {
366 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
366 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
367 };
367 };
368 };
368 };
369 anyjson = super.buildPythonPackage {
369 anyjson = super.buildPythonPackage {
370 name = "anyjson-0.3.3";
370 name = "anyjson-0.3.3";
371 buildInputs = with self; [];
371 buildInputs = with self; [];
372 doCheck = false;
372 doCheck = false;
373 propagatedBuildInputs = with self; [];
373 propagatedBuildInputs = with self; [];
374 src = fetchurl {
374 src = fetchurl {
375 url = "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz";
375 url = "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz";
376 md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
376 md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
377 };
377 };
378 meta = {
378 meta = {
379 license = [ pkgs.lib.licenses.bsdOriginal ];
379 license = [ pkgs.lib.licenses.bsdOriginal ];
380 };
380 };
381 };
381 };
382 appenlight-client = super.buildPythonPackage {
382 appenlight-client = super.buildPythonPackage {
383 name = "appenlight-client-0.6.14";
383 name = "appenlight-client-0.6.21";
384 buildInputs = with self; [];
384 buildInputs = with self; [];
385 doCheck = false;
385 doCheck = false;
386 propagatedBuildInputs = with self; [WebOb requests];
386 propagatedBuildInputs = with self; [WebOb requests six];
387 src = fetchurl {
387 src = fetchurl {
388 url = "https://pypi.python.org/packages/4d/e0/23fee3ebada8143f707e65c06bcb82992040ee64ea8355e044ed55ebf0c1/appenlight_client-0.6.14.tar.gz";
388 url = "https://pypi.python.org/packages/c9/23/91b66cfa0b963662c10b2a06ccaadf3f3a4848a7a2aa16255cb43d5160ec/appenlight_client-0.6.21.tar.gz";
389 md5 = "578c69b09f4356d898fff1199b98a95c";
389 md5 = "273999ac854fdaefa8d0fb61965a4ed9";
390 };
390 };
391 meta = {
391 meta = {
392 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "DFSG approved"; } ];
392 license = [ pkgs.lib.licenses.bsdOriginal ];
393 };
393 };
394 };
394 };
395 authomatic = super.buildPythonPackage {
395 authomatic = super.buildPythonPackage {
396 name = "authomatic-0.1.0.post1";
396 name = "authomatic-0.1.0.post1";
397 buildInputs = with self; [];
397 buildInputs = with self; [];
398 doCheck = false;
398 doCheck = false;
399 propagatedBuildInputs = with self; [];
399 propagatedBuildInputs = with self; [];
400 src = fetchurl {
400 src = fetchurl {
401 url = "https://pypi.python.org/packages/08/1a/8a930461e604c2d5a7a871e1ac59fa82ccf994c32e807230c8d2fb07815a/Authomatic-0.1.0.post1.tar.gz";
401 url = "https://pypi.python.org/packages/08/1a/8a930461e604c2d5a7a871e1ac59fa82ccf994c32e807230c8d2fb07815a/Authomatic-0.1.0.post1.tar.gz";
402 md5 = "be3f3ce08747d776aae6d6cc8dcb49a9";
402 md5 = "be3f3ce08747d776aae6d6cc8dcb49a9";
403 };
403 };
404 meta = {
404 meta = {
405 license = [ pkgs.lib.licenses.mit ];
405 license = [ pkgs.lib.licenses.mit ];
406 };
406 };
407 };
407 };
408 backport-ipaddress = super.buildPythonPackage {
409 name = "backport-ipaddress-0.1";
410 buildInputs = with self; [];
411 doCheck = false;
412 propagatedBuildInputs = with self; [];
413 src = fetchurl {
414 url = "https://pypi.python.org/packages/d3/30/54c6dab05a4dec44db25ff309f1fbb6b7a8bde3f2bade38bb9da67bbab8f/backport_ipaddress-0.1.tar.gz";
415 md5 = "9c1f45f4361f71b124d7293a60006c05";
416 };
417 meta = {
418 license = [ pkgs.lib.licenses.psfl ];
419 };
420 };
421 backports.shutil-get-terminal-size = super.buildPythonPackage {
408 backports.shutil-get-terminal-size = super.buildPythonPackage {
422 name = "backports.shutil-get-terminal-size-1.0.0";
409 name = "backports.shutil-get-terminal-size-1.0.0";
423 buildInputs = with self; [];
410 buildInputs = with self; [];
424 doCheck = false;
411 doCheck = false;
425 propagatedBuildInputs = with self; [];
412 propagatedBuildInputs = with self; [];
426 src = fetchurl {
413 src = fetchurl {
427 url = "https://pypi.python.org/packages/ec/9c/368086faa9c016efce5da3e0e13ba392c9db79e3ab740b763fe28620b18b/backports.shutil_get_terminal_size-1.0.0.tar.gz";
414 url = "https://pypi.python.org/packages/ec/9c/368086faa9c016efce5da3e0e13ba392c9db79e3ab740b763fe28620b18b/backports.shutil_get_terminal_size-1.0.0.tar.gz";
428 md5 = "03267762480bd86b50580dc19dff3c66";
415 md5 = "03267762480bd86b50580dc19dff3c66";
429 };
416 };
430 meta = {
417 meta = {
431 license = [ pkgs.lib.licenses.mit ];
418 license = [ pkgs.lib.licenses.mit ];
432 };
419 };
433 };
420 };
421 beautifulsoup4 = super.buildPythonPackage {
422 name = "beautifulsoup4-4.6.0";
423 buildInputs = with self; [];
424 doCheck = false;
425 propagatedBuildInputs = with self; [];
426 src = fetchurl {
427 url = "https://pypi.python.org/packages/fa/8d/1d14391fdaed5abada4e0f63543fef49b8331a34ca60c88bd521bcf7f782/beautifulsoup4-4.6.0.tar.gz";
428 md5 = "c17714d0f91a23b708a592cb3c697728";
429 };
430 meta = {
431 license = [ pkgs.lib.licenses.mit ];
432 };
433 };
434 bleach = super.buildPythonPackage {
434 bleach = super.buildPythonPackage {
435 name = "bleach-1.5.0";
435 name = "bleach-1.5.0";
436 buildInputs = with self; [];
436 buildInputs = with self; [];
437 doCheck = false;
437 doCheck = false;
438 propagatedBuildInputs = with self; [six html5lib];
438 propagatedBuildInputs = with self; [six html5lib];
439 src = fetchurl {
439 src = fetchurl {
440 url = "https://pypi.python.org/packages/99/00/25a8fce4de102bf6e3cc76bc4ea60685b2fee33bde1b34830c70cacc26a7/bleach-1.5.0.tar.gz";
440 url = "https://pypi.python.org/packages/99/00/25a8fce4de102bf6e3cc76bc4ea60685b2fee33bde1b34830c70cacc26a7/bleach-1.5.0.tar.gz";
441 md5 = "b663300efdf421b3b727b19d7be9c7e7";
441 md5 = "b663300efdf421b3b727b19d7be9c7e7";
442 };
442 };
443 meta = {
443 meta = {
444 license = [ pkgs.lib.licenses.asl20 ];
444 license = [ pkgs.lib.licenses.asl20 ];
445 };
445 };
446 };
446 };
447 bottle = super.buildPythonPackage {
447 bottle = super.buildPythonPackage {
448 name = "bottle-0.12.8";
448 name = "bottle-0.12.8";
449 buildInputs = with self; [];
449 buildInputs = with self; [];
450 doCheck = false;
450 doCheck = false;
451 propagatedBuildInputs = with self; [];
451 propagatedBuildInputs = with self; [];
452 src = fetchurl {
452 src = fetchurl {
453 url = "https://pypi.python.org/packages/52/df/e4a408f3a7af396d186d4ecd3b389dd764f0f943b4fa8d257bfe7b49d343/bottle-0.12.8.tar.gz";
453 url = "https://pypi.python.org/packages/52/df/e4a408f3a7af396d186d4ecd3b389dd764f0f943b4fa8d257bfe7b49d343/bottle-0.12.8.tar.gz";
454 md5 = "13132c0a8f607bf860810a6ee9064c5b";
454 md5 = "13132c0a8f607bf860810a6ee9064c5b";
455 };
455 };
456 meta = {
456 meta = {
457 license = [ pkgs.lib.licenses.mit ];
457 license = [ pkgs.lib.licenses.mit ];
458 };
458 };
459 };
459 };
460 bumpversion = super.buildPythonPackage {
460 bumpversion = super.buildPythonPackage {
461 name = "bumpversion-0.5.3";
461 name = "bumpversion-0.5.3";
462 buildInputs = with self; [];
462 buildInputs = with self; [];
463 doCheck = false;
463 doCheck = false;
464 propagatedBuildInputs = with self; [];
464 propagatedBuildInputs = with self; [];
465 src = fetchurl {
465 src = fetchurl {
466 url = "https://pypi.python.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
466 url = "https://pypi.python.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
467 md5 = "c66a3492eafcf5ad4b024be9fca29820";
467 md5 = "c66a3492eafcf5ad4b024be9fca29820";
468 };
468 };
469 meta = {
469 meta = {
470 license = [ pkgs.lib.licenses.mit ];
470 license = [ pkgs.lib.licenses.mit ];
471 };
471 };
472 };
472 };
473 celery = super.buildPythonPackage {
473 celery = super.buildPythonPackage {
474 name = "celery-2.2.10";
474 name = "celery-2.2.10";
475 buildInputs = with self; [];
475 buildInputs = with self; [];
476 doCheck = false;
476 doCheck = false;
477 propagatedBuildInputs = with self; [python-dateutil anyjson kombu pyparsing];
477 propagatedBuildInputs = with self; [python-dateutil anyjson kombu pyparsing];
478 src = fetchurl {
478 src = fetchurl {
479 url = "https://pypi.python.org/packages/b1/64/860fd50e45844c83442e7953effcddeff66b2851d90b2d784f7201c111b8/celery-2.2.10.tar.gz";
479 url = "https://pypi.python.org/packages/b1/64/860fd50e45844c83442e7953effcddeff66b2851d90b2d784f7201c111b8/celery-2.2.10.tar.gz";
480 md5 = "898bc87e54f278055b561316ba73e222";
480 md5 = "898bc87e54f278055b561316ba73e222";
481 };
481 };
482 meta = {
482 meta = {
483 license = [ pkgs.lib.licenses.bsdOriginal ];
483 license = [ pkgs.lib.licenses.bsdOriginal ];
484 };
484 };
485 };
485 };
486 channelstream = super.buildPythonPackage {
486 channelstream = super.buildPythonPackage {
487 name = "channelstream-0.5.2";
487 name = "channelstream-0.5.2";
488 buildInputs = with self; [];
488 buildInputs = with self; [];
489 doCheck = false;
489 doCheck = false;
490 propagatedBuildInputs = with self; [gevent ws4py pyramid pyramid-jinja2 itsdangerous requests six];
490 propagatedBuildInputs = with self; [gevent ws4py pyramid pyramid-jinja2 itsdangerous requests six];
491 src = fetchurl {
491 src = fetchurl {
492 url = "https://pypi.python.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
492 url = "https://pypi.python.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
493 md5 = "1c5eb2a8a405be6f1073da94da6d81d3";
493 md5 = "1c5eb2a8a405be6f1073da94da6d81d3";
494 };
494 };
495 meta = {
495 meta = {
496 license = [ pkgs.lib.licenses.bsdOriginal ];
496 license = [ pkgs.lib.licenses.bsdOriginal ];
497 };
497 };
498 };
498 };
499 click = super.buildPythonPackage {
499 click = super.buildPythonPackage {
500 name = "click-5.1";
500 name = "click-5.1";
501 buildInputs = with self; [];
501 buildInputs = with self; [];
502 doCheck = false;
502 doCheck = false;
503 propagatedBuildInputs = with self; [];
503 propagatedBuildInputs = with self; [];
504 src = fetchurl {
504 src = fetchurl {
505 url = "https://pypi.python.org/packages/b7/34/a496632c4fb6c1ee76efedf77bb8d28b29363d839953d95095b12defe791/click-5.1.tar.gz";
505 url = "https://pypi.python.org/packages/b7/34/a496632c4fb6c1ee76efedf77bb8d28b29363d839953d95095b12defe791/click-5.1.tar.gz";
506 md5 = "9c5323008cccfe232a8b161fc8196d41";
506 md5 = "9c5323008cccfe232a8b161fc8196d41";
507 };
507 };
508 meta = {
508 meta = {
509 license = [ pkgs.lib.licenses.bsdOriginal ];
509 license = [ pkgs.lib.licenses.bsdOriginal ];
510 };
510 };
511 };
511 };
512 colander = super.buildPythonPackage {
512 colander = super.buildPythonPackage {
513 name = "colander-1.2";
513 name = "colander-1.3.3";
514 buildInputs = with self; [];
514 buildInputs = with self; [];
515 doCheck = false;
515 doCheck = false;
516 propagatedBuildInputs = with self; [translationstring iso8601];
516 propagatedBuildInputs = with self; [translationstring iso8601];
517 src = fetchurl {
517 src = fetchurl {
518 url = "https://pypi.python.org/packages/14/23/c9ceba07a6a1dc0eefbb215fc0dc64aabc2b22ee756bc0f0c13278fa0887/colander-1.2.tar.gz";
518 url = "https://pypi.python.org/packages/54/a9/9862a561e015b2c7b56404c0b13828a8bdc51e05ab3703bd792cec064487/colander-1.3.3.tar.gz";
519 md5 = "83db21b07936a0726e588dae1914b9ed";
519 md5 = "f5d783768c51d73695f49bbe95778ab4";
520 };
520 };
521 meta = {
521 meta = {
522 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
522 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
523 };
523 };
524 };
524 };
525 configobj = super.buildPythonPackage {
525 configobj = super.buildPythonPackage {
526 name = "configobj-5.0.6";
526 name = "configobj-5.0.6";
527 buildInputs = with self; [];
527 buildInputs = with self; [];
528 doCheck = false;
528 doCheck = false;
529 propagatedBuildInputs = with self; [six];
529 propagatedBuildInputs = with self; [six];
530 src = fetchurl {
530 src = fetchurl {
531 url = "https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz";
531 url = "https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz";
532 md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
532 md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
533 };
533 };
534 meta = {
534 meta = {
535 license = [ pkgs.lib.licenses.bsdOriginal ];
535 license = [ pkgs.lib.licenses.bsdOriginal ];
536 };
536 };
537 };
537 };
538 configparser = super.buildPythonPackage {
538 configparser = super.buildPythonPackage {
539 name = "configparser-3.5.0";
539 name = "configparser-3.5.0";
540 buildInputs = with self; [];
540 buildInputs = with self; [];
541 doCheck = false;
541 doCheck = false;
542 propagatedBuildInputs = with self; [];
542 propagatedBuildInputs = with self; [];
543 src = fetchurl {
543 src = fetchurl {
544 url = "https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/configparser-3.5.0.tar.gz";
544 url = "https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/configparser-3.5.0.tar.gz";
545 md5 = "cfdd915a5b7a6c09917a64a573140538";
545 md5 = "cfdd915a5b7a6c09917a64a573140538";
546 };
546 };
547 meta = {
547 meta = {
548 license = [ pkgs.lib.licenses.mit ];
548 license = [ pkgs.lib.licenses.mit ];
549 };
549 };
550 };
550 };
551 cov-core = super.buildPythonPackage {
551 cov-core = super.buildPythonPackage {
552 name = "cov-core-1.15.0";
552 name = "cov-core-1.15.0";
553 buildInputs = with self; [];
553 buildInputs = with self; [];
554 doCheck = false;
554 doCheck = false;
555 propagatedBuildInputs = with self; [coverage];
555 propagatedBuildInputs = with self; [coverage];
556 src = fetchurl {
556 src = fetchurl {
557 url = "https://pypi.python.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
557 url = "https://pypi.python.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
558 md5 = "f519d4cb4c4e52856afb14af52919fe6";
558 md5 = "f519d4cb4c4e52856afb14af52919fe6";
559 };
559 };
560 meta = {
560 meta = {
561 license = [ pkgs.lib.licenses.mit ];
561 license = [ pkgs.lib.licenses.mit ];
562 };
562 };
563 };
563 };
564 coverage = super.buildPythonPackage {
564 coverage = super.buildPythonPackage {
565 name = "coverage-3.7.1";
565 name = "coverage-3.7.1";
566 buildInputs = with self; [];
566 buildInputs = with self; [];
567 doCheck = false;
567 doCheck = false;
568 propagatedBuildInputs = with self; [];
568 propagatedBuildInputs = with self; [];
569 src = fetchurl {
569 src = fetchurl {
570 url = "https://pypi.python.org/packages/09/4f/89b06c7fdc09687bca507dc411c342556ef9c5a3b26756137a4878ff19bf/coverage-3.7.1.tar.gz";
570 url = "https://pypi.python.org/packages/09/4f/89b06c7fdc09687bca507dc411c342556ef9c5a3b26756137a4878ff19bf/coverage-3.7.1.tar.gz";
571 md5 = "c47b36ceb17eaff3ecfab3bcd347d0df";
571 md5 = "c47b36ceb17eaff3ecfab3bcd347d0df";
572 };
572 };
573 meta = {
573 meta = {
574 license = [ pkgs.lib.licenses.bsdOriginal ];
574 license = [ pkgs.lib.licenses.bsdOriginal ];
575 };
575 };
576 };
576 };
577 cssselect = super.buildPythonPackage {
577 cssselect = super.buildPythonPackage {
578 name = "cssselect-1.0.1";
578 name = "cssselect-1.0.1";
579 buildInputs = with self; [];
579 buildInputs = with self; [];
580 doCheck = false;
580 doCheck = false;
581 propagatedBuildInputs = with self; [];
581 propagatedBuildInputs = with self; [];
582 src = fetchurl {
582 src = fetchurl {
583 url = "https://pypi.python.org/packages/77/ff/9c865275cd19290feba56344eba570e719efb7ca5b34d67ed12b22ebbb0d/cssselect-1.0.1.tar.gz";
583 url = "https://pypi.python.org/packages/77/ff/9c865275cd19290feba56344eba570e719efb7ca5b34d67ed12b22ebbb0d/cssselect-1.0.1.tar.gz";
584 md5 = "3fa03bf82a9f0b1223c0f1eb1369e139";
584 md5 = "3fa03bf82a9f0b1223c0f1eb1369e139";
585 };
585 };
586 meta = {
586 meta = {
587 license = [ pkgs.lib.licenses.bsdOriginal ];
587 license = [ pkgs.lib.licenses.bsdOriginal ];
588 };
588 };
589 };
589 };
590 decorator = super.buildPythonPackage {
590 decorator = super.buildPythonPackage {
591 name = "decorator-4.0.11";
591 name = "decorator-4.0.11";
592 buildInputs = with self; [];
592 buildInputs = with self; [];
593 doCheck = false;
593 doCheck = false;
594 propagatedBuildInputs = with self; [];
594 propagatedBuildInputs = with self; [];
595 src = fetchurl {
595 src = fetchurl {
596 url = "https://pypi.python.org/packages/cc/ac/5a16f1fc0506ff72fcc8fd4e858e3a1c231f224ab79bb7c4c9b2094cc570/decorator-4.0.11.tar.gz";
596 url = "https://pypi.python.org/packages/cc/ac/5a16f1fc0506ff72fcc8fd4e858e3a1c231f224ab79bb7c4c9b2094cc570/decorator-4.0.11.tar.gz";
597 md5 = "73644c8f0bd4983d1b6a34b49adec0ae";
597 md5 = "73644c8f0bd4983d1b6a34b49adec0ae";
598 };
598 };
599 meta = {
599 meta = {
600 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "new BSD License"; } ];
600 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "new BSD License"; } ];
601 };
601 };
602 };
602 };
603 deform = super.buildPythonPackage {
603 deform = super.buildPythonPackage {
604 name = "deform-2.0.4";
604 name = "deform-2.0.4";
605 buildInputs = with self; [];
605 buildInputs = with self; [];
606 doCheck = false;
606 doCheck = false;
607 propagatedBuildInputs = with self; [Chameleon colander iso8601 peppercorn translationstring zope.deprecation];
607 propagatedBuildInputs = with self; [Chameleon colander iso8601 peppercorn translationstring zope.deprecation];
608 src = fetchurl {
608 src = fetchurl {
609 url = "https://pypi.python.org/packages/66/3b/eefcb07abcab7a97f6665aa2d0cf1af741d9d6e78a2e4657fd2b89f89880/deform-2.0.4.tar.gz";
609 url = "https://pypi.python.org/packages/66/3b/eefcb07abcab7a97f6665aa2d0cf1af741d9d6e78a2e4657fd2b89f89880/deform-2.0.4.tar.gz";
610 md5 = "34756e42cf50dd4b4430809116c4ec0a";
610 md5 = "34756e42cf50dd4b4430809116c4ec0a";
611 };
611 };
612 meta = {
612 meta = {
613 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
613 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
614 };
614 };
615 };
615 };
616 docutils = super.buildPythonPackage {
616 docutils = super.buildPythonPackage {
617 name = "docutils-0.12";
617 name = "docutils-0.13.1";
618 buildInputs = with self; [];
618 buildInputs = with self; [];
619 doCheck = false;
619 doCheck = false;
620 propagatedBuildInputs = with self; [];
620 propagatedBuildInputs = with self; [];
621 src = fetchurl {
621 src = fetchurl {
622 url = "https://pypi.python.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz";
622 url = "https://pypi.python.org/packages/05/25/7b5484aca5d46915493f1fd4ecb63c38c333bd32aa9ad6e19da8d08895ae/docutils-0.13.1.tar.gz";
623 md5 = "4622263b62c5c771c03502afa3157768";
623 md5 = "ea4a893c633c788be9b8078b6b305d53";
624 };
624 };
625 meta = {
625 meta = {
626 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 ];
626 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 ];
627 };
627 };
628 };
628 };
629 dogpile.cache = super.buildPythonPackage {
629 dogpile.cache = super.buildPythonPackage {
630 name = "dogpile.cache-0.6.1";
630 name = "dogpile.cache-0.6.4";
631 buildInputs = with self; [];
631 buildInputs = with self; [];
632 doCheck = false;
632 doCheck = false;
633 propagatedBuildInputs = with self; [];
633 propagatedBuildInputs = with self; [];
634 src = fetchurl {
634 src = fetchurl {
635 url = "https://pypi.python.org/packages/f6/a0/6f2142c58c6588d17c734265b103ae1cd0741e1681dd9483a63f22033375/dogpile.cache-0.6.1.tar.gz";
635 url = "https://pypi.python.org/packages/b6/3d/35c05ca01c070bb70d9d422f2c4858ecb021b05b21af438fec5ccd7b945c/dogpile.cache-0.6.4.tar.gz";
636 md5 = "35d7fb30f22bbd0685763d894dd079a9";
636 md5 = "66e0a6cae6c08cb1ea25f89d0eadfeb0";
637 };
637 };
638 meta = {
638 meta = {
639 license = [ pkgs.lib.licenses.bsdOriginal ];
639 license = [ pkgs.lib.licenses.bsdOriginal ];
640 };
640 };
641 };
641 };
642 dogpile.core = super.buildPythonPackage {
642 dogpile.core = super.buildPythonPackage {
643 name = "dogpile.core-0.4.1";
643 name = "dogpile.core-0.4.1";
644 buildInputs = with self; [];
644 buildInputs = with self; [];
645 doCheck = false;
645 doCheck = false;
646 propagatedBuildInputs = with self; [];
646 propagatedBuildInputs = with self; [];
647 src = fetchurl {
647 src = fetchurl {
648 url = "https://pypi.python.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
648 url = "https://pypi.python.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
649 md5 = "01cb19f52bba3e95c9b560f39341f045";
649 md5 = "01cb19f52bba3e95c9b560f39341f045";
650 };
650 };
651 meta = {
651 meta = {
652 license = [ pkgs.lib.licenses.bsdOriginal ];
652 license = [ pkgs.lib.licenses.bsdOriginal ];
653 };
653 };
654 };
654 };
655 ecdsa = super.buildPythonPackage {
655 ecdsa = super.buildPythonPackage {
656 name = "ecdsa-0.11";
656 name = "ecdsa-0.13";
657 buildInputs = with self; [];
657 buildInputs = with self; [];
658 doCheck = false;
658 doCheck = false;
659 propagatedBuildInputs = with self; [];
659 propagatedBuildInputs = with self; [];
660 src = fetchurl {
660 src = fetchurl {
661 url = "https://pypi.python.org/packages/6c/3f/92fe5dcdcaa7bd117be21e5520c9a54375112b66ec000d209e9e9519fad1/ecdsa-0.11.tar.gz";
661 url = "https://pypi.python.org/packages/f9/e5/99ebb176e47f150ac115ffeda5fedb6a3dbb3c00c74a59fd84ddf12f5857/ecdsa-0.13.tar.gz";
662 md5 = "8ef586fe4dbb156697d756900cb41d7c";
662 md5 = "1f60eda9cb5c46722856db41a3ae6670";
663 };
663 };
664 meta = {
664 meta = {
665 license = [ pkgs.lib.licenses.mit ];
665 license = [ pkgs.lib.licenses.mit ];
666 };
666 };
667 };
667 };
668 elasticsearch = super.buildPythonPackage {
668 elasticsearch = super.buildPythonPackage {
669 name = "elasticsearch-2.3.0";
669 name = "elasticsearch-2.3.0";
670 buildInputs = with self; [];
670 buildInputs = with self; [];
671 doCheck = false;
671 doCheck = false;
672 propagatedBuildInputs = with self; [urllib3];
672 propagatedBuildInputs = with self; [urllib3];
673 src = fetchurl {
673 src = fetchurl {
674 url = "https://pypi.python.org/packages/10/35/5fd52c5f0b0ee405ed4b5195e8bce44c5e041787680dc7b94b8071cac600/elasticsearch-2.3.0.tar.gz";
674 url = "https://pypi.python.org/packages/10/35/5fd52c5f0b0ee405ed4b5195e8bce44c5e041787680dc7b94b8071cac600/elasticsearch-2.3.0.tar.gz";
675 md5 = "2550f3b51629cf1ef9636608af92c340";
675 md5 = "2550f3b51629cf1ef9636608af92c340";
676 };
676 };
677 meta = {
677 meta = {
678 license = [ pkgs.lib.licenses.asl20 ];
678 license = [ pkgs.lib.licenses.asl20 ];
679 };
679 };
680 };
680 };
681 elasticsearch-dsl = super.buildPythonPackage {
681 elasticsearch-dsl = super.buildPythonPackage {
682 name = "elasticsearch-dsl-2.2.0";
682 name = "elasticsearch-dsl-2.2.0";
683 buildInputs = with self; [];
683 buildInputs = with self; [];
684 doCheck = false;
684 doCheck = false;
685 propagatedBuildInputs = with self; [six python-dateutil elasticsearch];
685 propagatedBuildInputs = with self; [six python-dateutil elasticsearch];
686 src = fetchurl {
686 src = fetchurl {
687 url = "https://pypi.python.org/packages/66/2f/52a086968788e58461641570f45c3207a52d46ebbe9b77dc22b6a8ffda66/elasticsearch-dsl-2.2.0.tar.gz";
687 url = "https://pypi.python.org/packages/66/2f/52a086968788e58461641570f45c3207a52d46ebbe9b77dc22b6a8ffda66/elasticsearch-dsl-2.2.0.tar.gz";
688 md5 = "fa6bd3c87ea3caa8f0f051bc37c53221";
688 md5 = "fa6bd3c87ea3caa8f0f051bc37c53221";
689 };
689 };
690 meta = {
690 meta = {
691 license = [ pkgs.lib.licenses.asl20 ];
691 license = [ pkgs.lib.licenses.asl20 ];
692 };
692 };
693 };
693 };
694 entrypoints = super.buildPythonPackage {
694 entrypoints = super.buildPythonPackage {
695 name = "entrypoints-0.2.2";
695 name = "entrypoints-0.2.2";
696 buildInputs = with self; [];
696 buildInputs = with self; [];
697 doCheck = false;
697 doCheck = false;
698 propagatedBuildInputs = with self; [configparser];
698 propagatedBuildInputs = with self; [configparser];
699 src = fetchurl {
699 src = fetchurl {
700 url = "https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313";
700 url = "https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313";
701 md5 = "7db37771aea9ac9fefe093e5d6987313";
701 md5 = "7db37771aea9ac9fefe093e5d6987313";
702 };
702 };
703 meta = {
703 meta = {
704 license = [ pkgs.lib.licenses.mit ];
704 license = [ pkgs.lib.licenses.mit ];
705 };
705 };
706 };
706 };
707 enum34 = super.buildPythonPackage {
707 enum34 = super.buildPythonPackage {
708 name = "enum34-1.1.6";
708 name = "enum34-1.1.6";
709 buildInputs = with self; [];
709 buildInputs = with self; [];
710 doCheck = false;
710 doCheck = false;
711 propagatedBuildInputs = with self; [];
711 propagatedBuildInputs = with self; [];
712 src = fetchurl {
712 src = fetchurl {
713 url = "https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz";
713 url = "https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz";
714 md5 = "5f13a0841a61f7fc295c514490d120d0";
714 md5 = "5f13a0841a61f7fc295c514490d120d0";
715 };
715 };
716 meta = {
716 meta = {
717 license = [ pkgs.lib.licenses.bsdOriginal ];
717 license = [ pkgs.lib.licenses.bsdOriginal ];
718 };
718 };
719 };
719 };
720 funcsigs = super.buildPythonPackage {
721 name = "funcsigs-1.0.2";
722 buildInputs = with self; [];
723 doCheck = false;
724 propagatedBuildInputs = with self; [];
725 src = fetchurl {
726 url = "https://pypi.python.org/packages/94/4a/db842e7a0545de1cdb0439bb80e6e42dfe82aaeaadd4072f2263a4fbed23/funcsigs-1.0.2.tar.gz";
727 md5 = "7e583285b1fb8a76305d6d68f4ccc14e";
728 };
729 meta = {
730 license = [ { fullName = "ASL"; } pkgs.lib.licenses.asl20 ];
731 };
732 };
720 functools32 = super.buildPythonPackage {
733 functools32 = super.buildPythonPackage {
721 name = "functools32-3.2.3.post2";
734 name = "functools32-3.2.3.post2";
722 buildInputs = with self; [];
735 buildInputs = with self; [];
723 doCheck = false;
736 doCheck = false;
724 propagatedBuildInputs = with self; [];
737 propagatedBuildInputs = with self; [];
725 src = fetchurl {
738 src = fetchurl {
726 url = "https://pypi.python.org/packages/5e/1a/0aa2c8195a204a9f51284018562dea77e25511f02fe924fac202fc012172/functools32-3.2.3-2.zip";
739 url = "https://pypi.python.org/packages/5e/1a/0aa2c8195a204a9f51284018562dea77e25511f02fe924fac202fc012172/functools32-3.2.3-2.zip";
727 md5 = "d55232eb132ec779e6893c902a0bc5ad";
740 md5 = "d55232eb132ec779e6893c902a0bc5ad";
728 };
741 };
729 meta = {
742 meta = {
730 license = [ pkgs.lib.licenses.psfl ];
743 license = [ pkgs.lib.licenses.psfl ];
731 };
744 };
732 };
745 };
733 future = super.buildPythonPackage {
746 future = super.buildPythonPackage {
734 name = "future-0.14.3";
747 name = "future-0.14.3";
735 buildInputs = with self; [];
748 buildInputs = with self; [];
736 doCheck = false;
749 doCheck = false;
737 propagatedBuildInputs = with self; [];
750 propagatedBuildInputs = with self; [];
738 src = fetchurl {
751 src = fetchurl {
739 url = "https://pypi.python.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
752 url = "https://pypi.python.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
740 md5 = "e94079b0bd1fc054929e8769fc0f6083";
753 md5 = "e94079b0bd1fc054929e8769fc0f6083";
741 };
754 };
742 meta = {
755 meta = {
743 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
756 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
744 };
757 };
745 };
758 };
746 futures = super.buildPythonPackage {
759 futures = super.buildPythonPackage {
747 name = "futures-3.0.2";
760 name = "futures-3.0.2";
748 buildInputs = with self; [];
761 buildInputs = with self; [];
749 doCheck = false;
762 doCheck = false;
750 propagatedBuildInputs = with self; [];
763 propagatedBuildInputs = with self; [];
751 src = fetchurl {
764 src = fetchurl {
752 url = "https://pypi.python.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
765 url = "https://pypi.python.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
753 md5 = "42aaf1e4de48d6e871d77dc1f9d96d5a";
766 md5 = "42aaf1e4de48d6e871d77dc1f9d96d5a";
754 };
767 };
755 meta = {
768 meta = {
756 license = [ pkgs.lib.licenses.bsdOriginal ];
769 license = [ pkgs.lib.licenses.bsdOriginal ];
757 };
770 };
758 };
771 };
759 gevent = super.buildPythonPackage {
772 gevent = super.buildPythonPackage {
760 name = "gevent-1.1.2";
773 name = "gevent-1.2.2";
761 buildInputs = with self; [];
774 buildInputs = with self; [];
762 doCheck = false;
775 doCheck = false;
763 propagatedBuildInputs = with self; [greenlet];
776 propagatedBuildInputs = with self; [greenlet];
764 src = fetchurl {
777 src = fetchurl {
765 url = "https://pypi.python.org/packages/43/8f/cb3224a0e6ab663547f45c10d0651cfd52633fde4283bf68d627084df8cc/gevent-1.1.2.tar.gz";
778 url = "https://pypi.python.org/packages/1b/92/b111f76e54d2be11375b47b213b56687214f258fd9dae703546d30b837be/gevent-1.2.2.tar.gz";
766 md5 = "bb32a2f852a4997138014d5007215c6e";
779 md5 = "7f0baf355384fe5ff2ecf66853422554";
767 };
780 };
768 meta = {
781 meta = {
769 license = [ pkgs.lib.licenses.mit ];
782 license = [ pkgs.lib.licenses.mit ];
770 };
783 };
771 };
784 };
772 gnureadline = super.buildPythonPackage {
785 gnureadline = super.buildPythonPackage {
773 name = "gnureadline-6.3.3";
786 name = "gnureadline-6.3.3";
774 buildInputs = with self; [];
787 buildInputs = with self; [];
775 doCheck = false;
788 doCheck = false;
776 propagatedBuildInputs = with self; [];
789 propagatedBuildInputs = with self; [];
777 src = fetchurl {
790 src = fetchurl {
778 url = "https://pypi.python.org/packages/3a/ee/2c3f568b0a74974791ac590ec742ef6133e2fbd287a074ba72a53fa5e97c/gnureadline-6.3.3.tar.gz";
791 url = "https://pypi.python.org/packages/3a/ee/2c3f568b0a74974791ac590ec742ef6133e2fbd287a074ba72a53fa5e97c/gnureadline-6.3.3.tar.gz";
779 md5 = "c4af83c9a3fbeac8f2da9b5a7c60e51c";
792 md5 = "c4af83c9a3fbeac8f2da9b5a7c60e51c";
780 };
793 };
781 meta = {
794 meta = {
782 license = [ pkgs.lib.licenses.gpl1 ];
795 license = [ pkgs.lib.licenses.gpl1 ];
783 };
796 };
784 };
797 };
785 gprof2dot = super.buildPythonPackage {
798 gprof2dot = super.buildPythonPackage {
786 name = "gprof2dot-2016.10.13";
799 name = "gprof2dot-2016.10.13";
787 buildInputs = with self; [];
800 buildInputs = with self; [];
788 doCheck = false;
801 doCheck = false;
789 propagatedBuildInputs = with self; [];
802 propagatedBuildInputs = with self; [];
790 src = fetchurl {
803 src = fetchurl {
791 url = "https://pypi.python.org/packages/a0/e0/73c71baed306f0402a00a94ffc7b2be94ad1296dfcb8b46912655b93154c/gprof2dot-2016.10.13.tar.gz";
804 url = "https://pypi.python.org/packages/a0/e0/73c71baed306f0402a00a94ffc7b2be94ad1296dfcb8b46912655b93154c/gprof2dot-2016.10.13.tar.gz";
792 md5 = "0125401f15fd2afe1df686a76c64a4fd";
805 md5 = "0125401f15fd2afe1df686a76c64a4fd";
793 };
806 };
794 meta = {
807 meta = {
795 license = [ { fullName = "LGPL"; } ];
808 license = [ { fullName = "LGPL"; } ];
796 };
809 };
797 };
810 };
798 graphviz = super.buildPythonPackage {
811 graphviz = super.buildPythonPackage {
799 name = "graphviz-0.7.1";
812 name = "graphviz-0.8";
800 buildInputs = with self; [];
813 buildInputs = with self; [];
801 doCheck = false;
814 doCheck = false;
802 propagatedBuildInputs = with self; [];
815 propagatedBuildInputs = with self; [];
803 src = fetchurl {
816 src = fetchurl {
804 url = "https://pypi.python.org/packages/7d/2d/f5cfa56467ca5a65eb44e1103d89d2f65dbc4f04cf7a1f3d38e973c3d1a8/graphviz-0.7.1.zip";
817 url = "https://pypi.python.org/packages/da/84/0e997520323d6b01124eb01c68d5c101814d0aab53083cd62bd75a90f70b/graphviz-0.8.zip";
805 md5 = "d5926e89975121d56dec777a79bfc9d1";
818 md5 = "9486a885360a5ee54a81eb2950470c71";
806 };
819 };
807 meta = {
820 meta = {
808 license = [ pkgs.lib.licenses.mit ];
821 license = [ pkgs.lib.licenses.mit ];
809 };
822 };
810 };
823 };
811 greenlet = super.buildPythonPackage {
824 greenlet = super.buildPythonPackage {
812 name = "greenlet-0.4.10";
825 name = "greenlet-0.4.12";
813 buildInputs = with self; [];
826 buildInputs = with self; [];
814 doCheck = false;
827 doCheck = false;
815 propagatedBuildInputs = with self; [];
828 propagatedBuildInputs = with self; [];
816 src = fetchurl {
829 src = fetchurl {
817 url = "https://pypi.python.org/packages/67/62/ca2a95648666eaa2ffeb6a9b3964f21d419ae27f82f2e66b53da5b943fc4/greenlet-0.4.10.zip";
830 url = "https://pypi.python.org/packages/be/76/82af375d98724054b7e273b5d9369346937324f9bcc20980b45b068ef0b0/greenlet-0.4.12.tar.gz";
818 md5 = "bed0c4b3b896702131f4d5c72f87c41d";
831 md5 = "e8637647d58a26c4a1f51ca393e53c00";
819 };
832 };
820 meta = {
833 meta = {
821 license = [ pkgs.lib.licenses.mit ];
834 license = [ pkgs.lib.licenses.mit ];
822 };
835 };
823 };
836 };
824 gunicorn = super.buildPythonPackage {
837 gunicorn = super.buildPythonPackage {
825 name = "gunicorn-19.6.0";
838 name = "gunicorn-19.7.1";
826 buildInputs = with self; [];
839 buildInputs = with self; [];
827 doCheck = false;
840 doCheck = false;
828 propagatedBuildInputs = with self; [];
841 propagatedBuildInputs = with self; [];
829 src = fetchurl {
842 src = fetchurl {
830 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
843 url = "https://pypi.python.org/packages/30/3a/10bb213cede0cc4d13ac2263316c872a64bf4c819000c8ccd801f1d5f822/gunicorn-19.7.1.tar.gz";
831 md5 = "338e5e8a83ea0f0625f768dba4597530";
844 md5 = "174d3c3cd670a5be0404d84c484e590c";
832 };
845 };
833 meta = {
846 meta = {
834 license = [ pkgs.lib.licenses.mit ];
847 license = [ pkgs.lib.licenses.mit ];
835 };
848 };
836 };
849 };
837 html5lib = super.buildPythonPackage {
850 html5lib = super.buildPythonPackage {
838 name = "html5lib-0.9999999";
851 name = "html5lib-0.9999999";
839 buildInputs = with self; [];
852 buildInputs = with self; [];
840 doCheck = false;
853 doCheck = false;
841 propagatedBuildInputs = with self; [six];
854 propagatedBuildInputs = with self; [six];
842 src = fetchurl {
855 src = fetchurl {
843 url = "https://pypi.python.org/packages/ae/ae/bcb60402c60932b32dfaf19bb53870b29eda2cd17551ba5639219fb5ebf9/html5lib-0.9999999.tar.gz";
856 url = "https://pypi.python.org/packages/ae/ae/bcb60402c60932b32dfaf19bb53870b29eda2cd17551ba5639219fb5ebf9/html5lib-0.9999999.tar.gz";
844 md5 = "ef43cb05e9e799f25d65d1135838a96f";
857 md5 = "ef43cb05e9e799f25d65d1135838a96f";
845 };
858 };
846 meta = {
859 meta = {
847 license = [ pkgs.lib.licenses.mit ];
860 license = [ pkgs.lib.licenses.mit ];
848 };
861 };
849 };
862 };
863 hupper = super.buildPythonPackage {
864 name = "hupper-1.0";
865 buildInputs = with self; [];
866 doCheck = false;
867 propagatedBuildInputs = with self; [];
868 src = fetchurl {
869 url = "https://pypi.python.org/packages/2e/07/df892c564dc09bb3cf6f6deb976c26adf9117db75ba218cb4353dbc9d826/hupper-1.0.tar.gz";
870 md5 = "26e77da7d5ac5858f59af050d1a6eb5a";
871 };
872 meta = {
873 license = [ pkgs.lib.licenses.mit ];
874 };
875 };
850 infrae.cache = super.buildPythonPackage {
876 infrae.cache = super.buildPythonPackage {
851 name = "infrae.cache-1.0.1";
877 name = "infrae.cache-1.0.1";
852 buildInputs = with self; [];
878 buildInputs = with self; [];
853 doCheck = false;
879 doCheck = false;
854 propagatedBuildInputs = with self; [Beaker repoze.lru];
880 propagatedBuildInputs = with self; [Beaker repoze.lru];
855 src = fetchurl {
881 src = fetchurl {
856 url = "https://pypi.python.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
882 url = "https://pypi.python.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
857 md5 = "b09076a766747e6ed2a755cc62088e32";
883 md5 = "b09076a766747e6ed2a755cc62088e32";
858 };
884 };
859 meta = {
885 meta = {
860 license = [ pkgs.lib.licenses.zpt21 ];
886 license = [ pkgs.lib.licenses.zpt21 ];
861 };
887 };
862 };
888 };
863 invoke = super.buildPythonPackage {
889 invoke = super.buildPythonPackage {
864 name = "invoke-0.13.0";
890 name = "invoke-0.13.0";
865 buildInputs = with self; [];
891 buildInputs = with self; [];
866 doCheck = false;
892 doCheck = false;
867 propagatedBuildInputs = with self; [];
893 propagatedBuildInputs = with self; [];
868 src = fetchurl {
894 src = fetchurl {
869 url = "https://pypi.python.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
895 url = "https://pypi.python.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
870 md5 = "c0d1ed4bfb34eaab551662d8cfee6540";
896 md5 = "c0d1ed4bfb34eaab551662d8cfee6540";
871 };
897 };
872 meta = {
898 meta = {
873 license = [ pkgs.lib.licenses.bsdOriginal ];
899 license = [ pkgs.lib.licenses.bsdOriginal ];
874 };
900 };
875 };
901 };
876 ipdb = super.buildPythonPackage {
902 ipaddress = super.buildPythonPackage {
877 name = "ipdb-0.10.1";
903 name = "ipaddress-1.0.18";
878 buildInputs = with self; [];
904 buildInputs = with self; [];
879 doCheck = false;
905 doCheck = false;
880 propagatedBuildInputs = with self; [ipython setuptools];
906 propagatedBuildInputs = with self; [];
881 src = fetchurl {
907 src = fetchurl {
882 url = "https://pypi.python.org/packages/eb/0a/0a37dc19572580336ad3813792c0d18c8d7117c2d66fc63c501f13a7a8f8/ipdb-0.10.1.tar.gz";
908 url = "https://pypi.python.org/packages/4e/13/774faf38b445d0b3a844b65747175b2e0500164b7c28d78e34987a5bfe06/ipaddress-1.0.18.tar.gz";
883 md5 = "4aeab65f633ddc98ebdb5eebf08dc713";
909 md5 = "310c2dfd64eb6f0df44aa8c59f2334a7";
910 };
911 meta = {
912 license = [ pkgs.lib.licenses.psfl ];
913 };
914 };
915 ipdb = super.buildPythonPackage {
916 name = "ipdb-0.10.3";
917 buildInputs = with self; [];
918 doCheck = false;
919 propagatedBuildInputs = with self; [setuptools ipython];
920 src = fetchurl {
921 url = "https://pypi.python.org/packages/ad/cc/0e7298e1fbf2efd52667c9354a12aa69fb6f796ce230cca03525051718ef/ipdb-0.10.3.tar.gz";
922 md5 = "def1f6ac075d54bdee07e6501263d4fa";
884 };
923 };
885 meta = {
924 meta = {
886 license = [ pkgs.lib.licenses.bsdOriginal ];
925 license = [ pkgs.lib.licenses.bsdOriginal ];
887 };
926 };
888 };
927 };
889 ipython = super.buildPythonPackage {
928 ipython = super.buildPythonPackage {
890 name = "ipython-5.1.0";
929 name = "ipython-5.1.0";
891 buildInputs = with self; [];
930 buildInputs = with self; [];
892 doCheck = false;
931 doCheck = false;
893 propagatedBuildInputs = with self; [setuptools decorator pickleshare simplegeneric traitlets prompt-toolkit Pygments pexpect backports.shutil-get-terminal-size pathlib2 pexpect];
932 propagatedBuildInputs = with self; [setuptools decorator pickleshare simplegeneric traitlets prompt-toolkit Pygments pexpect backports.shutil-get-terminal-size pathlib2 pexpect];
894 src = fetchurl {
933 src = fetchurl {
895 url = "https://pypi.python.org/packages/89/63/a9292f7cd9d0090a0f995e1167f3f17d5889dcbc9a175261719c513b9848/ipython-5.1.0.tar.gz";
934 url = "https://pypi.python.org/packages/89/63/a9292f7cd9d0090a0f995e1167f3f17d5889dcbc9a175261719c513b9848/ipython-5.1.0.tar.gz";
896 md5 = "47c8122420f65b58784cb4b9b4af35e3";
935 md5 = "47c8122420f65b58784cb4b9b4af35e3";
897 };
936 };
898 meta = {
937 meta = {
899 license = [ pkgs.lib.licenses.bsdOriginal ];
938 license = [ pkgs.lib.licenses.bsdOriginal ];
900 };
939 };
901 };
940 };
902 ipython-genutils = super.buildPythonPackage {
941 ipython-genutils = super.buildPythonPackage {
903 name = "ipython-genutils-0.2.0";
942 name = "ipython-genutils-0.2.0";
904 buildInputs = with self; [];
943 buildInputs = with self; [];
905 doCheck = false;
944 doCheck = false;
906 propagatedBuildInputs = with self; [];
945 propagatedBuildInputs = with self; [];
907 src = fetchurl {
946 src = fetchurl {
908 url = "https://pypi.python.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz";
947 url = "https://pypi.python.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz";
909 md5 = "5a4f9781f78466da0ea1a648f3e1f79f";
948 md5 = "5a4f9781f78466da0ea1a648f3e1f79f";
910 };
949 };
911 meta = {
950 meta = {
912 license = [ pkgs.lib.licenses.bsdOriginal ];
951 license = [ pkgs.lib.licenses.bsdOriginal ];
913 };
952 };
914 };
953 };
915 iso8601 = super.buildPythonPackage {
954 iso8601 = super.buildPythonPackage {
916 name = "iso8601-0.1.11";
955 name = "iso8601-0.1.11";
917 buildInputs = with self; [];
956 buildInputs = with self; [];
918 doCheck = false;
957 doCheck = false;
919 propagatedBuildInputs = with self; [];
958 propagatedBuildInputs = with self; [];
920 src = fetchurl {
959 src = fetchurl {
921 url = "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz";
960 url = "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz";
922 md5 = "b06d11cd14a64096f907086044f0fe38";
961 md5 = "b06d11cd14a64096f907086044f0fe38";
923 };
962 };
924 meta = {
963 meta = {
925 license = [ pkgs.lib.licenses.mit ];
964 license = [ pkgs.lib.licenses.mit ];
926 };
965 };
927 };
966 };
928 itsdangerous = super.buildPythonPackage {
967 itsdangerous = super.buildPythonPackage {
929 name = "itsdangerous-0.24";
968 name = "itsdangerous-0.24";
930 buildInputs = with self; [];
969 buildInputs = with self; [];
931 doCheck = false;
970 doCheck = false;
932 propagatedBuildInputs = with self; [];
971 propagatedBuildInputs = with self; [];
933 src = fetchurl {
972 src = fetchurl {
934 url = "https://pypi.python.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
973 url = "https://pypi.python.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
935 md5 = "a3d55aa79369aef5345c036a8a26307f";
974 md5 = "a3d55aa79369aef5345c036a8a26307f";
936 };
975 };
937 meta = {
976 meta = {
938 license = [ pkgs.lib.licenses.bsdOriginal ];
977 license = [ pkgs.lib.licenses.bsdOriginal ];
939 };
978 };
940 };
979 };
941 jsonschema = super.buildPythonPackage {
980 jsonschema = super.buildPythonPackage {
942 name = "jsonschema-2.6.0";
981 name = "jsonschema-2.6.0";
943 buildInputs = with self; [];
982 buildInputs = with self; [];
944 doCheck = false;
983 doCheck = false;
945 propagatedBuildInputs = with self; [functools32];
984 propagatedBuildInputs = with self; [functools32];
946 src = fetchurl {
985 src = fetchurl {
947 url = "https://pypi.python.org/packages/58/b9/171dbb07e18c6346090a37f03c7e74410a1a56123f847efed59af260a298/jsonschema-2.6.0.tar.gz";
986 url = "https://pypi.python.org/packages/58/b9/171dbb07e18c6346090a37f03c7e74410a1a56123f847efed59af260a298/jsonschema-2.6.0.tar.gz";
948 md5 = "50c6b69a373a8b55ff1e0ec6e78f13f4";
987 md5 = "50c6b69a373a8b55ff1e0ec6e78f13f4";
949 };
988 };
950 meta = {
989 meta = {
951 license = [ pkgs.lib.licenses.mit ];
990 license = [ pkgs.lib.licenses.mit ];
952 };
991 };
953 };
992 };
954 jupyter-client = super.buildPythonPackage {
993 jupyter-client = super.buildPythonPackage {
955 name = "jupyter-client-5.0.0";
994 name = "jupyter-client-5.0.0";
956 buildInputs = with self; [];
995 buildInputs = with self; [];
957 doCheck = false;
996 doCheck = false;
958 propagatedBuildInputs = with self; [traitlets jupyter-core pyzmq python-dateutil];
997 propagatedBuildInputs = with self; [traitlets jupyter-core pyzmq python-dateutil];
959 src = fetchurl {
998 src = fetchurl {
960 url = "https://pypi.python.org/packages/e5/6f/65412ed462202b90134b7e761b0b7e7f949e07a549c1755475333727b3d0/jupyter_client-5.0.0.tar.gz";
999 url = "https://pypi.python.org/packages/e5/6f/65412ed462202b90134b7e761b0b7e7f949e07a549c1755475333727b3d0/jupyter_client-5.0.0.tar.gz";
961 md5 = "1acd331b5c9fb4d79dae9939e79f2426";
1000 md5 = "1acd331b5c9fb4d79dae9939e79f2426";
962 };
1001 };
963 meta = {
1002 meta = {
964 license = [ pkgs.lib.licenses.bsdOriginal ];
1003 license = [ pkgs.lib.licenses.bsdOriginal ];
965 };
1004 };
966 };
1005 };
967 jupyter-core = super.buildPythonPackage {
1006 jupyter-core = super.buildPythonPackage {
968 name = "jupyter-core-4.3.0";
1007 name = "jupyter-core-4.3.0";
969 buildInputs = with self; [];
1008 buildInputs = with self; [];
970 doCheck = false;
1009 doCheck = false;
971 propagatedBuildInputs = with self; [traitlets];
1010 propagatedBuildInputs = with self; [traitlets];
972 src = fetchurl {
1011 src = fetchurl {
973 url = "https://pypi.python.org/packages/2f/39/5138f975100ce14d150938df48a83cd852a3fd8e24b1244f4113848e69e2/jupyter_core-4.3.0.tar.gz";
1012 url = "https://pypi.python.org/packages/2f/39/5138f975100ce14d150938df48a83cd852a3fd8e24b1244f4113848e69e2/jupyter_core-4.3.0.tar.gz";
974 md5 = "18819511a809afdeed9a995a9c27bcfb";
1013 md5 = "18819511a809afdeed9a995a9c27bcfb";
975 };
1014 };
976 meta = {
1015 meta = {
977 license = [ pkgs.lib.licenses.bsdOriginal ];
1016 license = [ pkgs.lib.licenses.bsdOriginal ];
978 };
1017 };
979 };
1018 };
980 kombu = super.buildPythonPackage {
1019 kombu = super.buildPythonPackage {
981 name = "kombu-1.5.1";
1020 name = "kombu-1.5.1";
982 buildInputs = with self; [];
1021 buildInputs = with self; [];
983 doCheck = false;
1022 doCheck = false;
984 propagatedBuildInputs = with self; [anyjson amqplib];
1023 propagatedBuildInputs = with self; [anyjson amqplib];
985 src = fetchurl {
1024 src = fetchurl {
986 url = "https://pypi.python.org/packages/19/53/74bf2a624644b45f0850a638752514fc10a8e1cbd738f10804951a6df3f5/kombu-1.5.1.tar.gz";
1025 url = "https://pypi.python.org/packages/19/53/74bf2a624644b45f0850a638752514fc10a8e1cbd738f10804951a6df3f5/kombu-1.5.1.tar.gz";
987 md5 = "50662f3c7e9395b3d0721fb75d100b63";
1026 md5 = "50662f3c7e9395b3d0721fb75d100b63";
988 };
1027 };
989 meta = {
1028 meta = {
990 license = [ pkgs.lib.licenses.bsdOriginal ];
1029 license = [ pkgs.lib.licenses.bsdOriginal ];
991 };
1030 };
992 };
1031 };
993 lxml = super.buildPythonPackage {
1032 lxml = super.buildPythonPackage {
994 name = "lxml-3.7.3";
1033 name = "lxml-3.7.3";
995 buildInputs = with self; [];
1034 buildInputs = with self; [];
996 doCheck = false;
1035 doCheck = false;
997 propagatedBuildInputs = with self; [];
1036 propagatedBuildInputs = with self; [];
998 src = fetchurl {
1037 src = fetchurl {
999 url = "https://pypi.python.org/packages/39/e8/a8e0b1fa65dd021d48fe21464f71783655f39a41f218293c1c590d54eb82/lxml-3.7.3.tar.gz";
1038 url = "https://pypi.python.org/packages/39/e8/a8e0b1fa65dd021d48fe21464f71783655f39a41f218293c1c590d54eb82/lxml-3.7.3.tar.gz";
1000 md5 = "075692ce442e69bbd604d44e21c02753";
1039 md5 = "075692ce442e69bbd604d44e21c02753";
1001 };
1040 };
1002 meta = {
1041 meta = {
1003 license = [ pkgs.lib.licenses.bsdOriginal ];
1042 license = [ pkgs.lib.licenses.bsdOriginal ];
1004 };
1043 };
1005 };
1044 };
1006 meld3 = super.buildPythonPackage {
1045 meld3 = super.buildPythonPackage {
1007 name = "meld3-1.0.2";
1046 name = "meld3-1.0.2";
1008 buildInputs = with self; [];
1047 buildInputs = with self; [];
1009 doCheck = false;
1048 doCheck = false;
1010 propagatedBuildInputs = with self; [];
1049 propagatedBuildInputs = with self; [];
1011 src = fetchurl {
1050 src = fetchurl {
1012 url = "https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
1051 url = "https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
1013 md5 = "3ccc78cd79cffd63a751ad7684c02c91";
1052 md5 = "3ccc78cd79cffd63a751ad7684c02c91";
1014 };
1053 };
1015 meta = {
1054 meta = {
1016 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1055 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1017 };
1056 };
1018 };
1057 };
1019 mistune = super.buildPythonPackage {
1058 mistune = super.buildPythonPackage {
1020 name = "mistune-0.7.4";
1059 name = "mistune-0.7.4";
1021 buildInputs = with self; [];
1060 buildInputs = with self; [];
1022 doCheck = false;
1061 doCheck = false;
1023 propagatedBuildInputs = with self; [];
1062 propagatedBuildInputs = with self; [];
1024 src = fetchurl {
1063 src = fetchurl {
1025 url = "https://pypi.python.org/packages/25/a4/12a584c0c59c9fed529f8b3c47ca8217c0cf8bcc5e1089d3256410cfbdbc/mistune-0.7.4.tar.gz";
1064 url = "https://pypi.python.org/packages/25/a4/12a584c0c59c9fed529f8b3c47ca8217c0cf8bcc5e1089d3256410cfbdbc/mistune-0.7.4.tar.gz";
1026 md5 = "92d01cb717e9e74429e9bde9d29ac43b";
1065 md5 = "92d01cb717e9e74429e9bde9d29ac43b";
1027 };
1066 };
1028 meta = {
1067 meta = {
1029 license = [ pkgs.lib.licenses.bsdOriginal ];
1068 license = [ pkgs.lib.licenses.bsdOriginal ];
1030 };
1069 };
1031 };
1070 };
1032 mock = super.buildPythonPackage {
1071 mock = super.buildPythonPackage {
1033 name = "mock-1.0.1";
1072 name = "mock-1.0.1";
1034 buildInputs = with self; [];
1073 buildInputs = with self; [];
1035 doCheck = false;
1074 doCheck = false;
1036 propagatedBuildInputs = with self; [];
1075 propagatedBuildInputs = with self; [];
1037 src = fetchurl {
1076 src = fetchurl {
1038 url = "https://pypi.python.org/packages/15/45/30273ee91feb60dabb8fbb2da7868520525f02cf910279b3047182feed80/mock-1.0.1.zip";
1077 url = "https://pypi.python.org/packages/15/45/30273ee91feb60dabb8fbb2da7868520525f02cf910279b3047182feed80/mock-1.0.1.zip";
1039 md5 = "869f08d003c289a97c1a6610faf5e913";
1078 md5 = "869f08d003c289a97c1a6610faf5e913";
1040 };
1079 };
1041 meta = {
1080 meta = {
1042 license = [ pkgs.lib.licenses.bsdOriginal ];
1081 license = [ pkgs.lib.licenses.bsdOriginal ];
1043 };
1082 };
1044 };
1083 };
1045 msgpack-python = super.buildPythonPackage {
1084 msgpack-python = super.buildPythonPackage {
1046 name = "msgpack-python-0.4.8";
1085 name = "msgpack-python-0.4.8";
1047 buildInputs = with self; [];
1086 buildInputs = with self; [];
1048 doCheck = false;
1087 doCheck = false;
1049 propagatedBuildInputs = with self; [];
1088 propagatedBuildInputs = with self; [];
1050 src = fetchurl {
1089 src = fetchurl {
1051 url = "https://pypi.python.org/packages/21/27/8a1d82041c7a2a51fcc73675875a5f9ea06c2663e02fcfeb708be1d081a0/msgpack-python-0.4.8.tar.gz";
1090 url = "https://pypi.python.org/packages/21/27/8a1d82041c7a2a51fcc73675875a5f9ea06c2663e02fcfeb708be1d081a0/msgpack-python-0.4.8.tar.gz";
1052 md5 = "dcd854fb41ee7584ebbf35e049e6be98";
1091 md5 = "dcd854fb41ee7584ebbf35e049e6be98";
1053 };
1092 };
1054 meta = {
1093 meta = {
1055 license = [ pkgs.lib.licenses.asl20 ];
1094 license = [ pkgs.lib.licenses.asl20 ];
1056 };
1095 };
1057 };
1096 };
1058 nbconvert = super.buildPythonPackage {
1097 nbconvert = super.buildPythonPackage {
1059 name = "nbconvert-5.1.1";
1098 name = "nbconvert-5.1.1";
1060 buildInputs = with self; [];
1099 buildInputs = with self; [];
1061 doCheck = false;
1100 doCheck = false;
1062 propagatedBuildInputs = with self; [mistune Jinja2 Pygments traitlets jupyter-core nbformat entrypoints bleach pandocfilters testpath];
1101 propagatedBuildInputs = with self; [mistune Jinja2 Pygments traitlets jupyter-core nbformat entrypoints bleach pandocfilters testpath];
1063 src = fetchurl {
1102 src = fetchurl {
1064 url = "https://pypi.python.org/packages/95/58/df1c91f1658ee5df19097f915a1e71c91fc824a708d82d2b2e35f8b80e9a/nbconvert-5.1.1.tar.gz";
1103 url = "https://pypi.python.org/packages/95/58/df1c91f1658ee5df19097f915a1e71c91fc824a708d82d2b2e35f8b80e9a/nbconvert-5.1.1.tar.gz";
1065 md5 = "d0263fb03a44db2f94eea09a608ed813";
1104 md5 = "d0263fb03a44db2f94eea09a608ed813";
1066 };
1105 };
1067 meta = {
1106 meta = {
1068 license = [ pkgs.lib.licenses.bsdOriginal ];
1107 license = [ pkgs.lib.licenses.bsdOriginal ];
1069 };
1108 };
1070 };
1109 };
1071 nbformat = super.buildPythonPackage {
1110 nbformat = super.buildPythonPackage {
1072 name = "nbformat-4.3.0";
1111 name = "nbformat-4.3.0";
1073 buildInputs = with self; [];
1112 buildInputs = with self; [];
1074 doCheck = false;
1113 doCheck = false;
1075 propagatedBuildInputs = with self; [ipython-genutils traitlets jsonschema jupyter-core];
1114 propagatedBuildInputs = with self; [ipython-genutils traitlets jsonschema jupyter-core];
1076 src = fetchurl {
1115 src = fetchurl {
1077 url = "https://pypi.python.org/packages/f9/c5/89df4abf906f766727f976e170caa85b4f1c1d1feb1f45d716016e68e19f/nbformat-4.3.0.tar.gz";
1116 url = "https://pypi.python.org/packages/f9/c5/89df4abf906f766727f976e170caa85b4f1c1d1feb1f45d716016e68e19f/nbformat-4.3.0.tar.gz";
1078 md5 = "9a00d20425914cd5ba5f97769d9963ca";
1117 md5 = "9a00d20425914cd5ba5f97769d9963ca";
1079 };
1118 };
1080 meta = {
1119 meta = {
1081 license = [ pkgs.lib.licenses.bsdOriginal ];
1120 license = [ pkgs.lib.licenses.bsdOriginal ];
1082 };
1121 };
1083 };
1122 };
1084 nose = super.buildPythonPackage {
1123 nose = super.buildPythonPackage {
1085 name = "nose-1.3.6";
1124 name = "nose-1.3.6";
1086 buildInputs = with self; [];
1125 buildInputs = with self; [];
1087 doCheck = false;
1126 doCheck = false;
1088 propagatedBuildInputs = with self; [];
1127 propagatedBuildInputs = with self; [];
1089 src = fetchurl {
1128 src = fetchurl {
1090 url = "https://pypi.python.org/packages/70/c7/469e68148d17a0d3db5ed49150242fd70a74a8147b8f3f8b87776e028d99/nose-1.3.6.tar.gz";
1129 url = "https://pypi.python.org/packages/70/c7/469e68148d17a0d3db5ed49150242fd70a74a8147b8f3f8b87776e028d99/nose-1.3.6.tar.gz";
1091 md5 = "0ca546d81ca8309080fc80cb389e7a16";
1130 md5 = "0ca546d81ca8309080fc80cb389e7a16";
1092 };
1131 };
1093 meta = {
1132 meta = {
1094 license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "GNU LGPL"; } ];
1133 license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "GNU LGPL"; } ];
1095 };
1134 };
1096 };
1135 };
1097 objgraph = super.buildPythonPackage {
1136 objgraph = super.buildPythonPackage {
1098 name = "objgraph-3.1.0";
1137 name = "objgraph-3.1.0";
1099 buildInputs = with self; [];
1138 buildInputs = with self; [];
1100 doCheck = false;
1139 doCheck = false;
1101 propagatedBuildInputs = with self; [graphviz];
1140 propagatedBuildInputs = with self; [graphviz];
1102 src = fetchurl {
1141 src = fetchurl {
1103 url = "https://pypi.python.org/packages/f4/b3/082e54e62094cb2ec84f8d5a49e0142cef99016491cecba83309cff920ae/objgraph-3.1.0.tar.gz";
1142 url = "https://pypi.python.org/packages/f4/b3/082e54e62094cb2ec84f8d5a49e0142cef99016491cecba83309cff920ae/objgraph-3.1.0.tar.gz";
1104 md5 = "eddbd96039796bfbd13eee403701e64a";
1143 md5 = "eddbd96039796bfbd13eee403701e64a";
1105 };
1144 };
1106 meta = {
1145 meta = {
1107 license = [ pkgs.lib.licenses.mit ];
1146 license = [ pkgs.lib.licenses.mit ];
1108 };
1147 };
1109 };
1148 };
1110 packaging = super.buildPythonPackage {
1149 packaging = super.buildPythonPackage {
1111 name = "packaging-15.2";
1150 name = "packaging-15.2";
1112 buildInputs = with self; [];
1151 buildInputs = with self; [];
1113 doCheck = false;
1152 doCheck = false;
1114 propagatedBuildInputs = with self; [];
1153 propagatedBuildInputs = with self; [];
1115 src = fetchurl {
1154 src = fetchurl {
1116 url = "https://pypi.python.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
1155 url = "https://pypi.python.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
1117 md5 = "c16093476f6ced42128bf610e5db3784";
1156 md5 = "c16093476f6ced42128bf610e5db3784";
1118 };
1157 };
1119 meta = {
1158 meta = {
1120 license = [ pkgs.lib.licenses.asl20 ];
1159 license = [ pkgs.lib.licenses.asl20 ];
1121 };
1160 };
1122 };
1161 };
1123 pandocfilters = super.buildPythonPackage {
1162 pandocfilters = super.buildPythonPackage {
1124 name = "pandocfilters-1.4.1";
1163 name = "pandocfilters-1.4.2";
1125 buildInputs = with self; [];
1164 buildInputs = with self; [];
1126 doCheck = false;
1165 doCheck = false;
1127 propagatedBuildInputs = with self; [];
1166 propagatedBuildInputs = with self; [];
1128 src = fetchurl {
1167 src = fetchurl {
1129 url = "https://pypi.python.org/packages/e3/1f/21d1b7e8ca571e80b796c758d361fdf5554335ff138158654684bc5401d8/pandocfilters-1.4.1.tar.gz";
1168 url = "https://pypi.python.org/packages/4c/ea/236e2584af67bb6df960832731a6e5325fd4441de001767da328c33368ce/pandocfilters-1.4.2.tar.gz";
1130 md5 = "7680d9f9ec07397dd17f380ee3818b9d";
1169 md5 = "dc391791ef54c7de1572d7b46b63361f";
1131 };
1170 };
1132 meta = {
1171 meta = {
1133 license = [ pkgs.lib.licenses.bsdOriginal ];
1172 license = [ pkgs.lib.licenses.bsdOriginal ];
1134 };
1173 };
1135 };
1174 };
1136 paramiko = super.buildPythonPackage {
1175 pathlib2 = super.buildPythonPackage {
1137 name = "paramiko-1.15.1";
1176 name = "pathlib2-2.3.0";
1138 buildInputs = with self; [];
1177 buildInputs = with self; [];
1139 doCheck = false;
1178 doCheck = false;
1140 propagatedBuildInputs = with self; [pycrypto ecdsa];
1179 propagatedBuildInputs = with self; [six scandir];
1141 src = fetchurl {
1180 src = fetchurl {
1142 url = "https://pypi.python.org/packages/04/2b/a22d2a560c1951abbbf95a0628e245945565f70dc082d9e784666887222c/paramiko-1.15.1.tar.gz";
1181 url = "https://pypi.python.org/packages/a1/14/df0deb867c2733f7d857523c10942b3d6612a1b222502fdffa9439943dfb/pathlib2-2.3.0.tar.gz";
1143 md5 = "48c274c3f9b1282932567b21f6acf3b5";
1182 md5 = "89c90409d11fd5947966b6a30a47d18c";
1144 };
1145 meta = {
1146 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1147 };
1148 };
1149 pathlib2 = super.buildPythonPackage {
1150 name = "pathlib2-2.1.0";
1151 buildInputs = with self; [];
1152 doCheck = false;
1153 propagatedBuildInputs = with self; [six];
1154 src = fetchurl {
1155 url = "https://pypi.python.org/packages/c9/27/8448b10d8440c08efeff0794adf7d0ed27adb98372c70c7b38f3947d4749/pathlib2-2.1.0.tar.gz";
1156 md5 = "38e4f58b4d69dfcb9edb49a54a8b28d2";
1157 };
1183 };
1158 meta = {
1184 meta = {
1159 license = [ pkgs.lib.licenses.mit ];
1185 license = [ pkgs.lib.licenses.mit ];
1160 };
1186 };
1161 };
1187 };
1162 peppercorn = super.buildPythonPackage {
1188 peppercorn = super.buildPythonPackage {
1163 name = "peppercorn-0.5";
1189 name = "peppercorn-0.5";
1164 buildInputs = with self; [];
1190 buildInputs = with self; [];
1165 doCheck = false;
1191 doCheck = false;
1166 propagatedBuildInputs = with self; [];
1192 propagatedBuildInputs = with self; [];
1167 src = fetchurl {
1193 src = fetchurl {
1168 url = "https://pypi.python.org/packages/45/ec/a62ec317d1324a01567c5221b420742f094f05ee48097e5157d32be3755c/peppercorn-0.5.tar.gz";
1194 url = "https://pypi.python.org/packages/45/ec/a62ec317d1324a01567c5221b420742f094f05ee48097e5157d32be3755c/peppercorn-0.5.tar.gz";
1169 md5 = "f08efbca5790019ab45d76b7244abd40";
1195 md5 = "f08efbca5790019ab45d76b7244abd40";
1170 };
1196 };
1171 meta = {
1197 meta = {
1172 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1198 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1173 };
1199 };
1174 };
1200 };
1175 pexpect = super.buildPythonPackage {
1201 pexpect = super.buildPythonPackage {
1176 name = "pexpect-4.2.1";
1202 name = "pexpect-4.2.1";
1177 buildInputs = with self; [];
1203 buildInputs = with self; [];
1178 doCheck = false;
1204 doCheck = false;
1179 propagatedBuildInputs = with self; [ptyprocess];
1205 propagatedBuildInputs = with self; [ptyprocess];
1180 src = fetchurl {
1206 src = fetchurl {
1181 url = "https://pypi.python.org/packages/e8/13/d0b0599099d6cd23663043a2a0bb7c61e58c6ba359b2656e6fb000ef5b98/pexpect-4.2.1.tar.gz";
1207 url = "https://pypi.python.org/packages/e8/13/d0b0599099d6cd23663043a2a0bb7c61e58c6ba359b2656e6fb000ef5b98/pexpect-4.2.1.tar.gz";
1182 md5 = "3694410001a99dff83f0b500a1ca1c95";
1208 md5 = "3694410001a99dff83f0b500a1ca1c95";
1183 };
1209 };
1184 meta = {
1210 meta = {
1185 license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ];
1211 license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ];
1186 };
1212 };
1187 };
1213 };
1188 pickleshare = super.buildPythonPackage {
1214 pickleshare = super.buildPythonPackage {
1189 name = "pickleshare-0.7.4";
1215 name = "pickleshare-0.7.4";
1190 buildInputs = with self; [];
1216 buildInputs = with self; [];
1191 doCheck = false;
1217 doCheck = false;
1192 propagatedBuildInputs = with self; [pathlib2];
1218 propagatedBuildInputs = with self; [pathlib2];
1193 src = fetchurl {
1219 src = fetchurl {
1194 url = "https://pypi.python.org/packages/69/fe/dd137d84daa0fd13a709e448138e310d9ea93070620c9db5454e234af525/pickleshare-0.7.4.tar.gz";
1220 url = "https://pypi.python.org/packages/69/fe/dd137d84daa0fd13a709e448138e310d9ea93070620c9db5454e234af525/pickleshare-0.7.4.tar.gz";
1195 md5 = "6a9e5dd8dfc023031f6b7b3f824cab12";
1221 md5 = "6a9e5dd8dfc023031f6b7b3f824cab12";
1196 };
1222 };
1197 meta = {
1223 meta = {
1198 license = [ pkgs.lib.licenses.mit ];
1224 license = [ pkgs.lib.licenses.mit ];
1199 };
1225 };
1200 };
1226 };
1227 plaster = super.buildPythonPackage {
1228 name = "plaster-0.5";
1229 buildInputs = with self; [];
1230 doCheck = false;
1231 propagatedBuildInputs = with self; [setuptools];
1232 src = fetchurl {
1233 url = "https://pypi.python.org/packages/99/b3/d7ca1fe31d2b56dba68a238721fda6820770f9c2a3de17a582d4b5b2edcc/plaster-0.5.tar.gz";
1234 md5 = "c59345a67a860cfcaa1bd6a81451399d";
1235 };
1236 meta = {
1237 license = [ pkgs.lib.licenses.mit ];
1238 };
1239 };
1240 plaster-pastedeploy = super.buildPythonPackage {
1241 name = "plaster-pastedeploy-0.4.1";
1242 buildInputs = with self; [];
1243 doCheck = false;
1244 propagatedBuildInputs = with self; [PasteDeploy plaster];
1245 src = fetchurl {
1246 url = "https://pypi.python.org/packages/9d/6e/f8be01ed41c94e6c54ac97cf2eb142a702aae0c8cce31c846f785e525b40/plaster_pastedeploy-0.4.1.tar.gz";
1247 md5 = "f48d5344b922e56c4978eebf1cd2e0d3";
1248 };
1249 meta = {
1250 license = [ pkgs.lib.licenses.mit ];
1251 };
1252 };
1201 prompt-toolkit = super.buildPythonPackage {
1253 prompt-toolkit = super.buildPythonPackage {
1202 name = "prompt-toolkit-1.0.14";
1254 name = "prompt-toolkit-1.0.15";
1203 buildInputs = with self; [];
1255 buildInputs = with self; [];
1204 doCheck = false;
1256 doCheck = false;
1205 propagatedBuildInputs = with self; [six wcwidth];
1257 propagatedBuildInputs = with self; [six wcwidth];
1206 src = fetchurl {
1258 src = fetchurl {
1207 url = "https://pypi.python.org/packages/55/56/8c39509b614bda53e638b7500f12577d663ac1b868aef53426fc6a26c3f5/prompt_toolkit-1.0.14.tar.gz";
1259 url = "https://pypi.python.org/packages/8a/ad/cf6b128866e78ad6d7f1dc5b7f99885fb813393d9860778b2984582e81b5/prompt_toolkit-1.0.15.tar.gz";
1208 md5 = "f24061ae133ed32c6b764e92bd48c496";
1260 md5 = "8fe70295006dbc8afedd43e5eba99032";
1209 };
1261 };
1210 meta = {
1262 meta = {
1211 license = [ pkgs.lib.licenses.bsdOriginal ];
1263 license = [ pkgs.lib.licenses.bsdOriginal ];
1212 };
1264 };
1213 };
1265 };
1214 psutil = super.buildPythonPackage {
1266 psutil = super.buildPythonPackage {
1215 name = "psutil-4.3.1";
1267 name = "psutil-4.3.1";
1216 buildInputs = with self; [];
1268 buildInputs = with self; [];
1217 doCheck = false;
1269 doCheck = false;
1218 propagatedBuildInputs = with self; [];
1270 propagatedBuildInputs = with self; [];
1219 src = fetchurl {
1271 src = fetchurl {
1220 url = "https://pypi.python.org/packages/78/cc/f267a1371f229bf16db6a4e604428c3b032b823b83155bd33cef45e49a53/psutil-4.3.1.tar.gz";
1272 url = "https://pypi.python.org/packages/78/cc/f267a1371f229bf16db6a4e604428c3b032b823b83155bd33cef45e49a53/psutil-4.3.1.tar.gz";
1221 md5 = "199a366dba829c88bddaf5b41d19ddc0";
1273 md5 = "199a366dba829c88bddaf5b41d19ddc0";
1222 };
1274 };
1223 meta = {
1275 meta = {
1224 license = [ pkgs.lib.licenses.bsdOriginal ];
1276 license = [ pkgs.lib.licenses.bsdOriginal ];
1225 };
1277 };
1226 };
1278 };
1227 psycopg2 = super.buildPythonPackage {
1279 psycopg2 = super.buildPythonPackage {
1228 name = "psycopg2-2.6.1";
1280 name = "psycopg2-2.7.1";
1229 buildInputs = with self; [];
1281 buildInputs = with self; [];
1230 doCheck = false;
1282 doCheck = false;
1231 propagatedBuildInputs = with self; [];
1283 propagatedBuildInputs = with self; [];
1232 src = fetchurl {
1284 src = fetchurl {
1233 url = "https://pypi.python.org/packages/86/fd/cc8315be63a41fe000cce20482a917e874cdc1151e62cb0141f5e55f711e/psycopg2-2.6.1.tar.gz";
1285 url = "https://pypi.python.org/packages/f8/e9/5793369ce8a41bf5467623ded8d59a434dfef9c136351aca4e70c2657ba0/psycopg2-2.7.1.tar.gz";
1234 md5 = "842b44f8c95517ed5b792081a2370da1";
1286 md5 = "67848ac33af88336046802f6ef7081f3";
1235 };
1287 };
1236 meta = {
1288 meta = {
1237 license = [ pkgs.lib.licenses.zpt21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ];
1289 license = [ pkgs.lib.licenses.zpt21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ];
1238 };
1290 };
1239 };
1291 };
1240 ptyprocess = super.buildPythonPackage {
1292 ptyprocess = super.buildPythonPackage {
1241 name = "ptyprocess-0.5.1";
1293 name = "ptyprocess-0.5.2";
1242 buildInputs = with self; [];
1294 buildInputs = with self; [];
1243 doCheck = false;
1295 doCheck = false;
1244 propagatedBuildInputs = with self; [];
1296 propagatedBuildInputs = with self; [];
1245 src = fetchurl {
1297 src = fetchurl {
1246 url = "https://pypi.python.org/packages/db/d7/b465161910f3d1cef593c5e002bff67e0384898f597f1a7fdc8db4c02bf6/ptyprocess-0.5.1.tar.gz";
1298 url = "https://pypi.python.org/packages/51/83/5d07dc35534640b06f9d9f1a1d2bc2513fb9cc7595a1b0e28ae5477056ce/ptyprocess-0.5.2.tar.gz";
1247 md5 = "94e537122914cc9ec9c1eadcd36e73a1";
1299 md5 = "d3b8febae1b8c53b054bd818d0bb8665";
1248 };
1300 };
1249 meta = {
1301 meta = {
1250 license = [ ];
1302 license = [ ];
1251 };
1303 };
1252 };
1304 };
1253 py = super.buildPythonPackage {
1305 py = super.buildPythonPackage {
1254 name = "py-1.4.31";
1306 name = "py-1.4.34";
1255 buildInputs = with self; [];
1307 buildInputs = with self; [];
1256 doCheck = false;
1308 doCheck = false;
1257 propagatedBuildInputs = with self; [];
1309 propagatedBuildInputs = with self; [];
1258 src = fetchurl {
1310 src = fetchurl {
1259 url = "https://pypi.python.org/packages/f4/9a/8dfda23f36600dd701c6722316ba8a3ab4b990261f83e7d3ffc6dfedf7ef/py-1.4.31.tar.gz";
1311 url = "https://pypi.python.org/packages/68/35/58572278f1c097b403879c1e9369069633d1cbad5239b9057944bb764782/py-1.4.34.tar.gz";
1260 md5 = "5d2c63c56dc3f2115ec35c066ecd582b";
1312 md5 = "d9c3d8f734b0819ff48e355d77bf1730";
1261 };
1313 };
1262 meta = {
1314 meta = {
1263 license = [ pkgs.lib.licenses.mit ];
1315 license = [ pkgs.lib.licenses.mit ];
1264 };
1316 };
1265 };
1317 };
1266 py-bcrypt = super.buildPythonPackage {
1318 py-bcrypt = super.buildPythonPackage {
1267 name = "py-bcrypt-0.4";
1319 name = "py-bcrypt-0.4";
1268 buildInputs = with self; [];
1320 buildInputs = with self; [];
1269 doCheck = false;
1321 doCheck = false;
1270 propagatedBuildInputs = with self; [];
1322 propagatedBuildInputs = with self; [];
1271 src = fetchurl {
1323 src = fetchurl {
1272 url = "https://pypi.python.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1324 url = "https://pypi.python.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1273 md5 = "dd8b367d6b716a2ea2e72392525f4e36";
1325 md5 = "dd8b367d6b716a2ea2e72392525f4e36";
1274 };
1326 };
1275 meta = {
1327 meta = {
1276 license = [ pkgs.lib.licenses.bsdOriginal ];
1328 license = [ pkgs.lib.licenses.bsdOriginal ];
1277 };
1329 };
1278 };
1330 };
1279 py-gfm = super.buildPythonPackage {
1331 py-gfm = super.buildPythonPackage {
1280 name = "py-gfm-0.1.3";
1332 name = "py-gfm-0.1.3";
1281 buildInputs = with self; [];
1333 buildInputs = with self; [];
1282 doCheck = false;
1334 doCheck = false;
1283 propagatedBuildInputs = with self; [setuptools Markdown];
1335 propagatedBuildInputs = with self; [setuptools Markdown];
1284 src = fetchurl {
1336 src = fetchurl {
1285 url = "https://code.rhodecode.com/upstream/py-gfm/archive/0d66a19bc16e3d49de273c0f797d4e4781e8c0f2.tar.gz?md5=0d0d5385bfb629eea636a80b9c2bfd16";
1337 url = "https://code.rhodecode.com/upstream/py-gfm/archive/0d66a19bc16e3d49de273c0f797d4e4781e8c0f2.tar.gz?md5=0d0d5385bfb629eea636a80b9c2bfd16";
1286 md5 = "0d0d5385bfb629eea636a80b9c2bfd16";
1338 md5 = "0d0d5385bfb629eea636a80b9c2bfd16";
1287 };
1339 };
1288 meta = {
1340 meta = {
1289 license = [ pkgs.lib.licenses.bsdOriginal ];
1341 license = [ pkgs.lib.licenses.bsdOriginal ];
1290 };
1342 };
1291 };
1343 };
1292 pycrypto = super.buildPythonPackage {
1344 pycrypto = super.buildPythonPackage {
1293 name = "pycrypto-2.6.1";
1345 name = "pycrypto-2.6.1";
1294 buildInputs = with self; [];
1346 buildInputs = with self; [];
1295 doCheck = false;
1347 doCheck = false;
1296 propagatedBuildInputs = with self; [];
1348 propagatedBuildInputs = with self; [];
1297 src = fetchurl {
1349 src = fetchurl {
1298 url = "https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1350 url = "https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1299 md5 = "55a61a054aa66812daf5161a0d5d7eda";
1351 md5 = "55a61a054aa66812daf5161a0d5d7eda";
1300 };
1352 };
1301 meta = {
1353 meta = {
1302 license = [ pkgs.lib.licenses.publicDomain ];
1354 license = [ pkgs.lib.licenses.publicDomain ];
1303 };
1355 };
1304 };
1356 };
1305 pycurl = super.buildPythonPackage {
1357 pycurl = super.buildPythonPackage {
1306 name = "pycurl-7.19.5";
1358 name = "pycurl-7.19.5";
1307 buildInputs = with self; [];
1359 buildInputs = with self; [];
1308 doCheck = false;
1360 doCheck = false;
1309 propagatedBuildInputs = with self; [];
1361 propagatedBuildInputs = with self; [];
1310 src = fetchurl {
1362 src = fetchurl {
1311 url = "https://pypi.python.org/packages/6c/48/13bad289ef6f4869b1d8fc11ae54de8cfb3cc4a2eb9f7419c506f763be46/pycurl-7.19.5.tar.gz";
1363 url = "https://pypi.python.org/packages/6c/48/13bad289ef6f4869b1d8fc11ae54de8cfb3cc4a2eb9f7419c506f763be46/pycurl-7.19.5.tar.gz";
1312 md5 = "47b4eac84118e2606658122104e62072";
1364 md5 = "47b4eac84118e2606658122104e62072";
1313 };
1365 };
1314 meta = {
1366 meta = {
1315 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1367 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1316 };
1368 };
1317 };
1369 };
1318 pyflakes = super.buildPythonPackage {
1370 pyflakes = super.buildPythonPackage {
1319 name = "pyflakes-0.8.1";
1371 name = "pyflakes-0.8.1";
1320 buildInputs = with self; [];
1372 buildInputs = with self; [];
1321 doCheck = false;
1373 doCheck = false;
1322 propagatedBuildInputs = with self; [];
1374 propagatedBuildInputs = with self; [];
1323 src = fetchurl {
1375 src = fetchurl {
1324 url = "https://pypi.python.org/packages/75/22/a90ec0252f4f87f3ffb6336504de71fe16a49d69c4538dae2f12b9360a38/pyflakes-0.8.1.tar.gz";
1376 url = "https://pypi.python.org/packages/75/22/a90ec0252f4f87f3ffb6336504de71fe16a49d69c4538dae2f12b9360a38/pyflakes-0.8.1.tar.gz";
1325 md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
1377 md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
1326 };
1378 };
1327 meta = {
1379 meta = {
1328 license = [ pkgs.lib.licenses.mit ];
1380 license = [ pkgs.lib.licenses.mit ];
1329 };
1381 };
1330 };
1382 };
1331 pygments-markdown-lexer = super.buildPythonPackage {
1383 pygments-markdown-lexer = super.buildPythonPackage {
1332 name = "pygments-markdown-lexer-0.1.0.dev39";
1384 name = "pygments-markdown-lexer-0.1.0.dev39";
1333 buildInputs = with self; [];
1385 buildInputs = with self; [];
1334 doCheck = false;
1386 doCheck = false;
1335 propagatedBuildInputs = with self; [Pygments];
1387 propagatedBuildInputs = with self; [Pygments];
1336 src = fetchurl {
1388 src = fetchurl {
1337 url = "https://pypi.python.org/packages/c3/12/674cdee66635d638cedb2c5d9c85ce507b7b2f91bdba29e482f1b1160ff6/pygments-markdown-lexer-0.1.0.dev39.zip";
1389 url = "https://pypi.python.org/packages/c3/12/674cdee66635d638cedb2c5d9c85ce507b7b2f91bdba29e482f1b1160ff6/pygments-markdown-lexer-0.1.0.dev39.zip";
1338 md5 = "6360fe0f6d1f896e35b7a0142ce6459c";
1390 md5 = "6360fe0f6d1f896e35b7a0142ce6459c";
1339 };
1391 };
1340 meta = {
1392 meta = {
1341 license = [ pkgs.lib.licenses.asl20 ];
1393 license = [ pkgs.lib.licenses.asl20 ];
1342 };
1394 };
1343 };
1395 };
1344 pyparsing = super.buildPythonPackage {
1396 pyparsing = super.buildPythonPackage {
1345 name = "pyparsing-1.5.7";
1397 name = "pyparsing-1.5.7";
1346 buildInputs = with self; [];
1398 buildInputs = with self; [];
1347 doCheck = false;
1399 doCheck = false;
1348 propagatedBuildInputs = with self; [];
1400 propagatedBuildInputs = with self; [];
1349 src = fetchurl {
1401 src = fetchurl {
1350 url = "https://pypi.python.org/packages/2e/26/e8fb5b4256a5f5036be7ce115ef8db8d06bc537becfbdc46c6af008314ee/pyparsing-1.5.7.zip";
1402 url = "https://pypi.python.org/packages/2e/26/e8fb5b4256a5f5036be7ce115ef8db8d06bc537becfbdc46c6af008314ee/pyparsing-1.5.7.zip";
1351 md5 = "b86854857a368d6ccb4d5b6e76d0637f";
1403 md5 = "b86854857a368d6ccb4d5b6e76d0637f";
1352 };
1404 };
1353 meta = {
1405 meta = {
1354 license = [ pkgs.lib.licenses.mit ];
1406 license = [ pkgs.lib.licenses.mit ];
1355 };
1407 };
1356 };
1408 };
1357 pyramid = super.buildPythonPackage {
1409 pyramid = super.buildPythonPackage {
1358 name = "pyramid-1.7.4";
1410 name = "pyramid-1.9.1";
1359 buildInputs = with self; [];
1411 buildInputs = with self; [];
1360 doCheck = false;
1412 doCheck = false;
1361 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy];
1413 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy plaster plaster-pastedeploy hupper];
1362 src = fetchurl {
1414 src = fetchurl {
1363 url = "https://pypi.python.org/packages/33/91/55f5c661f8923902cd1f68d75f2b937c45e7682857356cf18f0be5493899/pyramid-1.7.4.tar.gz";
1415 url = "https://pypi.python.org/packages/9a/57/73447be9e7d0512d601e3f0a1fb9d7d1efb941911f49efdfe036d2826507/pyramid-1.9.1.tar.gz";
1364 md5 = "6ef1dfdcff9136d04490410757c4c446";
1416 md5 = "0163e19c58c2d12976a3b6fdb57e052d";
1365 };
1417 };
1366 meta = {
1418 meta = {
1367 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1419 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1368 };
1420 };
1369 };
1421 };
1370 pyramid-beaker = super.buildPythonPackage {
1422 pyramid-beaker = super.buildPythonPackage {
1371 name = "pyramid-beaker-0.8";
1423 name = "pyramid-beaker-0.8";
1372 buildInputs = with self; [];
1424 buildInputs = with self; [];
1373 doCheck = false;
1425 doCheck = false;
1374 propagatedBuildInputs = with self; [pyramid Beaker];
1426 propagatedBuildInputs = with self; [pyramid Beaker];
1375 src = fetchurl {
1427 src = fetchurl {
1376 url = "https://pypi.python.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1428 url = "https://pypi.python.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1377 md5 = "22f14be31b06549f80890e2c63a93834";
1429 md5 = "22f14be31b06549f80890e2c63a93834";
1378 };
1430 };
1379 meta = {
1431 meta = {
1380 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1432 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1381 };
1433 };
1382 };
1434 };
1383 pyramid-debugtoolbar = super.buildPythonPackage {
1435 pyramid-debugtoolbar = super.buildPythonPackage {
1384 name = "pyramid-debugtoolbar-3.0.5";
1436 name = "pyramid-debugtoolbar-4.2.1";
1385 buildInputs = with self; [];
1437 buildInputs = with self; [];
1386 doCheck = false;
1438 doCheck = false;
1387 propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments];
1439 propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments ipaddress];
1388 src = fetchurl {
1440 src = fetchurl {
1389 url = "https://pypi.python.org/packages/64/0e/df00bfb55605900e7a2f7e4a18dd83575a6651688e297d5a0aa4c208fd7d/pyramid_debugtoolbar-3.0.5.tar.gz";
1441 url = "https://pypi.python.org/packages/db/26/94620b7752936e2cd74838263ff366db9b454f7394bfb62d1eb2f84b29c1/pyramid_debugtoolbar-4.2.1.tar.gz";
1390 md5 = "aebab8c3bfdc6f89e4d3adc1d126538e";
1442 md5 = "3dfaced2fab1644ff5284017be9d92b9";
1391 };
1443 };
1392 meta = {
1444 meta = {
1393 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1445 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1394 };
1446 };
1395 };
1447 };
1396 pyramid-jinja2 = super.buildPythonPackage {
1448 pyramid-jinja2 = super.buildPythonPackage {
1397 name = "pyramid-jinja2-2.5";
1449 name = "pyramid-jinja2-2.5";
1398 buildInputs = with self; [];
1450 buildInputs = with self; [];
1399 doCheck = false;
1451 doCheck = false;
1400 propagatedBuildInputs = with self; [pyramid zope.deprecation Jinja2 MarkupSafe];
1452 propagatedBuildInputs = with self; [pyramid zope.deprecation Jinja2 MarkupSafe];
1401 src = fetchurl {
1453 src = fetchurl {
1402 url = "https://pypi.python.org/packages/a1/80/595e26ffab7deba7208676b6936b7e5a721875710f982e59899013cae1ed/pyramid_jinja2-2.5.tar.gz";
1454 url = "https://pypi.python.org/packages/a1/80/595e26ffab7deba7208676b6936b7e5a721875710f982e59899013cae1ed/pyramid_jinja2-2.5.tar.gz";
1403 md5 = "07cb6547204ac5e6f0b22a954ccee928";
1455 md5 = "07cb6547204ac5e6f0b22a954ccee928";
1404 };
1456 };
1405 meta = {
1457 meta = {
1406 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1458 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1407 };
1459 };
1408 };
1460 };
1409 pyramid-mako = super.buildPythonPackage {
1461 pyramid-mako = super.buildPythonPackage {
1410 name = "pyramid-mako-1.0.2";
1462 name = "pyramid-mako-1.0.2";
1411 buildInputs = with self; [];
1463 buildInputs = with self; [];
1412 doCheck = false;
1464 doCheck = false;
1413 propagatedBuildInputs = with self; [pyramid Mako];
1465 propagatedBuildInputs = with self; [pyramid Mako];
1414 src = fetchurl {
1466 src = fetchurl {
1415 url = "https://pypi.python.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1467 url = "https://pypi.python.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1416 md5 = "ee25343a97eb76bd90abdc2a774eb48a";
1468 md5 = "ee25343a97eb76bd90abdc2a774eb48a";
1417 };
1469 };
1418 meta = {
1470 meta = {
1419 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1471 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1420 };
1472 };
1421 };
1473 };
1422 pysqlite = super.buildPythonPackage {
1474 pysqlite = super.buildPythonPackage {
1423 name = "pysqlite-2.6.3";
1475 name = "pysqlite-2.8.3";
1424 buildInputs = with self; [];
1476 buildInputs = with self; [];
1425 doCheck = false;
1477 doCheck = false;
1426 propagatedBuildInputs = with self; [];
1478 propagatedBuildInputs = with self; [];
1427 src = fetchurl {
1479 src = fetchurl {
1428 url = "https://pypi.python.org/packages/5c/a6/1c429cd4c8069cf4bfbd0eb4d592b3f4042155a8202df83d7e9b93aa3dc2/pysqlite-2.6.3.tar.gz";
1480 url = "https://pypi.python.org/packages/42/02/981b6703e3c83c5b25a829c6e77aad059f9481b0bbacb47e6e8ca12bd731/pysqlite-2.8.3.tar.gz";
1429 md5 = "7ff1cedee74646b50117acff87aa1cfa";
1481 md5 = "033f17b8644577715aee55e8832ac9fc";
1430 };
1482 };
1431 meta = {
1483 meta = {
1432 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1484 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1433 };
1485 };
1434 };
1486 };
1435 pytest = super.buildPythonPackage {
1487 pytest = super.buildPythonPackage {
1436 name = "pytest-3.0.5";
1488 name = "pytest-3.1.2";
1437 buildInputs = with self; [];
1489 buildInputs = with self; [];
1438 doCheck = false;
1490 doCheck = false;
1439 propagatedBuildInputs = with self; [py];
1491 propagatedBuildInputs = with self; [py setuptools];
1440 src = fetchurl {
1492 src = fetchurl {
1441 url = "https://pypi.python.org/packages/a8/87/b7ca49efe52d2b4169f2bfc49aa5e384173c4619ea8e635f123a0dac5b75/pytest-3.0.5.tar.gz";
1493 url = "https://pypi.python.org/packages/72/2b/2d3155e01f45a5a04427857352ee88220ee39550b2bc078f9db3190aea46/pytest-3.1.2.tar.gz";
1442 md5 = "cefd527b59332688bf5db4a10aa8a7cb";
1494 md5 = "c4d179f89043cc925e1c169d03128e02";
1443 };
1495 };
1444 meta = {
1496 meta = {
1445 license = [ pkgs.lib.licenses.mit ];
1497 license = [ pkgs.lib.licenses.mit ];
1446 };
1498 };
1447 };
1499 };
1448 pytest-catchlog = super.buildPythonPackage {
1500 pytest-catchlog = super.buildPythonPackage {
1449 name = "pytest-catchlog-1.2.2";
1501 name = "pytest-catchlog-1.2.2";
1450 buildInputs = with self; [];
1502 buildInputs = with self; [];
1451 doCheck = false;
1503 doCheck = false;
1452 propagatedBuildInputs = with self; [py pytest];
1504 propagatedBuildInputs = with self; [py pytest];
1453 src = fetchurl {
1505 src = fetchurl {
1454 url = "https://pypi.python.org/packages/f2/2b/2faccdb1a978fab9dd0bf31cca9f6847fbe9184a0bdcc3011ac41dd44191/pytest-catchlog-1.2.2.zip";
1506 url = "https://pypi.python.org/packages/f2/2b/2faccdb1a978fab9dd0bf31cca9f6847fbe9184a0bdcc3011ac41dd44191/pytest-catchlog-1.2.2.zip";
1455 md5 = "09d890c54c7456c818102b7ff8c182c8";
1507 md5 = "09d890c54c7456c818102b7ff8c182c8";
1456 };
1508 };
1457 meta = {
1509 meta = {
1458 license = [ pkgs.lib.licenses.mit ];
1510 license = [ pkgs.lib.licenses.mit ];
1459 };
1511 };
1460 };
1512 };
1461 pytest-cov = super.buildPythonPackage {
1513 pytest-cov = super.buildPythonPackage {
1462 name = "pytest-cov-2.4.0";
1514 name = "pytest-cov-2.5.1";
1463 buildInputs = with self; [];
1515 buildInputs = with self; [];
1464 doCheck = false;
1516 doCheck = false;
1465 propagatedBuildInputs = with self; [pytest coverage];
1517 propagatedBuildInputs = with self; [pytest coverage];
1466 src = fetchurl {
1518 src = fetchurl {
1467 url = "https://pypi.python.org/packages/00/c0/2bfd1fcdb9d407b8ac8185b1cb5ff458105c6b207a9a7f0e13032de9828f/pytest-cov-2.4.0.tar.gz";
1519 url = "https://pypi.python.org/packages/24/b4/7290d65b2f3633db51393bdf8ae66309b37620bc3ec116c5e357e3e37238/pytest-cov-2.5.1.tar.gz";
1468 md5 = "2fda09677d232acc99ec1b3c5831e33f";
1520 md5 = "5acf38d4909e19819eb5c1754fbfc0ac";
1469 };
1521 };
1470 meta = {
1522 meta = {
1471 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
1523 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
1472 };
1524 };
1473 };
1525 };
1474 pytest-profiling = super.buildPythonPackage {
1526 pytest-profiling = super.buildPythonPackage {
1475 name = "pytest-profiling-1.2.2";
1527 name = "pytest-profiling-1.2.6";
1476 buildInputs = with self; [];
1528 buildInputs = with self; [];
1477 doCheck = false;
1529 doCheck = false;
1478 propagatedBuildInputs = with self; [six pytest gprof2dot];
1530 propagatedBuildInputs = with self; [six pytest gprof2dot];
1479 src = fetchurl {
1531 src = fetchurl {
1480 url = "https://pypi.python.org/packages/73/e8/804681323bac0bc45c520ec34185ba8469008942266d0074699b204835c1/pytest-profiling-1.2.2.tar.gz";
1532 url = "https://pypi.python.org/packages/f9/0d/df67fb9ce16c2cef201693da956321b1bccfbf9a4ead39748b9f9d1d74cb/pytest-profiling-1.2.6.tar.gz";
1481 md5 = "0a16d7dda2d23b91e9730fa4558cf728";
1533 md5 = "50eb4c66c3762a2f1a49669bedc0b894";
1482 };
1534 };
1483 meta = {
1535 meta = {
1484 license = [ pkgs.lib.licenses.mit ];
1536 license = [ pkgs.lib.licenses.mit ];
1485 };
1537 };
1486 };
1538 };
1487 pytest-runner = super.buildPythonPackage {
1539 pytest-runner = super.buildPythonPackage {
1488 name = "pytest-runner-2.9";
1540 name = "pytest-runner-2.11.1";
1489 buildInputs = with self; [];
1541 buildInputs = with self; [];
1490 doCheck = false;
1542 doCheck = false;
1491 propagatedBuildInputs = with self; [];
1543 propagatedBuildInputs = with self; [];
1492 src = fetchurl {
1544 src = fetchurl {
1493 url = "https://pypi.python.org/packages/11/d4/c335ddf94463e451109e3494e909765c3e5205787b772e3b25ee8601b86a/pytest-runner-2.9.tar.gz";
1545 url = "https://pypi.python.org/packages/9e/4d/08889e5e27a9f5d6096b9ad257f4dea1faabb03c5ded8f665ead448f5d8a/pytest-runner-2.11.1.tar.gz";
1494 md5 = "2212a2e34404b0960b2fdc2c469247b2";
1546 md5 = "bdb73eb18eca2727944a2dcf963c5a81";
1495 };
1547 };
1496 meta = {
1548 meta = {
1497 license = [ pkgs.lib.licenses.mit ];
1549 license = [ pkgs.lib.licenses.mit ];
1498 };
1550 };
1499 };
1551 };
1500 pytest-sugar = super.buildPythonPackage {
1552 pytest-sugar = super.buildPythonPackage {
1501 name = "pytest-sugar-0.7.1";
1553 name = "pytest-sugar-0.8.0";
1502 buildInputs = with self; [];
1554 buildInputs = with self; [];
1503 doCheck = false;
1555 doCheck = false;
1504 propagatedBuildInputs = with self; [pytest termcolor];
1556 propagatedBuildInputs = with self; [pytest termcolor];
1505 src = fetchurl {
1557 src = fetchurl {
1506 url = "https://pypi.python.org/packages/03/97/05d988b4fa870e7373e8ee4582408543b9ca2bd35c3c67b569369c6f9c49/pytest-sugar-0.7.1.tar.gz";
1558 url = "https://pypi.python.org/packages/a5/b0/b2773dee078f17773a5bf2dfad49b0be57b6354bbd84bbefe4313e509d87/pytest-sugar-0.8.0.tar.gz";
1507 md5 = "7400f7c11f3d572b2c2a3b60352d35fe";
1559 md5 = "8cafbdad648068e0e44b8fc5f9faae42";
1508 };
1560 };
1509 meta = {
1561 meta = {
1510 license = [ pkgs.lib.licenses.bsdOriginal ];
1562 license = [ pkgs.lib.licenses.bsdOriginal ];
1511 };
1563 };
1512 };
1564 };
1513 pytest-timeout = super.buildPythonPackage {
1565 pytest-timeout = super.buildPythonPackage {
1514 name = "pytest-timeout-1.2.0";
1566 name = "pytest-timeout-1.2.0";
1515 buildInputs = with self; [];
1567 buildInputs = with self; [];
1516 doCheck = false;
1568 doCheck = false;
1517 propagatedBuildInputs = with self; [pytest];
1569 propagatedBuildInputs = with self; [pytest];
1518 src = fetchurl {
1570 src = fetchurl {
1519 url = "https://pypi.python.org/packages/cc/b7/b2a61365ea6b6d2e8881360ae7ed8dad0327ad2df89f2f0be4a02304deb2/pytest-timeout-1.2.0.tar.gz";
1571 url = "https://pypi.python.org/packages/cc/b7/b2a61365ea6b6d2e8881360ae7ed8dad0327ad2df89f2f0be4a02304deb2/pytest-timeout-1.2.0.tar.gz";
1520 md5 = "83607d91aa163562c7ee835da57d061d";
1572 md5 = "83607d91aa163562c7ee835da57d061d";
1521 };
1573 };
1522 meta = {
1574 meta = {
1523 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1575 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1524 };
1576 };
1525 };
1577 };
1526 python-dateutil = super.buildPythonPackage {
1578 python-dateutil = super.buildPythonPackage {
1527 name = "python-dateutil-2.1";
1579 name = "python-dateutil-2.1";
1528 buildInputs = with self; [];
1580 buildInputs = with self; [];
1529 doCheck = false;
1581 doCheck = false;
1530 propagatedBuildInputs = with self; [six];
1582 propagatedBuildInputs = with self; [six];
1531 src = fetchurl {
1583 src = fetchurl {
1532 url = "https://pypi.python.org/packages/65/52/9c18dac21f174ad31b65e22d24297864a954e6fe65876eba3f5773d2da43/python-dateutil-2.1.tar.gz";
1584 url = "https://pypi.python.org/packages/65/52/9c18dac21f174ad31b65e22d24297864a954e6fe65876eba3f5773d2da43/python-dateutil-2.1.tar.gz";
1533 md5 = "1534bb15cf311f07afaa3aacba1c028b";
1585 md5 = "1534bb15cf311f07afaa3aacba1c028b";
1534 };
1586 };
1535 meta = {
1587 meta = {
1536 license = [ { fullName = "Simplified BSD"; } ];
1588 license = [ { fullName = "Simplified BSD"; } ];
1537 };
1589 };
1538 };
1590 };
1539 python-editor = super.buildPythonPackage {
1591 python-editor = super.buildPythonPackage {
1540 name = "python-editor-1.0.3";
1592 name = "python-editor-1.0.3";
1541 buildInputs = with self; [];
1593 buildInputs = with self; [];
1542 doCheck = false;
1594 doCheck = false;
1543 propagatedBuildInputs = with self; [];
1595 propagatedBuildInputs = with self; [];
1544 src = fetchurl {
1596 src = fetchurl {
1545 url = "https://pypi.python.org/packages/65/1e/adf6e000ea5dc909aa420352d6ba37f16434c8a3c2fa030445411a1ed545/python-editor-1.0.3.tar.gz";
1597 url = "https://pypi.python.org/packages/65/1e/adf6e000ea5dc909aa420352d6ba37f16434c8a3c2fa030445411a1ed545/python-editor-1.0.3.tar.gz";
1546 md5 = "0aca5f2ef176ce68e98a5b7e31372835";
1598 md5 = "0aca5f2ef176ce68e98a5b7e31372835";
1547 };
1599 };
1548 meta = {
1600 meta = {
1549 license = [ pkgs.lib.licenses.asl20 { fullName = "Apache"; } ];
1601 license = [ pkgs.lib.licenses.asl20 { fullName = "Apache"; } ];
1550 };
1602 };
1551 };
1603 };
1552 python-ldap = super.buildPythonPackage {
1604 python-ldap = super.buildPythonPackage {
1553 name = "python-ldap-2.4.19";
1605 name = "python-ldap-2.4.40";
1554 buildInputs = with self; [];
1606 buildInputs = with self; [];
1555 doCheck = false;
1607 doCheck = false;
1556 propagatedBuildInputs = with self; [setuptools];
1608 propagatedBuildInputs = with self; [setuptools];
1557 src = fetchurl {
1609 src = fetchurl {
1558 url = "https://pypi.python.org/packages/42/81/1b64838c82e64f14d4e246ff00b52e650a35c012551b891ada2b85d40737/python-ldap-2.4.19.tar.gz";
1610 url = "https://pypi.python.org/packages/4a/d8/7d70a7469058a3987d224061a81d778951ac2b48220bdcc511e4b1b37176/python-ldap-2.4.40.tar.gz";
1559 md5 = "b941bf31d09739492aa19ef679e94ae3";
1611 md5 = "aea0233f7d39b0c7549fcd310deeb0e5";
1560 };
1612 };
1561 meta = {
1613 meta = {
1562 license = [ pkgs.lib.licenses.psfl ];
1614 license = [ pkgs.lib.licenses.psfl ];
1563 };
1615 };
1564 };
1616 };
1565 python-memcached = super.buildPythonPackage {
1617 python-memcached = super.buildPythonPackage {
1566 name = "python-memcached-1.57";
1618 name = "python-memcached-1.58";
1567 buildInputs = with self; [];
1619 buildInputs = with self; [];
1568 doCheck = false;
1620 doCheck = false;
1569 propagatedBuildInputs = with self; [six];
1621 propagatedBuildInputs = with self; [six];
1570 src = fetchurl {
1622 src = fetchurl {
1571 url = "https://pypi.python.org/packages/52/9d/eebc0dcbc5c7c66840ad207dfc1baa376dadb74912484bff73819cce01e6/python-memcached-1.57.tar.gz";
1623 url = "https://pypi.python.org/packages/f7/62/14b2448cfb04427366f24104c9da97cf8ea380d7258a3233f066a951a8d8/python-memcached-1.58.tar.gz";
1572 md5 = "de21f64b42b2d961f3d4ad7beb5468a1";
1624 md5 = "23b258105013d14d899828d334e6b044";
1573 };
1625 };
1574 meta = {
1626 meta = {
1575 license = [ pkgs.lib.licenses.psfl ];
1627 license = [ pkgs.lib.licenses.psfl ];
1576 };
1628 };
1577 };
1629 };
1578 python-pam = super.buildPythonPackage {
1630 python-pam = super.buildPythonPackage {
1579 name = "python-pam-1.8.2";
1631 name = "python-pam-1.8.2";
1580 buildInputs = with self; [];
1632 buildInputs = with self; [];
1581 doCheck = false;
1633 doCheck = false;
1582 propagatedBuildInputs = with self; [];
1634 propagatedBuildInputs = with self; [];
1583 src = fetchurl {
1635 src = fetchurl {
1584 url = "https://pypi.python.org/packages/de/8c/f8f5d38b4f26893af267ea0b39023d4951705ab0413a39e0cf7cf4900505/python-pam-1.8.2.tar.gz";
1636 url = "https://pypi.python.org/packages/de/8c/f8f5d38b4f26893af267ea0b39023d4951705ab0413a39e0cf7cf4900505/python-pam-1.8.2.tar.gz";
1585 md5 = "db71b6b999246fb05d78ecfbe166629d";
1637 md5 = "db71b6b999246fb05d78ecfbe166629d";
1586 };
1638 };
1587 meta = {
1639 meta = {
1588 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1640 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1589 };
1641 };
1590 };
1642 };
1591 pytz = super.buildPythonPackage {
1643 pytz = super.buildPythonPackage {
1592 name = "pytz-2015.4";
1644 name = "pytz-2015.4";
1593 buildInputs = with self; [];
1645 buildInputs = with self; [];
1594 doCheck = false;
1646 doCheck = false;
1595 propagatedBuildInputs = with self; [];
1647 propagatedBuildInputs = with self; [];
1596 src = fetchurl {
1648 src = fetchurl {
1597 url = "https://pypi.python.org/packages/7e/1a/f43b5c92df7b156822030fed151327ea096bcf417e45acc23bd1df43472f/pytz-2015.4.zip";
1649 url = "https://pypi.python.org/packages/7e/1a/f43b5c92df7b156822030fed151327ea096bcf417e45acc23bd1df43472f/pytz-2015.4.zip";
1598 md5 = "233f2a2b370d03f9b5911700cc9ebf3c";
1650 md5 = "233f2a2b370d03f9b5911700cc9ebf3c";
1599 };
1651 };
1600 meta = {
1652 meta = {
1601 license = [ pkgs.lib.licenses.mit ];
1653 license = [ pkgs.lib.licenses.mit ];
1602 };
1654 };
1603 };
1655 };
1604 pyzmq = super.buildPythonPackage {
1656 pyzmq = super.buildPythonPackage {
1605 name = "pyzmq-14.6.0";
1657 name = "pyzmq-14.6.0";
1606 buildInputs = with self; [];
1658 buildInputs = with self; [];
1607 doCheck = false;
1659 doCheck = false;
1608 propagatedBuildInputs = with self; [];
1660 propagatedBuildInputs = with self; [];
1609 src = fetchurl {
1661 src = fetchurl {
1610 url = "https://pypi.python.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1662 url = "https://pypi.python.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1611 md5 = "395b5de95a931afa5b14c9349a5b8024";
1663 md5 = "395b5de95a931afa5b14c9349a5b8024";
1612 };
1664 };
1613 meta = {
1665 meta = {
1614 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1666 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1615 };
1667 };
1616 };
1668 };
1617 recaptcha-client = super.buildPythonPackage {
1669 recaptcha-client = super.buildPythonPackage {
1618 name = "recaptcha-client-1.0.6";
1670 name = "recaptcha-client-1.0.6";
1619 buildInputs = with self; [];
1671 buildInputs = with self; [];
1620 doCheck = false;
1672 doCheck = false;
1621 propagatedBuildInputs = with self; [];
1673 propagatedBuildInputs = with self; [];
1622 src = fetchurl {
1674 src = fetchurl {
1623 url = "https://pypi.python.org/packages/0a/ea/5f2fbbfd894bdac1c68ef8d92019066cfcf9fbff5fe3d728d2b5c25c8db4/recaptcha-client-1.0.6.tar.gz";
1675 url = "https://pypi.python.org/packages/0a/ea/5f2fbbfd894bdac1c68ef8d92019066cfcf9fbff5fe3d728d2b5c25c8db4/recaptcha-client-1.0.6.tar.gz";
1624 md5 = "74228180f7e1fb76c4d7089160b0d919";
1676 md5 = "74228180f7e1fb76c4d7089160b0d919";
1625 };
1677 };
1626 meta = {
1678 meta = {
1627 license = [ { fullName = "MIT/X11"; } ];
1679 license = [ { fullName = "MIT/X11"; } ];
1628 };
1680 };
1629 };
1681 };
1682 redis = super.buildPythonPackage {
1683 name = "redis-2.10.6";
1684 buildInputs = with self; [];
1685 doCheck = false;
1686 propagatedBuildInputs = with self; [];
1687 src = fetchurl {
1688 url = "https://pypi.python.org/packages/09/8d/6d34b75326bf96d4139a2ddd8e74b80840f800a0a79f9294399e212cb9a7/redis-2.10.6.tar.gz";
1689 md5 = "048348d8cfe0b5d0bba2f4d835005c3b";
1690 };
1691 meta = {
1692 license = [ pkgs.lib.licenses.mit ];
1693 };
1694 };
1630 repoze.lru = super.buildPythonPackage {
1695 repoze.lru = super.buildPythonPackage {
1631 name = "repoze.lru-0.6";
1696 name = "repoze.lru-0.6";
1632 buildInputs = with self; [];
1697 buildInputs = with self; [];
1633 doCheck = false;
1698 doCheck = false;
1634 propagatedBuildInputs = with self; [];
1699 propagatedBuildInputs = with self; [];
1635 src = fetchurl {
1700 src = fetchurl {
1636 url = "https://pypi.python.org/packages/6e/1e/aa15cc90217e086dc8769872c8778b409812ff036bf021b15795638939e4/repoze.lru-0.6.tar.gz";
1701 url = "https://pypi.python.org/packages/6e/1e/aa15cc90217e086dc8769872c8778b409812ff036bf021b15795638939e4/repoze.lru-0.6.tar.gz";
1637 md5 = "2c3b64b17a8e18b405f55d46173e14dd";
1702 md5 = "2c3b64b17a8e18b405f55d46173e14dd";
1638 };
1703 };
1639 meta = {
1704 meta = {
1640 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1705 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1641 };
1706 };
1642 };
1707 };
1643 requests = super.buildPythonPackage {
1708 requests = super.buildPythonPackage {
1644 name = "requests-2.9.1";
1709 name = "requests-2.9.1";
1645 buildInputs = with self; [];
1710 buildInputs = with self; [];
1646 doCheck = false;
1711 doCheck = false;
1647 propagatedBuildInputs = with self; [];
1712 propagatedBuildInputs = with self; [];
1648 src = fetchurl {
1713 src = fetchurl {
1649 url = "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1714 url = "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1650 md5 = "0b7f480d19012ec52bab78292efd976d";
1715 md5 = "0b7f480d19012ec52bab78292efd976d";
1651 };
1716 };
1652 meta = {
1717 meta = {
1653 license = [ pkgs.lib.licenses.asl20 ];
1718 license = [ pkgs.lib.licenses.asl20 ];
1654 };
1719 };
1655 };
1720 };
1656 rhodecode-enterprise-ce = super.buildPythonPackage {
1721 rhodecode-enterprise-ce = super.buildPythonPackage {
1657 name = "rhodecode-enterprise-ce-4.9.1";
1722 name = "rhodecode-enterprise-ce-4.10.0";
1658 buildInputs = with self; [pytest py pytest-cov pytest-sugar pytest-runner pytest-catchlog pytest-profiling gprof2dot pytest-timeout mock WebTest cov-core coverage configobj];
1723 buildInputs = with self; [pytest py pytest-cov pytest-sugar pytest-runner pytest-catchlog pytest-profiling gprof2dot pytest-timeout mock WebTest cov-core coverage configobj];
1659 doCheck = true;
1724 doCheck = true;
1660 propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments pygments-markdown-lexer Pylons Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic backport-ipaddress cssselect celery channelstream colander decorator deform docutils gevent gunicorn infrae.cache ipython iso8601 kombu lxml msgpack-python nbconvert 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 subprocess32 waitress zope.cachedescriptors dogpile.cache dogpile.core psutil py-bcrypt];
1725 propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments pygments-markdown-lexer Pylons Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic cssselect celery channelstream colander decorator deform docutils gevent gunicorn infrae.cache ipython iso8601 kombu lxml msgpack-python nbconvert 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 redis repoze.lru requests simplejson sshpubkeys subprocess32 waitress zope.cachedescriptors dogpile.cache dogpile.core psutil py-bcrypt];
1661 src = ./.;
1726 src = ./.;
1662 meta = {
1727 meta = {
1663 license = [ { fullName = "Affero GNU General Public License v3 or later (AGPLv3+)"; } { fullName = "AGPLv3, and Commercial License"; } ];
1728 license = [ { fullName = "Affero GNU General Public License v3 or later (AGPLv3+)"; } { fullName = "AGPLv3, and Commercial License"; } ];
1664 };
1729 };
1665 };
1730 };
1666 rhodecode-tools = super.buildPythonPackage {
1731 rhodecode-tools = super.buildPythonPackage {
1667 name = "rhodecode-tools-0.12.0";
1732 name = "rhodecode-tools-0.13.0";
1668 buildInputs = with self; [];
1733 buildInputs = with self; [];
1669 doCheck = false;
1734 doCheck = false;
1670 propagatedBuildInputs = with self; [click future six Mako MarkupSafe requests elasticsearch elasticsearch-dsl urllib3 Whoosh];
1735 propagatedBuildInputs = with self; [click future six Mako MarkupSafe requests elasticsearch elasticsearch-dsl urllib3 Whoosh];
1671 src = fetchurl {
1736 src = fetchurl {
1672 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.12.0.tar.gz?md5=9ca040356fa7e38d3f64529a4cffdca4";
1737 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.13.0.tar.gz?md5=f937b0cb34d0779103895a5ec5689ee4";
1673 md5 = "9ca040356fa7e38d3f64529a4cffdca4";
1738 md5 = "f937b0cb34d0779103895a5ec5689ee4";
1674 };
1739 };
1675 meta = {
1740 meta = {
1676 license = [ { fullName = "AGPLv3 and Proprietary"; } ];
1741 license = [ { fullName = "AGPLv3 and Proprietary"; } ];
1677 };
1742 };
1678 };
1743 };
1744 scandir = super.buildPythonPackage {
1745 name = "scandir-1.5";
1746 buildInputs = with self; [];
1747 doCheck = false;
1748 propagatedBuildInputs = with self; [];
1749 src = fetchurl {
1750 url = "https://pypi.python.org/packages/bd/f4/3143e0289faf0883228017dbc6387a66d0b468df646645e29e1eb89ea10e/scandir-1.5.tar.gz";
1751 md5 = "a2713043de681bba6b084be42e7a8a44";
1752 };
1753 meta = {
1754 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "New BSD License"; } ];
1755 };
1756 };
1679 setproctitle = super.buildPythonPackage {
1757 setproctitle = super.buildPythonPackage {
1680 name = "setproctitle-1.1.8";
1758 name = "setproctitle-1.1.8";
1681 buildInputs = with self; [];
1759 buildInputs = with self; [];
1682 doCheck = false;
1760 doCheck = false;
1683 propagatedBuildInputs = with self; [];
1761 propagatedBuildInputs = with self; [];
1684 src = fetchurl {
1762 src = fetchurl {
1685 url = "https://pypi.python.org/packages/33/c3/ad367a4f4f1ca90468863ae727ac62f6edb558fc09a003d344a02cfc6ea6/setproctitle-1.1.8.tar.gz";
1763 url = "https://pypi.python.org/packages/33/c3/ad367a4f4f1ca90468863ae727ac62f6edb558fc09a003d344a02cfc6ea6/setproctitle-1.1.8.tar.gz";
1686 md5 = "728f4c8c6031bbe56083a48594027edd";
1764 md5 = "728f4c8c6031bbe56083a48594027edd";
1687 };
1765 };
1688 meta = {
1766 meta = {
1689 license = [ pkgs.lib.licenses.bsdOriginal ];
1767 license = [ pkgs.lib.licenses.bsdOriginal ];
1690 };
1768 };
1691 };
1769 };
1692 setuptools = super.buildPythonPackage {
1770 setuptools = super.buildPythonPackage {
1693 name = "setuptools-30.1.0";
1771 name = "setuptools-30.1.0";
1694 buildInputs = with self; [];
1772 buildInputs = with self; [];
1695 doCheck = false;
1773 doCheck = false;
1696 propagatedBuildInputs = with self; [];
1774 propagatedBuildInputs = with self; [];
1697 src = fetchurl {
1775 src = fetchurl {
1698 url = "https://pypi.python.org/packages/1e/43/002c8616db9a3e7be23c2556e39b90a32bb40ba0dc652de1999d5334d372/setuptools-30.1.0.tar.gz";
1776 url = "https://pypi.python.org/packages/1e/43/002c8616db9a3e7be23c2556e39b90a32bb40ba0dc652de1999d5334d372/setuptools-30.1.0.tar.gz";
1699 md5 = "cac497f42e5096ac8df29e38d3f81c3e";
1777 md5 = "cac497f42e5096ac8df29e38d3f81c3e";
1700 };
1778 };
1701 meta = {
1779 meta = {
1702 license = [ pkgs.lib.licenses.mit ];
1780 license = [ pkgs.lib.licenses.mit ];
1703 };
1781 };
1704 };
1782 };
1705 setuptools-scm = super.buildPythonPackage {
1783 setuptools-scm = super.buildPythonPackage {
1706 name = "setuptools-scm-1.15.0";
1784 name = "setuptools-scm-1.15.0";
1707 buildInputs = with self; [];
1785 buildInputs = with self; [];
1708 doCheck = false;
1786 doCheck = false;
1709 propagatedBuildInputs = with self; [];
1787 propagatedBuildInputs = with self; [];
1710 src = fetchurl {
1788 src = fetchurl {
1711 url = "https://pypi.python.org/packages/80/b7/31b6ae5fcb188e37f7e31abe75f9be90490a5456a72860fa6e643f8a3cbc/setuptools_scm-1.15.0.tar.gz";
1789 url = "https://pypi.python.org/packages/80/b7/31b6ae5fcb188e37f7e31abe75f9be90490a5456a72860fa6e643f8a3cbc/setuptools_scm-1.15.0.tar.gz";
1712 md5 = "b6916c78ed6253d6602444fad4279c5b";
1790 md5 = "b6916c78ed6253d6602444fad4279c5b";
1713 };
1791 };
1714 meta = {
1792 meta = {
1715 license = [ pkgs.lib.licenses.mit ];
1793 license = [ pkgs.lib.licenses.mit ];
1716 };
1794 };
1717 };
1795 };
1718 simplegeneric = super.buildPythonPackage {
1796 simplegeneric = super.buildPythonPackage {
1719 name = "simplegeneric-0.8.1";
1797 name = "simplegeneric-0.8.1";
1720 buildInputs = with self; [];
1798 buildInputs = with self; [];
1721 doCheck = false;
1799 doCheck = false;
1722 propagatedBuildInputs = with self; [];
1800 propagatedBuildInputs = with self; [];
1723 src = fetchurl {
1801 src = fetchurl {
1724 url = "https://pypi.python.org/packages/3d/57/4d9c9e3ae9a255cd4e1106bb57e24056d3d0709fc01b2e3e345898e49d5b/simplegeneric-0.8.1.zip";
1802 url = "https://pypi.python.org/packages/3d/57/4d9c9e3ae9a255cd4e1106bb57e24056d3d0709fc01b2e3e345898e49d5b/simplegeneric-0.8.1.zip";
1725 md5 = "f9c1fab00fd981be588fc32759f474e3";
1803 md5 = "f9c1fab00fd981be588fc32759f474e3";
1726 };
1804 };
1727 meta = {
1805 meta = {
1728 license = [ pkgs.lib.licenses.zpt21 ];
1806 license = [ pkgs.lib.licenses.zpt21 ];
1729 };
1807 };
1730 };
1808 };
1731 simplejson = super.buildPythonPackage {
1809 simplejson = super.buildPythonPackage {
1732 name = "simplejson-3.7.2";
1810 name = "simplejson-3.11.1";
1733 buildInputs = with self; [];
1811 buildInputs = with self; [];
1734 doCheck = false;
1812 doCheck = false;
1735 propagatedBuildInputs = with self; [];
1813 propagatedBuildInputs = with self; [];
1736 src = fetchurl {
1814 src = fetchurl {
1737 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
1815 url = "https://pypi.python.org/packages/08/48/c97b668d6da7d7bebe7ea1817a6f76394b0ec959cb04214ca833c34359df/simplejson-3.11.1.tar.gz";
1738 md5 = "a5fc7d05d4cb38492285553def5d4b46";
1816 md5 = "6e2f1bd5fb0a926facf5d89d217a7183";
1739 };
1817 };
1740 meta = {
1818 meta = {
1741 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
1819 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
1742 };
1820 };
1743 };
1821 };
1744 six = super.buildPythonPackage {
1822 six = super.buildPythonPackage {
1745 name = "six-1.9.0";
1823 name = "six-1.9.0";
1746 buildInputs = with self; [];
1824 buildInputs = with self; [];
1747 doCheck = false;
1825 doCheck = false;
1748 propagatedBuildInputs = with self; [];
1826 propagatedBuildInputs = with self; [];
1749 src = fetchurl {
1827 src = fetchurl {
1750 url = "https://pypi.python.org/packages/16/64/1dc5e5976b17466fd7d712e59cbe9fb1e18bec153109e5ba3ed6c9102f1a/six-1.9.0.tar.gz";
1828 url = "https://pypi.python.org/packages/16/64/1dc5e5976b17466fd7d712e59cbe9fb1e18bec153109e5ba3ed6c9102f1a/six-1.9.0.tar.gz";
1751 md5 = "476881ef4012262dfc8adc645ee786c4";
1829 md5 = "476881ef4012262dfc8adc645ee786c4";
1752 };
1830 };
1753 meta = {
1831 meta = {
1754 license = [ pkgs.lib.licenses.mit ];
1832 license = [ pkgs.lib.licenses.mit ];
1755 };
1833 };
1756 };
1834 };
1835 sshpubkeys = super.buildPythonPackage {
1836 name = "sshpubkeys-2.2.0";
1837 buildInputs = with self; [];
1838 doCheck = false;
1839 propagatedBuildInputs = with self; [pycrypto ecdsa];
1840 src = fetchurl {
1841 url = "https://pypi.python.org/packages/27/da/337fabeb3dca6b62039a93ceaa636f25065e0ae92b575b1235342076cf0a/sshpubkeys-2.2.0.tar.gz";
1842 md5 = "458e45f6b92b1afa84f0ffe1f1c90935";
1843 };
1844 meta = {
1845 license = [ pkgs.lib.licenses.bsdOriginal ];
1846 };
1847 };
1757 subprocess32 = super.buildPythonPackage {
1848 subprocess32 = super.buildPythonPackage {
1758 name = "subprocess32-3.2.6";
1849 name = "subprocess32-3.2.7";
1759 buildInputs = with self; [];
1850 buildInputs = with self; [];
1760 doCheck = false;
1851 doCheck = false;
1761 propagatedBuildInputs = with self; [];
1852 propagatedBuildInputs = with self; [];
1762 src = fetchurl {
1853 src = fetchurl {
1763 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
1854 url = "https://pypi.python.org/packages/b8/2f/49e53b0d0e94611a2dc624a1ad24d41b6d94d0f1b0a078443407ea2214c2/subprocess32-3.2.7.tar.gz";
1764 md5 = "754c5ab9f533e764f931136974b618f1";
1855 md5 = "824c801e479d3e916879aae3e9c15e16";
1765 };
1856 };
1766 meta = {
1857 meta = {
1767 license = [ pkgs.lib.licenses.psfl ];
1858 license = [ pkgs.lib.licenses.psfl ];
1768 };
1859 };
1769 };
1860 };
1770 supervisor = super.buildPythonPackage {
1861 supervisor = super.buildPythonPackage {
1771 name = "supervisor-3.3.1";
1862 name = "supervisor-3.3.3";
1772 buildInputs = with self; [];
1863 buildInputs = with self; [];
1773 doCheck = false;
1864 doCheck = false;
1774 propagatedBuildInputs = with self; [meld3];
1865 propagatedBuildInputs = with self; [meld3];
1775 src = fetchurl {
1866 src = fetchurl {
1776 url = "https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz";
1867 url = "https://pypi.python.org/packages/31/7e/788fc6566211e77c395ea272058eb71299c65cc5e55b6214d479c6c2ec9a/supervisor-3.3.3.tar.gz";
1777 md5 = "202f760f9bf4930ec06557bac73e5cf2";
1868 md5 = "0fe86dfec4e5c5d98324d24c4cf944bd";
1778 };
1869 };
1779 meta = {
1870 meta = {
1780 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1871 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1781 };
1872 };
1782 };
1873 };
1783 termcolor = super.buildPythonPackage {
1874 termcolor = super.buildPythonPackage {
1784 name = "termcolor-1.1.0";
1875 name = "termcolor-1.1.0";
1785 buildInputs = with self; [];
1876 buildInputs = with self; [];
1786 doCheck = false;
1877 doCheck = false;
1787 propagatedBuildInputs = with self; [];
1878 propagatedBuildInputs = with self; [];
1788 src = fetchurl {
1879 src = fetchurl {
1789 url = "https://pypi.python.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz";
1880 url = "https://pypi.python.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz";
1790 md5 = "043e89644f8909d462fbbfa511c768df";
1881 md5 = "043e89644f8909d462fbbfa511c768df";
1791 };
1882 };
1792 meta = {
1883 meta = {
1793 license = [ pkgs.lib.licenses.mit ];
1884 license = [ pkgs.lib.licenses.mit ];
1794 };
1885 };
1795 };
1886 };
1796 testpath = super.buildPythonPackage {
1887 testpath = super.buildPythonPackage {
1797 name = "testpath-0.1";
1888 name = "testpath-0.3.1";
1798 buildInputs = with self; [];
1889 buildInputs = with self; [];
1799 doCheck = false;
1890 doCheck = false;
1800 propagatedBuildInputs = with self; [];
1891 propagatedBuildInputs = with self; [];
1801 src = fetchurl {
1892 src = fetchurl {
1802 url = "https://pypi.python.org/packages/f9/c4/c0b22f35138bc26a6058c39cb61db1e8977e5e9550b12cd2cb02ef56fc51/testpath-0.1.tar.gz";
1893 url = "https://pypi.python.org/packages/f4/8b/b71e9ee10e5f751e9d959bc750ab122ba04187f5aa52aabdc4e63b0e31a7/testpath-0.3.1.tar.gz";
1803 md5 = "401918bcd0b0e5b71a9b909835117bc6";
1894 md5 = "2cd5ed5522fda781bb497c9d80ae2fc9";
1804 };
1895 };
1805 meta = {
1896 meta = {
1806 license = [ pkgs.lib.licenses.mit ];
1897 license = [ pkgs.lib.licenses.mit ];
1807 };
1898 };
1808 };
1899 };
1809 traitlets = super.buildPythonPackage {
1900 traitlets = super.buildPythonPackage {
1810 name = "traitlets-4.3.2";
1901 name = "traitlets-4.3.2";
1811 buildInputs = with self; [];
1902 buildInputs = with self; [];
1812 doCheck = false;
1903 doCheck = false;
1813 propagatedBuildInputs = with self; [ipython-genutils six decorator enum34];
1904 propagatedBuildInputs = with self; [ipython-genutils six decorator enum34];
1814 src = fetchurl {
1905 src = fetchurl {
1815 url = "https://pypi.python.org/packages/a5/98/7f5ef2fe9e9e071813aaf9cb91d1a732e0a68b6c44a32b38cb8e14c3f069/traitlets-4.3.2.tar.gz";
1906 url = "https://pypi.python.org/packages/a5/98/7f5ef2fe9e9e071813aaf9cb91d1a732e0a68b6c44a32b38cb8e14c3f069/traitlets-4.3.2.tar.gz";
1816 md5 = "3068663f2f38fd939a9eb3a500ccc154";
1907 md5 = "3068663f2f38fd939a9eb3a500ccc154";
1817 };
1908 };
1818 meta = {
1909 meta = {
1819 license = [ pkgs.lib.licenses.bsdOriginal ];
1910 license = [ pkgs.lib.licenses.bsdOriginal ];
1820 };
1911 };
1821 };
1912 };
1822 transifex-client = super.buildPythonPackage {
1913 transifex-client = super.buildPythonPackage {
1823 name = "transifex-client-0.10";
1914 name = "transifex-client-0.10";
1824 buildInputs = with self; [];
1915 buildInputs = with self; [];
1825 doCheck = false;
1916 doCheck = false;
1826 propagatedBuildInputs = with self; [];
1917 propagatedBuildInputs = with self; [];
1827 src = fetchurl {
1918 src = fetchurl {
1828 url = "https://pypi.python.org/packages/f3/4e/7b925192aee656fb3e04fa6381c8b3dc40198047c3b4a356f6cfd642c809/transifex-client-0.10.tar.gz";
1919 url = "https://pypi.python.org/packages/f3/4e/7b925192aee656fb3e04fa6381c8b3dc40198047c3b4a356f6cfd642c809/transifex-client-0.10.tar.gz";
1829 md5 = "5549538d84b8eede6b254cd81ae024fa";
1920 md5 = "5549538d84b8eede6b254cd81ae024fa";
1830 };
1921 };
1831 meta = {
1922 meta = {
1832 license = [ pkgs.lib.licenses.gpl2 ];
1923 license = [ pkgs.lib.licenses.gpl2 ];
1833 };
1924 };
1834 };
1925 };
1835 translationstring = super.buildPythonPackage {
1926 translationstring = super.buildPythonPackage {
1836 name = "translationstring-1.3";
1927 name = "translationstring-1.3";
1837 buildInputs = with self; [];
1928 buildInputs = with self; [];
1838 doCheck = false;
1929 doCheck = false;
1839 propagatedBuildInputs = with self; [];
1930 propagatedBuildInputs = with self; [];
1840 src = fetchurl {
1931 src = fetchurl {
1841 url = "https://pypi.python.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
1932 url = "https://pypi.python.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
1842 md5 = "a4b62e0f3c189c783a1685b3027f7c90";
1933 md5 = "a4b62e0f3c189c783a1685b3027f7c90";
1843 };
1934 };
1844 meta = {
1935 meta = {
1845 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
1936 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
1846 };
1937 };
1847 };
1938 };
1848 trollius = super.buildPythonPackage {
1939 trollius = super.buildPythonPackage {
1849 name = "trollius-1.0.4";
1940 name = "trollius-1.0.4";
1850 buildInputs = with self; [];
1941 buildInputs = with self; [];
1851 doCheck = false;
1942 doCheck = false;
1852 propagatedBuildInputs = with self; [futures];
1943 propagatedBuildInputs = with self; [futures];
1853 src = fetchurl {
1944 src = fetchurl {
1854 url = "https://pypi.python.org/packages/aa/e6/4141db437f55e6ee7a3fb69663239e3fde7841a811b4bef293145ad6c836/trollius-1.0.4.tar.gz";
1945 url = "https://pypi.python.org/packages/aa/e6/4141db437f55e6ee7a3fb69663239e3fde7841a811b4bef293145ad6c836/trollius-1.0.4.tar.gz";
1855 md5 = "3631a464d49d0cbfd30ab2918ef2b783";
1946 md5 = "3631a464d49d0cbfd30ab2918ef2b783";
1856 };
1947 };
1857 meta = {
1948 meta = {
1858 license = [ pkgs.lib.licenses.asl20 ];
1949 license = [ pkgs.lib.licenses.asl20 ];
1859 };
1950 };
1860 };
1951 };
1861 uWSGI = super.buildPythonPackage {
1952 uWSGI = super.buildPythonPackage {
1862 name = "uWSGI-2.0.11.2";
1953 name = "uWSGI-2.0.15";
1863 buildInputs = with self; [];
1954 buildInputs = with self; [];
1864 doCheck = false;
1955 doCheck = false;
1865 propagatedBuildInputs = with self; [];
1956 propagatedBuildInputs = with self; [];
1866 src = fetchurl {
1957 src = fetchurl {
1867 url = "https://pypi.python.org/packages/9b/78/918db0cfab0546afa580c1e565209c49aaf1476bbfe491314eadbe47c556/uwsgi-2.0.11.2.tar.gz";
1958 url = "https://pypi.python.org/packages/bb/0a/45e5aa80dc135889594bb371c082d20fb7ee7303b174874c996888cc8511/uwsgi-2.0.15.tar.gz";
1868 md5 = "1f02dcbee7f6f61de4b1fd68350cf16f";
1959 md5 = "fc50bd9e83b7602fa474b032167010a7";
1869 };
1960 };
1870 meta = {
1961 meta = {
1871 license = [ pkgs.lib.licenses.gpl2 ];
1962 license = [ pkgs.lib.licenses.gpl2 ];
1872 };
1963 };
1873 };
1964 };
1874 urllib3 = super.buildPythonPackage {
1965 urllib3 = super.buildPythonPackage {
1875 name = "urllib3-1.16";
1966 name = "urllib3-1.16";
1876 buildInputs = with self; [];
1967 buildInputs = with self; [];
1877 doCheck = false;
1968 doCheck = false;
1878 propagatedBuildInputs = with self; [];
1969 propagatedBuildInputs = with self; [];
1879 src = fetchurl {
1970 src = fetchurl {
1880 url = "https://pypi.python.org/packages/3b/f0/e763169124e3f5db0926bc3dbfcd580a105f9ca44cf5d8e6c7a803c9f6b5/urllib3-1.16.tar.gz";
1971 url = "https://pypi.python.org/packages/3b/f0/e763169124e3f5db0926bc3dbfcd580a105f9ca44cf5d8e6c7a803c9f6b5/urllib3-1.16.tar.gz";
1881 md5 = "fcaab1c5385c57deeb7053d3d7d81d59";
1972 md5 = "fcaab1c5385c57deeb7053d3d7d81d59";
1882 };
1973 };
1883 meta = {
1974 meta = {
1884 license = [ pkgs.lib.licenses.mit ];
1975 license = [ pkgs.lib.licenses.mit ];
1885 };
1976 };
1886 };
1977 };
1887 venusian = super.buildPythonPackage {
1978 venusian = super.buildPythonPackage {
1888 name = "venusian-1.0";
1979 name = "venusian-1.1.0";
1889 buildInputs = with self; [];
1980 buildInputs = with self; [];
1890 doCheck = false;
1981 doCheck = false;
1891 propagatedBuildInputs = with self; [];
1982 propagatedBuildInputs = with self; [];
1892 src = fetchurl {
1983 src = fetchurl {
1893 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
1984 url = "https://pypi.python.org/packages/38/24/b4b470ab9e0a2e2e9b9030c7735828c8934b4c6b45befd1bb713ec2aeb2d/venusian-1.1.0.tar.gz";
1894 md5 = "dccf2eafb7113759d60c86faf5538756";
1985 md5 = "56bc5e6756e4bda37bcdb94f74a72b8f";
1895 };
1986 };
1896 meta = {
1987 meta = {
1897 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1988 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1898 };
1989 };
1899 };
1990 };
1900 waitress = super.buildPythonPackage {
1991 waitress = super.buildPythonPackage {
1901 name = "waitress-1.0.1";
1992 name = "waitress-1.0.2";
1902 buildInputs = with self; [];
1993 buildInputs = with self; [];
1903 doCheck = false;
1994 doCheck = false;
1904 propagatedBuildInputs = with self; [];
1995 propagatedBuildInputs = with self; [];
1905 src = fetchurl {
1996 src = fetchurl {
1906 url = "https://pypi.python.org/packages/78/7d/84d11b96c3f60164dec3bef4a859a03aeae0231aa93f57fbe0d05fa4ff36/waitress-1.0.1.tar.gz";
1997 url = "https://pypi.python.org/packages/cd/f4/400d00863afa1e03618e31fd7e2092479a71b8c9718b00eb1eeb603746c6/waitress-1.0.2.tar.gz";
1907 md5 = "dda92358a7569669086155923a46e57c";
1998 md5 = "b968f39e95d609f6194c6e50425d4bb7";
1908 };
1999 };
1909 meta = {
2000 meta = {
1910 license = [ pkgs.lib.licenses.zpt21 ];
2001 license = [ pkgs.lib.licenses.zpt21 ];
1911 };
2002 };
1912 };
2003 };
1913 wcwidth = super.buildPythonPackage {
2004 wcwidth = super.buildPythonPackage {
1914 name = "wcwidth-0.1.7";
2005 name = "wcwidth-0.1.7";
1915 buildInputs = with self; [];
2006 buildInputs = with self; [];
1916 doCheck = false;
2007 doCheck = false;
1917 propagatedBuildInputs = with self; [];
2008 propagatedBuildInputs = with self; [];
1918 src = fetchurl {
2009 src = fetchurl {
1919 url = "https://pypi.python.org/packages/55/11/e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495/wcwidth-0.1.7.tar.gz";
2010 url = "https://pypi.python.org/packages/55/11/e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495/wcwidth-0.1.7.tar.gz";
1920 md5 = "b3b6a0a08f0c8a34d1de8cf44150a4ad";
2011 md5 = "b3b6a0a08f0c8a34d1de8cf44150a4ad";
1921 };
2012 };
1922 meta = {
2013 meta = {
1923 license = [ pkgs.lib.licenses.mit ];
2014 license = [ pkgs.lib.licenses.mit ];
1924 };
2015 };
1925 };
2016 };
1926 ws4py = super.buildPythonPackage {
2017 ws4py = super.buildPythonPackage {
1927 name = "ws4py-0.3.5";
2018 name = "ws4py-0.3.5";
1928 buildInputs = with self; [];
2019 buildInputs = with self; [];
1929 doCheck = false;
2020 doCheck = false;
1930 propagatedBuildInputs = with self; [];
2021 propagatedBuildInputs = with self; [];
1931 src = fetchurl {
2022 src = fetchurl {
1932 url = "https://pypi.python.org/packages/b6/4f/34af703be86939629479e74d6e650e39f3bd73b3b09212c34e5125764cbc/ws4py-0.3.5.zip";
2023 url = "https://pypi.python.org/packages/b6/4f/34af703be86939629479e74d6e650e39f3bd73b3b09212c34e5125764cbc/ws4py-0.3.5.zip";
1933 md5 = "a261b75c20b980e55ce7451a3576a867";
2024 md5 = "a261b75c20b980e55ce7451a3576a867";
1934 };
2025 };
1935 meta = {
2026 meta = {
1936 license = [ pkgs.lib.licenses.bsdOriginal ];
2027 license = [ pkgs.lib.licenses.bsdOriginal ];
1937 };
2028 };
1938 };
2029 };
1939 wsgiref = super.buildPythonPackage {
2030 wsgiref = super.buildPythonPackage {
1940 name = "wsgiref-0.1.2";
2031 name = "wsgiref-0.1.2";
1941 buildInputs = with self; [];
2032 buildInputs = with self; [];
1942 doCheck = false;
2033 doCheck = false;
1943 propagatedBuildInputs = with self; [];
2034 propagatedBuildInputs = with self; [];
1944 src = fetchurl {
2035 src = fetchurl {
1945 url = "https://pypi.python.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
2036 url = "https://pypi.python.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
1946 md5 = "29b146e6ebd0f9fb119fe321f7bcf6cb";
2037 md5 = "29b146e6ebd0f9fb119fe321f7bcf6cb";
1947 };
2038 };
1948 meta = {
2039 meta = {
1949 license = [ { fullName = "PSF or ZPL"; } ];
2040 license = [ { fullName = "PSF or ZPL"; } ];
1950 };
2041 };
1951 };
2042 };
1952 zope.cachedescriptors = super.buildPythonPackage {
2043 zope.cachedescriptors = super.buildPythonPackage {
1953 name = "zope.cachedescriptors-4.0.0";
2044 name = "zope.cachedescriptors-4.0.0";
1954 buildInputs = with self; [];
2045 buildInputs = with self; [];
1955 doCheck = false;
2046 doCheck = false;
1956 propagatedBuildInputs = with self; [setuptools];
2047 propagatedBuildInputs = with self; [setuptools];
1957 src = fetchurl {
2048 src = fetchurl {
1958 url = "https://pypi.python.org/packages/40/33/694b6644c37f28553f4b9f20b3c3a20fb709a22574dff20b5bdffb09ecd5/zope.cachedescriptors-4.0.0.tar.gz";
2049 url = "https://pypi.python.org/packages/40/33/694b6644c37f28553f4b9f20b3c3a20fb709a22574dff20b5bdffb09ecd5/zope.cachedescriptors-4.0.0.tar.gz";
1959 md5 = "8d308de8c936792c8e758058fcb7d0f0";
2050 md5 = "8d308de8c936792c8e758058fcb7d0f0";
1960 };
2051 };
1961 meta = {
2052 meta = {
1962 license = [ pkgs.lib.licenses.zpt21 ];
2053 license = [ pkgs.lib.licenses.zpt21 ];
1963 };
2054 };
1964 };
2055 };
1965 zope.deprecation = super.buildPythonPackage {
2056 zope.deprecation = super.buildPythonPackage {
1966 name = "zope.deprecation-4.1.2";
2057 name = "zope.deprecation-4.1.2";
1967 buildInputs = with self; [];
2058 buildInputs = with self; [];
1968 doCheck = false;
2059 doCheck = false;
1969 propagatedBuildInputs = with self; [setuptools];
2060 propagatedBuildInputs = with self; [setuptools];
1970 src = fetchurl {
2061 src = fetchurl {
1971 url = "https://pypi.python.org/packages/c1/d3/3919492d5e57d8dd01b36f30b34fc8404a30577392b1eb817c303499ad20/zope.deprecation-4.1.2.tar.gz";
2062 url = "https://pypi.python.org/packages/c1/d3/3919492d5e57d8dd01b36f30b34fc8404a30577392b1eb817c303499ad20/zope.deprecation-4.1.2.tar.gz";
1972 md5 = "e9a663ded58f4f9f7881beb56cae2782";
2063 md5 = "e9a663ded58f4f9f7881beb56cae2782";
1973 };
2064 };
1974 meta = {
2065 meta = {
1975 license = [ pkgs.lib.licenses.zpt21 ];
2066 license = [ pkgs.lib.licenses.zpt21 ];
1976 };
2067 };
1977 };
2068 };
1978 zope.event = super.buildPythonPackage {
2069 zope.event = super.buildPythonPackage {
1979 name = "zope.event-4.0.3";
2070 name = "zope.event-4.0.3";
1980 buildInputs = with self; [];
2071 buildInputs = with self; [];
1981 doCheck = false;
2072 doCheck = false;
1982 propagatedBuildInputs = with self; [setuptools];
2073 propagatedBuildInputs = with self; [setuptools];
1983 src = fetchurl {
2074 src = fetchurl {
1984 url = "https://pypi.python.org/packages/c1/29/91ba884d7d6d96691df592e9e9c2bfa57a47040ec1ff47eff18c85137152/zope.event-4.0.3.tar.gz";
2075 url = "https://pypi.python.org/packages/c1/29/91ba884d7d6d96691df592e9e9c2bfa57a47040ec1ff47eff18c85137152/zope.event-4.0.3.tar.gz";
1985 md5 = "9a3780916332b18b8b85f522bcc3e249";
2076 md5 = "9a3780916332b18b8b85f522bcc3e249";
1986 };
2077 };
1987 meta = {
2078 meta = {
1988 license = [ pkgs.lib.licenses.zpt21 ];
2079 license = [ pkgs.lib.licenses.zpt21 ];
1989 };
2080 };
1990 };
2081 };
1991 zope.interface = super.buildPythonPackage {
2082 zope.interface = super.buildPythonPackage {
1992 name = "zope.interface-4.1.3";
2083 name = "zope.interface-4.1.3";
1993 buildInputs = with self; [];
2084 buildInputs = with self; [];
1994 doCheck = false;
2085 doCheck = false;
1995 propagatedBuildInputs = with self; [setuptools];
2086 propagatedBuildInputs = with self; [setuptools];
1996 src = fetchurl {
2087 src = fetchurl {
1997 url = "https://pypi.python.org/packages/9d/81/2509ca3c6f59080123c1a8a97125eb48414022618cec0e64eb1313727bfe/zope.interface-4.1.3.tar.gz";
2088 url = "https://pypi.python.org/packages/9d/81/2509ca3c6f59080123c1a8a97125eb48414022618cec0e64eb1313727bfe/zope.interface-4.1.3.tar.gz";
1998 md5 = "9ae3d24c0c7415deb249dd1a132f0f79";
2089 md5 = "9ae3d24c0c7415deb249dd1a132f0f79";
1999 };
2090 };
2000 meta = {
2091 meta = {
2001 license = [ pkgs.lib.licenses.zpt21 ];
2092 license = [ pkgs.lib.licenses.zpt21 ];
2002 };
2093 };
2003 };
2094 };
2004
2095
2005 ### Test requirements
2096 ### Test requirements
2006
2097
2007
2098
2008 }
2099 }
@@ -1,11 +1,15 b''
1 [pytest]
1 [pytest]
2 testpaths = ./rhodecode
2 testpaths = ./rhodecode
3 pylons_config = rhodecode/tests/rhodecode.ini
3 pylons_config = rhodecode/tests/rhodecode.ini
4 vcsserver_protocol = http
4 vcsserver_protocol = http
5 vcsserver_config_http = rhodecode/tests/vcsserver_http.ini
5 vcsserver_config_http = rhodecode/tests/vcsserver_http.ini
6 norecursedirs = tests/scripts
6 norecursedirs = tests/scripts
7 addopts = -k "not _BaseTest"
7
8 addopts =
9 -k "not _BaseTest"
10 --pdbcls=IPython.terminal.debugger:TerminalPdb
11
8 markers =
12 markers =
9 vcs_operations: Mark tests depending on a running RhodeCode instance.
13 vcs_operations: Mark tests depending on a running RhodeCode instance.
10 xfail_backends: Mark tests as xfail for given backends.
14 xfail_backends: Mark tests as xfail for given backends.
11 skip_backends: Mark tests as skipped for given backends.
15 skip_backends: Mark tests as skipped for given backends.
@@ -1,232 +1,232 b''
1 #
1 #
2 # About
2 # About
3 # =====
3 # =====
4 #
4 #
5 # This file defines jobs for our CI system and the attribute "build" is used
5 # This file defines jobs for our CI system and the attribute "build" is used
6 # as the input for packaging.
6 # as the input for packaging.
7 #
7 #
8 #
8 #
9 # CI details
9 # CI details
10 # ==========
10 # ==========
11 #
11 #
12 # This file defines an attribute set of derivations. Each of these attributes is
12 # This file defines an attribute set of derivations. Each of these attributes is
13 # then used in our CI system as one job to run. This way we keep the
13 # then used in our CI system as one job to run. This way we keep the
14 # configuration for the CI jobs as well under version control.
14 # configuration for the CI jobs as well under version control.
15 #
15 #
16 # Run CI jobs locally
16 # Run CI jobs locally
17 # -------------------
17 # -------------------
18 #
18 #
19 # Since it is all based on normal Nix derivations, the jobs can be tested
19 # Since it is all based on normal Nix derivations, the jobs can be tested
20 # locally with a run of "nix-build" like the following example:
20 # locally with a run of "nix-build" like the following example:
21 #
21 #
22 # nix-build release.nix -A test-api -I vcsserver=~/rhodecode-vcsserver
22 # nix-build release.nix -A test-api -I vcsserver=~/rhodecode-vcsserver
23 #
23 #
24 # Note: Replace "~/rhodecode-vcsserver" with a path where a clone of the
24 # Note: Replace "~/rhodecode-vcsserver" with a path where a clone of the
25 # vcsserver resides.
25 # vcsserver resides.
26
26
27 { pkgs ? import <nixpkgs> {}
27 { pkgs ? import <nixpkgs> {}
28 , doCheck ? true
28 , doCheck ? true
29 }:
29 }:
30
30
31 let
31 let
32
32
33 inherit (pkgs)
33 inherit (pkgs)
34 stdenv
34 stdenv
35 system;
35 system;
36
36
37 testing = import <nixpkgs/nixos/lib/testing.nix> {
37 testing = import <nixpkgs/nixos/lib/testing.nix> {
38 inherit system;
38 inherit system;
39 };
39 };
40
40
41 runInMachine = testing.runInMachine;
41 runInMachine = testing.runInMachine;
42
42
43 sphinx = import ./docs/default.nix {};
43 sphinx = import ./docs/default.nix {};
44
44
45 mkDocs = kind: stdenv.mkDerivation {
45 mkDocs = kind: stdenv.mkDerivation {
46 name = kind;
46 name = kind;
47 srcs = [
47 srcs = [
48 (./. + (builtins.toPath "/${kind}"))
48 (./. + (builtins.toPath "/${kind}"))
49 (builtins.filterSource
49 (builtins.filterSource
50 (path: type: baseNameOf path == "VERSION")
50 (path: type: baseNameOf path == "VERSION")
51 ./rhodecode)
51 ./rhodecode)
52 ];
52 ];
53 sourceRoot = kind;
53 sourceRoot = kind;
54 buildInputs = [ sphinx ];
54 buildInputs = [ sphinx ];
55 configurePhase = null;
55 configurePhase = null;
56 buildPhase = ''
56 buildPhase = ''
57 make SPHINXBUILD=sphinx-build html
57 make SPHINXBUILD=sphinx-build html
58 '';
58 '';
59 installPhase = ''
59 installPhase = ''
60 mkdir -p $out
60 mkdir -p $out
61 mv _build/html $out/
61 mv _build/html $out/
62
62
63 mkdir -p $out/nix-support
63 mkdir -p $out/nix-support
64 echo "doc manual $out/html index.html" >> \
64 echo "doc manual $out/html index.html" >> \
65 "$out/nix-support/hydra-build-products"
65 "$out/nix-support/hydra-build-products"
66 '';
66 '';
67 };
67 };
68
68
69 enterprise = import ./default.nix {
69 enterprise = import ./default.nix {
70 inherit
70 inherit
71 pkgs;
71 pkgs;
72
72
73 # TODO: for quick local testing
73 # TODO: for quick local testing
74 doCheck = false;
74 doCheck = false;
75 };
75 };
76
76
77 test-cfg = stdenv.mkDerivation {
77 test-cfg = stdenv.mkDerivation {
78 name = "test-cfg";
78 name = "test-cfg";
79 unpackPhase = "true";
79 unpackPhase = "true";
80 buildInputs = [
80 buildInputs = [
81 enterprise.src
81 enterprise.src
82 ];
82 ];
83 installPhase = ''
83 installPhase = ''
84 mkdir -p $out/etc
84 mkdir -p $out/etc
85 cp ${enterprise.src}/test.ini $out/etc/enterprise.ini
85 cp ${enterprise.src}/test.ini $out/etc/enterprise.ini
86 # TODO: johbo: Needed, so that the login works, this causes
86 # TODO: johbo: Needed, so that the login works, this causes
87 # probably some side effects
87 # probably some side effects
88 substituteInPlace $out/etc/enterprise.ini --replace "is_test = True" ""
88 substituteInPlace $out/etc/enterprise.ini --replace "is_test = True" ""
89
89
90 # Gevent configuration
90 # Gevent configuration
91 cp $out/etc/enterprise.ini $out/etc/enterprise-gevent.ini;
91 cp $out/etc/enterprise.ini $out/etc/enterprise-gevent.ini;
92 cat >> $out/etc/enterprise-gevent.ini <<EOF
92 cat >> $out/etc/enterprise-gevent.ini <<EOF
93
93
94 [server:main]
94 [server:main]
95 use = egg:gunicorn#main
95 use = egg:gunicorn#main
96 worker_class = gevent
96 worker_class = gevent
97 EOF
97 EOF
98
98
99 cp ${enterprise.src}/vcsserver/test.ini $out/etc/vcsserver.ini
99 cp ${enterprise.src}/vcsserver/test.ini $out/etc/vcsserver.ini
100 '';
100 '';
101 };
101 };
102
102
103 ac-test-drv = import ./acceptance_tests {
103 ac-test-drv = import ./acceptance_tests {
104 withExternals = false;
104 withExternals = false;
105 };
105 };
106
106
107 # TODO: johbo: Currently abusing buildPythonPackage to make the
107 # TODO: johbo: Currently abusing buildPythonPackage to make the
108 # needed environment for the ac-test tools.
108 # needed environment for the ac-test tools.
109 mkAcTests = {
109 mkAcTests = {
110 # Path to an INI file which will be used to run Enterprise.
110 # Path to an INI file which will be used to run Enterprise.
111 #
111 #
112 # Intended usage is to provide different configuration files to
112 # Intended usage is to provide different configuration files to
113 # run the tests against a different configuration.
113 # run the tests against a different configuration.
114 enterpriseCfg ? "${test-cfg}/etc/enterprise.ini"
114 enterpriseCfg ? "${test-cfg}/etc/enterprise.ini"
115
115
116 # Path to an INI file which will be used to run the VCSServer.
116 # Path to an INI file which will be used to run the VCSServer.
117 , vcsserverCfg ? "${test-cfg}/etc/vcsserver.ini"
117 , vcsserverCfg ? "${test-cfg}/etc/vcsserver.ini"
118 }: pkgs.pythonPackages.buildPythonPackage {
118 }: pkgs.pythonPackages.buildPythonPackage {
119 name = "enterprise-ac-tests";
119 name = "enterprise-ac-tests";
120 src = ./acceptance_tests;
120 src = ./acceptance_tests;
121
121
122 buildInputs = with pkgs; [
122 buildInputs = with pkgs; [
123 curl
123 curl
124 enterprise
124 enterprise
125 ac-test-drv
125 ac-test-drv
126 ];
126 ];
127
127
128 buildPhase = ''
128 buildPhase = ''
129 cp ${enterpriseCfg} enterprise.ini
129 cp ${enterpriseCfg} enterprise.ini
130
130
131 echo "Creating a fake home directory"
131 echo "Creating a fake home directory"
132 mkdir fake-home
132 mkdir fake-home
133 export HOME=$PWD/fake-home
133 export HOME=$PWD/fake-home
134
134
135 echo "Creating a repository directory"
135 echo "Creating a repository directory"
136 mkdir repos
136 mkdir repos
137
137
138 echo "Preparing the database"
138 echo "Preparing the database"
139 paster setup-rhodecode \
139 paster setup-rhodecode \
140 --user=admin \
140 --user=admin \
141 --email=admin@example.com \
141 --email=admin@example.com \
142 --password=secret \
142 --password=secret \
143 --api-key=9999999999999999999999999999999999999999 \
143 --api-key=9999999999999999999999999999999999999999 \
144 --force-yes \
144 --force-yes \
145 --repos=$PWD/repos \
145 --repos=$PWD/repos \
146 enterprise.ini > /dev/null
146 enterprise.ini > /dev/null
147
147
148 echo "Starting rcserver"
148 echo "Starting rc-server"
149 vcsserver --config ${vcsserverCfg} >vcsserver.log 2>&1 &
149 vcsserver --config ${vcsserverCfg} >vcsserver.log 2>&1 &
150 rcserver enterprise.ini >rcserver.log 2>&1 &
150 rc-server enterprise.ini >rc-server.log 2>&1 &
151
151
152 while ! curl -f -s http://localhost:5000 > /dev/null
152 while ! curl -f -s http://localhost:5000 > /dev/null
153 do
153 do
154 echo "Waiting for server to be ready..."
154 echo "Waiting for server to be ready..."
155 sleep 3
155 sleep 3
156 done
156 done
157 echo "Webserver is ready."
157 echo "Webserver is ready."
158
158
159 echo "Starting the test run"
159 echo "Starting the test run"
160 py.test -c example.ini -vs --maxfail=5 tests
160 py.test -c example.ini -vs --maxfail=5 tests
161
161
162 echo "Kill rcserver"
162 echo "Kill rc-server"
163 kill %2
163 kill %2
164 kill %1
164 kill %1
165 '';
165 '';
166
166
167 # TODO: johbo: Use the install phase again once the normal mkDerivation
167 # TODO: johbo: Use the install phase again once the normal mkDerivation
168 # can be used again.
168 # can be used again.
169 postInstall = ''
169 postInstall = ''
170 mkdir -p $out
170 mkdir -p $out
171 cp enterprise.ini $out
171 cp enterprise.ini $out
172 cp ${vcsserverCfg} $out/vcsserver.ini
172 cp ${vcsserverCfg} $out/vcsserver.ini
173 cp rcserver.log $out
173 cp rc-server.log $out
174 cp vcsserver.log $out
174 cp vcsserver.log $out
175
175
176 mkdir -p $out/nix-support
176 mkdir -p $out/nix-support
177 echo "report config $out enterprise.ini" >> $out/nix-support/hydra-build-products
177 echo "report config $out enterprise.ini" >> $out/nix-support/hydra-build-products
178 echo "report config $out vcsserver.ini" >> $out/nix-support/hydra-build-products
178 echo "report config $out vcsserver.ini" >> $out/nix-support/hydra-build-products
179 echo "report rcserver $out rcserver.log" >> $out/nix-support/hydra-build-products
179 echo "report rc-server $out rc-server.log" >> $out/nix-support/hydra-build-products
180 echo "report vcsserver $out vcsserver.log" >> $out/nix-support/hydra-build-products
180 echo "report vcsserver $out vcsserver.log" >> $out/nix-support/hydra-build-products
181 '';
181 '';
182 };
182 };
183
183
184 vcsserver = import <vcsserver> {
184 vcsserver = import <vcsserver> {
185 inherit pkgs;
185 inherit pkgs;
186
186
187 # TODO: johbo: Think of a more elegant solution to this problem
187 # TODO: johbo: Think of a more elegant solution to this problem
188 pythonExternalOverrides = self: super: (enterprise.myPythonPackagesUnfix self);
188 pythonExternalOverrides = self: super: (enterprise.myPythonPackagesUnfix self);
189 };
189 };
190
190
191 runTests = optionString: (enterprise.override (attrs: {
191 runTests = optionString: (enterprise.override (attrs: {
192 doCheck = true;
192 doCheck = true;
193 name = "test-run";
193 name = "test-run";
194 buildInputs = attrs.buildInputs ++ [
194 buildInputs = attrs.buildInputs ++ [
195 vcsserver
195 vcsserver
196 ];
196 ];
197 checkPhase = ''
197 checkPhase = ''
198 py.test ${optionString} -vv -ra
198 py.test ${optionString} -vv -ra
199 '';
199 '';
200 buildPhase = attrs.shellHook;
200 buildPhase = attrs.shellHook;
201 installPhase = ''
201 installPhase = ''
202 echo "Intentionally not installing anything"
202 echo "Intentionally not installing anything"
203 '';
203 '';
204 meta.description = "Enterprise test run ${optionString}";
204 meta.description = "Enterprise test run ${optionString}";
205 }));
205 }));
206
206
207 jobs = {
207 jobs = {
208
208
209 build = enterprise;
209 build = enterprise;
210
210
211 # johbo: Currently this is simply running the tests against the sources. Nicer
211 # johbo: Currently this is simply running the tests against the sources. Nicer
212 # would be to run xdist and against the installed application, so that we also
212 # would be to run xdist and against the installed application, so that we also
213 # cover the impact of installing the application.
213 # cover the impact of installing the application.
214 test-api = runTests "rhodecode/api";
214 test-api = runTests "rhodecode/api";
215 test-functional = runTests "rhodecode/tests/functional";
215 test-functional = runTests "rhodecode/tests/functional";
216 test-rest = runTests "rhodecode/tests --ignore=rhodecode/tests/functional";
216 test-rest = runTests "rhodecode/tests --ignore=rhodecode/tests/functional";
217 test-full = runTests "rhodecode";
217 test-full = runTests "rhodecode";
218
218
219 docs = mkDocs "docs";
219 docs = mkDocs "docs";
220
220
221 aggregate = pkgs.releaseTools.aggregate {
221 aggregate = pkgs.releaseTools.aggregate {
222 name = "aggregated-jobs";
222 name = "aggregated-jobs";
223 constituents = [
223 constituents = [
224 jobs.build
224 jobs.build
225 jobs.test-api
225 jobs.test-api
226 jobs.test-rest
226 jobs.test-rest
227 jobs.docs
227 jobs.docs
228 ];
228 ];
229 };
229 };
230 };
230 };
231
231
232 in jobs
232 in jobs
@@ -1,136 +1,138 b''
1 ## core
1 ## core
2 setuptools==30.1.0
2 setuptools==30.1.0
3 setuptools-scm==1.15.0
3 setuptools-scm==1.15.0
4
4
5 amqplib==1.0.2
5 amqplib==1.0.2
6 anyjson==0.3.3
6 anyjson==0.3.3
7 authomatic==0.1.0.post1
7 authomatic==0.1.0.post1
8 Babel==1.3
8 Babel==1.3
9 backport-ipaddress==0.1
9 Beaker==1.9.0
10 Beaker==1.7.0
11 celery==2.2.10
10 celery==2.2.10
12 Chameleon==2.24
11 Chameleon==2.24
13 channelstream==0.5.2
12 channelstream==0.5.2
14 click==5.1
13 click==5.1
15 colander==1.2
14 colander==1.3.3
16 configobj==5.0.6
15 configobj==5.0.6
17 cssselect==1.0.1
16 cssselect==1.0.1
18 decorator==4.0.11
17 decorator==4.0.11
19 deform==2.0.4
18 deform==2.0.4
20 docutils==0.12
19 docutils==0.13.1
21 dogpile.cache==0.6.1
20 dogpile.cache==0.6.4
22 dogpile.core==0.4.1
21 dogpile.core==0.4.1
23 ecdsa==0.11
22 ecdsa==0.13
24 FormEncode==1.2.4
23 FormEncode==1.2.4
25 future==0.14.3
24 future==0.14.3
26 futures==3.0.2
25 futures==3.0.2
27 gnureadline==6.3.3
26 gnureadline==6.3.3
28 infrae.cache==1.0.1
27 infrae.cache==1.0.1
29 iso8601==0.1.11
28 iso8601==0.1.11
30 itsdangerous==0.24
29 itsdangerous==0.24
31 Jinja2==2.7.3
30 Jinja2==2.7.3
32 kombu==1.5.1
31 kombu==1.5.1
33 lxml==3.7.3
32 lxml==3.7.3
34 Mako==1.0.6
33 Mako==1.0.7
35 Markdown==2.6.7
34 Markdown==2.6.8
36 MarkupSafe==0.23
35 MarkupSafe==0.23
37 meld3==1.0.2
36 meld3==1.0.2
38 msgpack-python==0.4.8
37 msgpack-python==0.4.8
39 MySQL-python==1.2.5
38 MySQL-python==1.2.5
40 nose==1.3.6
39 nose==1.3.6
41 objgraph==3.1.0
40 objgraph==3.1.0
42 packaging==15.2
41 packaging==15.2
43 paramiko==1.15.1
44 Paste==2.0.3
42 Paste==2.0.3
45 PasteDeploy==1.5.2
43 PasteDeploy==1.5.2
46 PasteScript==1.7.5
44 PasteScript==1.7.5
47 pathlib2==2.1.0
45 pathlib2==2.3.0
46 peppercorn==0.5
48 psutil==4.3.1
47 psutil==4.3.1
49 psycopg2==2.6.1
48 psycopg2==2.7.1
50 py-bcrypt==0.4
49 py-bcrypt==0.4
51 pycrypto==2.6.1
50 pycrypto==2.6.1
52 pycurl==7.19.5
51 pycurl==7.19.5
53 pyflakes==0.8.1
52 pyflakes==0.8.1
54 pygments-markdown-lexer==0.1.0.dev39
53 pygments-markdown-lexer==0.1.0.dev39
55 Pygments==2.2.0
54 Pygments==2.2.0
56 pyparsing==1.5.7
55 pyparsing==1.5.7
57 pyramid-beaker==0.8
56 pyramid-beaker==0.8
58 pyramid-debugtoolbar==3.0.5
57 pyramid-debugtoolbar==4.2.1
59 pyramid-jinja2==2.5
58 pyramid-jinja2==2.5
60 pyramid-mako==1.0.2
59 pyramid-mako==1.0.2
61 pyramid==1.7.4
60 pyramid==1.9.1
62 pysqlite==2.6.3
61 pysqlite==2.8.3
63 python-dateutil==2.1
62 python-dateutil==2.1
64 python-ldap==2.4.19
63 python-ldap==2.4.40
65 python-memcached==1.57
64 python-memcached==1.58
66 python-pam==1.8.2
65 python-pam==1.8.2
67 pytz==2015.4
66 pytz==2015.4
68 pyzmq==14.6.0
67 pyzmq==14.6.0
69 recaptcha-client==1.0.6
68 recaptcha-client==1.0.6
69 redis==2.10.6
70 repoze.lru==0.6
70 repoze.lru==0.6
71 requests==2.9.1
71 requests==2.9.1
72 Routes==1.13
72 Routes==1.13
73 setproctitle==1.1.8
73 setproctitle==1.1.8
74 simplejson==3.7.2
74 simplejson==3.11.1
75 six==1.9.0
75 six==1.9.0
76 Sphinx==1.2.2
76 Sphinx==1.2.2
77 SQLAlchemy==0.9.9
77 SQLAlchemy==1.1.11
78 subprocess32==3.2.6
78 sshpubkeys==2.2.0
79 supervisor==3.3.1
79 subprocess32==3.2.7
80 supervisor==3.3.3
80 Tempita==0.5.2
81 Tempita==0.5.2
81 translationstring==1.3
82 translationstring==1.3
82 trollius==1.0.4
83 trollius==1.0.4
83 urllib3==1.16
84 urllib3==1.16
84 URLObject==2.4.0
85 URLObject==2.4.0
85 venusian==1.0
86 venusian==1.1.0
86 WebError==0.10.3
87 WebError==0.10.3
87 WebHelpers2==2.0
88 WebHelpers2==2.0
88 WebHelpers==1.3
89 WebHelpers==1.3
89 WebOb==1.3.1
90 WebOb==1.7.3
90 Whoosh==2.7.4
91 Whoosh==2.7.4
91 wsgiref==0.1.2
92 wsgiref==0.1.2
92 zope.cachedescriptors==4.0.0
93 zope.cachedescriptors==4.0.0
93 zope.deprecation==4.1.2
94 zope.deprecation==4.1.2
94 zope.event==4.0.3
95 zope.event==4.0.3
95 zope.interface==4.1.3
96 zope.interface==4.1.3
96
97
97 ## customized/patched libs
98 ## customized/patched libs
98 # our patched version of Pylons==1.0.2
99 # our patched version of Pylons==1.0.2
99 https://code.rhodecode.com/upstream/pylons/archive/707354ee4261b9c10450404fc9852ccea4fd667d.tar.gz?md5=f26633726fa2cd3a340316ee6a5d218f#egg=Pylons==1.0.2.rhodecode-patch-1
100 https://code.rhodecode.com/upstream/pylons/archive/707354ee4261b9c10450404fc9852ccea4fd667d.tar.gz?md5=f26633726fa2cd3a340316ee6a5d218f#egg=Pylons==1.0.2.rhodecode-patch-1
100 # not released py-gfm==0.1.3
101 # not released py-gfm==0.1.3
101 https://code.rhodecode.com/upstream/py-gfm/archive/0d66a19bc16e3d49de273c0f797d4e4781e8c0f2.tar.gz?md5=0d0d5385bfb629eea636a80b9c2bfd16#egg=py-gfm==0.1.3.rhodecode-upstream1
102 https://code.rhodecode.com/upstream/py-gfm/archive/0d66a19bc16e3d49de273c0f797d4e4781e8c0f2.tar.gz?md5=0d0d5385bfb629eea636a80b9c2bfd16#egg=py-gfm==0.1.3.rhodecode-upstream1
102
103
103 # IPYTHON RENDERING
104 # IPYTHON RENDERING
104 # entrypoints backport, pypi version doesn't support egg installs
105 # entrypoints backport, pypi version doesn't support egg installs
105 https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313#egg=entrypoints==0.2.2.rhodecode-upstream1
106 https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313#egg=entrypoints==0.2.2.rhodecode-upstream1
106 nbconvert==5.1.1
107 nbconvert==5.1.1
108 bleach==1.5.0
107 nbformat==4.3.0
109 nbformat==4.3.0
108 jupyter_client==5.0.0
110 jupyter_client==5.0.0
109
111
110 ## cli tools
112 ## cli tools
111 alembic==0.8.4
113 alembic==0.9.2
112 invoke==0.13.0
114 invoke==0.13.0
113 bumpversion==0.5.3
115 bumpversion==0.5.3
114 transifex-client==0.10
116 transifex-client==0.10
115
117
116 ## http servers
118 ## http servers
117 gevent==1.1.2
119 gevent==1.2.2
118 greenlet==0.4.10
120 greenlet==0.4.12
119 gunicorn==19.6.0
121 gunicorn==19.7.1
120 waitress==1.0.1
122 waitress==1.0.2
121 uWSGI==2.0.11.2
123 uWSGI==2.0.15
122
124
123 ## debug
125 ## debug
124 ipdb==0.10.1
126 ipdb==0.10.3
125 ipython==5.1.0
127 ipython==5.1.0
126 CProfileV==1.0.6
128 CProfileV==1.0.7
127 bottle==0.12.8
129 bottle==0.12.8
128
130
129 ## rhodecode-tools, special case
131 ## rhodecode-tools, special case
130 https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.12.0.tar.gz?md5=9ca040356fa7e38d3f64529a4cffdca4#egg=rhodecode-tools==0.12.0
132 https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.13.0.tar.gz?md5=f937b0cb34d0779103895a5ec5689ee4#egg=rhodecode-tools==0.13.0
131
133
132 ## appenlight
134 ## appenlight
133 appenlight-client==0.6.14
135 appenlight-client==0.6.21
134
136
135 ## test related requirements
137 ## test related requirements
136 -r requirements_test.txt
138 -r requirements_test.txt
@@ -1,15 +1,15 b''
1 # test related requirements
1 # test related requirements
2 pytest==3.0.5
2 pytest==3.1.2
3 py==1.4.31
3 py==1.4.34
4 pytest-cov==2.4.0
4 pytest-cov==2.5.1
5 pytest-sugar==0.7.1
5 pytest-sugar==0.8.0
6 pytest-runner==2.9.0
6 pytest-runner==2.11.1
7 pytest-catchlog==1.2.2
7 pytest-catchlog==1.2.2
8 pytest-profiling==1.2.2
8 pytest-profiling==1.2.6
9 gprof2dot==2016.10.13
9 gprof2dot==2016.10.13
10 pytest-timeout==1.2.0
10 pytest-timeout==1.2.0
11
11
12 mock==1.0.1
12 mock==1.0.1
13 WebTest==1.4.3
13 WebTest==2.0.27
14 cov-core==1.15.0
14 cov-core==1.15.0
15 coverage==3.7.1
15 coverage==3.7.1
@@ -1,1 +1,1 b''
1 4.9.1 No newline at end of file
1 4.10.0 No newline at end of file
@@ -1,63 +1,63 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2017 RhodeCode GmbH
3 # Copyright (C) 2010-2017 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__ = 78 # defines current db version for migrations
54 __dbversion__ = 81 # 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__ = 'https://code.rhodecode.com'
58 __url__ = 'https://code.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
63 disable_error_handler = False
@@ -1,542 +1,542 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2017 RhodeCode GmbH
3 # Copyright (C) 2011-2017 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 inspect
21 import inspect
22 import itertools
22 import itertools
23 import logging
23 import logging
24 import types
24 import types
25 import fnmatch
25 import fnmatch
26
26
27 import decorator
27 import decorator
28 import venusian
28 import venusian
29 from collections import OrderedDict
29 from collections import OrderedDict
30
30
31 from pyramid.exceptions import ConfigurationError
31 from pyramid.exceptions import ConfigurationError
32 from pyramid.renderers import render
32 from pyramid.renderers import render
33 from pyramid.response import Response
33 from pyramid.response import Response
34 from pyramid.httpexceptions import HTTPNotFound
34 from pyramid.httpexceptions import HTTPNotFound
35
35
36 from rhodecode.api.exc import (
36 from rhodecode.api.exc import (
37 JSONRPCBaseError, JSONRPCError, JSONRPCForbidden, JSONRPCValidationError)
37 JSONRPCBaseError, JSONRPCError, JSONRPCForbidden, JSONRPCValidationError)
38 from rhodecode.apps._base import TemplateArgs
38 from rhodecode.apps._base import TemplateArgs
39 from rhodecode.lib.auth import AuthUser
39 from rhodecode.lib.auth import AuthUser
40 from rhodecode.lib.base import get_ip_addr, attach_context_attributes
40 from rhodecode.lib.base import get_ip_addr, attach_context_attributes
41 from rhodecode.lib.ext_json import json
41 from rhodecode.lib.ext_json import json
42 from rhodecode.lib.utils2 import safe_str
42 from rhodecode.lib.utils2 import safe_str
43 from rhodecode.lib.plugins.utils import get_plugin_settings
43 from rhodecode.lib.plugins.utils import get_plugin_settings
44 from rhodecode.model.db import User, UserApiKeys
44 from rhodecode.model.db import User, UserApiKeys
45
45
46 log = logging.getLogger(__name__)
46 log = logging.getLogger(__name__)
47
47
48 DEFAULT_RENDERER = 'jsonrpc_renderer'
48 DEFAULT_RENDERER = 'jsonrpc_renderer'
49 DEFAULT_URL = '/_admin/apiv2'
49 DEFAULT_URL = '/_admin/apiv2'
50
50
51
51
52 def find_methods(jsonrpc_methods, pattern):
52 def find_methods(jsonrpc_methods, pattern):
53 matches = OrderedDict()
53 matches = OrderedDict()
54 if not isinstance(pattern, (list, tuple)):
54 if not isinstance(pattern, (list, tuple)):
55 pattern = [pattern]
55 pattern = [pattern]
56
56
57 for single_pattern in pattern:
57 for single_pattern in pattern:
58 for method_name, method in jsonrpc_methods.items():
58 for method_name, method in jsonrpc_methods.items():
59 if fnmatch.fnmatch(method_name, single_pattern):
59 if fnmatch.fnmatch(method_name, single_pattern):
60 matches[method_name] = method
60 matches[method_name] = method
61 return matches
61 return matches
62
62
63
63
64 class ExtJsonRenderer(object):
64 class ExtJsonRenderer(object):
65 """
65 """
66 Custom renderer that mkaes use of our ext_json lib
66 Custom renderer that mkaes use of our ext_json lib
67
67
68 """
68 """
69
69
70 def __init__(self, serializer=json.dumps, **kw):
70 def __init__(self, serializer=json.dumps, **kw):
71 """ Any keyword arguments will be passed to the ``serializer``
71 """ Any keyword arguments will be passed to the ``serializer``
72 function."""
72 function."""
73 self.serializer = serializer
73 self.serializer = serializer
74 self.kw = kw
74 self.kw = kw
75
75
76 def __call__(self, info):
76 def __call__(self, info):
77 """ Returns a plain JSON-encoded string with content-type
77 """ Returns a plain JSON-encoded string with content-type
78 ``application/json``. The content-type may be overridden by
78 ``application/json``. The content-type may be overridden by
79 setting ``request.response.content_type``."""
79 setting ``request.response.content_type``."""
80
80
81 def _render(value, system):
81 def _render(value, system):
82 request = system.get('request')
82 request = system.get('request')
83 if request is not None:
83 if request is not None:
84 response = request.response
84 response = request.response
85 ct = response.content_type
85 ct = response.content_type
86 if ct == response.default_content_type:
86 if ct == response.default_content_type:
87 response.content_type = 'application/json'
87 response.content_type = 'application/json'
88
88
89 return self.serializer(value, **self.kw)
89 return self.serializer(value, **self.kw)
90
90
91 return _render
91 return _render
92
92
93
93
94 def jsonrpc_response(request, result):
94 def jsonrpc_response(request, result):
95 rpc_id = getattr(request, 'rpc_id', None)
95 rpc_id = getattr(request, 'rpc_id', None)
96 response = request.response
96 response = request.response
97
97
98 # store content_type before render is called
98 # store content_type before render is called
99 ct = response.content_type
99 ct = response.content_type
100
100
101 ret_value = ''
101 ret_value = ''
102 if rpc_id:
102 if rpc_id:
103 ret_value = {
103 ret_value = {
104 'id': rpc_id,
104 'id': rpc_id,
105 'result': result,
105 'result': result,
106 'error': None,
106 'error': None,
107 }
107 }
108
108
109 # fetch deprecation warnings, and store it inside results
109 # fetch deprecation warnings, and store it inside results
110 deprecation = getattr(request, 'rpc_deprecation', None)
110 deprecation = getattr(request, 'rpc_deprecation', None)
111 if deprecation:
111 if deprecation:
112 ret_value['DEPRECATION_WARNING'] = deprecation
112 ret_value['DEPRECATION_WARNING'] = deprecation
113
113
114 raw_body = render(DEFAULT_RENDERER, ret_value, request=request)
114 raw_body = render(DEFAULT_RENDERER, ret_value, request=request)
115 response.body = safe_str(raw_body, response.charset)
115 response.body = safe_str(raw_body, response.charset)
116
116
117 if ct == response.default_content_type:
117 if ct == response.default_content_type:
118 response.content_type = 'application/json'
118 response.content_type = 'application/json'
119
119
120 return response
120 return response
121
121
122
122
123 def jsonrpc_error(request, message, retid=None, code=None):
123 def jsonrpc_error(request, message, retid=None, code=None):
124 """
124 """
125 Generate a Response object with a JSON-RPC error body
125 Generate a Response object with a JSON-RPC error body
126
126
127 :param code:
127 :param code:
128 :param retid:
128 :param retid:
129 :param message:
129 :param message:
130 """
130 """
131 err_dict = {'id': retid, 'result': None, 'error': message}
131 err_dict = {'id': retid, 'result': None, 'error': message}
132 body = render(DEFAULT_RENDERER, err_dict, request=request).encode('utf-8')
132 body = render(DEFAULT_RENDERER, err_dict, request=request).encode('utf-8')
133 return Response(
133 return Response(
134 body=body,
134 body=body,
135 status=code,
135 status=code,
136 content_type='application/json'
136 content_type='application/json'
137 )
137 )
138
138
139
139
140 def exception_view(exc, request):
140 def exception_view(exc, request):
141 rpc_id = getattr(request, 'rpc_id', None)
141 rpc_id = getattr(request, 'rpc_id', None)
142
142
143 fault_message = 'undefined error'
143 fault_message = 'undefined error'
144 if isinstance(exc, JSONRPCError):
144 if isinstance(exc, JSONRPCError):
145 fault_message = exc.message
145 fault_message = exc.message
146 log.debug('json-rpc error rpc_id:%s "%s"', rpc_id, fault_message)
146 log.debug('json-rpc error rpc_id:%s "%s"', rpc_id, fault_message)
147 elif isinstance(exc, JSONRPCValidationError):
147 elif isinstance(exc, JSONRPCValidationError):
148 colander_exc = exc.colander_exception
148 colander_exc = exc.colander_exception
149 # TODO(marcink): think maybe of nicer way to serialize errors ?
149 # TODO(marcink): think maybe of nicer way to serialize errors ?
150 fault_message = colander_exc.asdict()
150 fault_message = colander_exc.asdict()
151 log.debug('json-rpc error rpc_id:%s "%s"', rpc_id, fault_message)
151 log.debug('json-rpc error rpc_id:%s "%s"', rpc_id, fault_message)
152 elif isinstance(exc, JSONRPCForbidden):
152 elif isinstance(exc, JSONRPCForbidden):
153 fault_message = 'Access was denied to this resource.'
153 fault_message = 'Access was denied to this resource.'
154 log.warning('json-rpc forbidden call rpc_id:%s "%s"', rpc_id, fault_message)
154 log.warning('json-rpc forbidden call rpc_id:%s "%s"', rpc_id, fault_message)
155 elif isinstance(exc, HTTPNotFound):
155 elif isinstance(exc, HTTPNotFound):
156 method = request.rpc_method
156 method = request.rpc_method
157 log.debug('json-rpc method `%s` not found in list of '
157 log.debug('json-rpc method `%s` not found in list of '
158 'api calls: %s, rpc_id:%s',
158 'api calls: %s, rpc_id:%s',
159 method, request.registry.jsonrpc_methods.keys(), rpc_id)
159 method, request.registry.jsonrpc_methods.keys(), rpc_id)
160
160
161 similar = 'none'
161 similar = 'none'
162 try:
162 try:
163 similar_paterns = ['*{}*'.format(x) for x in method.split('_')]
163 similar_paterns = ['*{}*'.format(x) for x in method.split('_')]
164 similar_found = find_methods(
164 similar_found = find_methods(
165 request.registry.jsonrpc_methods, similar_paterns)
165 request.registry.jsonrpc_methods, similar_paterns)
166 similar = ', '.join(similar_found.keys()) or similar
166 similar = ', '.join(similar_found.keys()) or similar
167 except Exception:
167 except Exception:
168 # make the whole above block safe
168 # make the whole above block safe
169 pass
169 pass
170
170
171 fault_message = "No such method: {}. Similar methods: {}".format(
171 fault_message = "No such method: {}. Similar methods: {}".format(
172 method, similar)
172 method, similar)
173
173
174 return jsonrpc_error(request, fault_message, rpc_id)
174 return jsonrpc_error(request, fault_message, rpc_id)
175
175
176
176
177 def request_view(request):
177 def request_view(request):
178 """
178 """
179 Main request handling method. It handles all logic to call a specific
179 Main request handling method. It handles all logic to call a specific
180 exposed method
180 exposed method
181 """
181 """
182
182
183 # check if we can find this session using api_key, get_by_auth_token
183 # check if we can find this session using api_key, get_by_auth_token
184 # search not expired tokens only
184 # search not expired tokens only
185
185
186 try:
186 try:
187 api_user = User.get_by_auth_token(request.rpc_api_key)
187 api_user = User.get_by_auth_token(request.rpc_api_key)
188
188
189 if api_user is None:
189 if api_user is None:
190 return jsonrpc_error(
190 return jsonrpc_error(
191 request, retid=request.rpc_id, message='Invalid API KEY')
191 request, retid=request.rpc_id, message='Invalid API KEY')
192
192
193 if not api_user.active:
193 if not api_user.active:
194 return jsonrpc_error(
194 return jsonrpc_error(
195 request, retid=request.rpc_id,
195 request, retid=request.rpc_id,
196 message='Request from this user not allowed')
196 message='Request from this user not allowed')
197
197
198 # check if we are allowed to use this IP
198 # check if we are allowed to use this IP
199 auth_u = AuthUser(
199 auth_u = AuthUser(
200 api_user.user_id, request.rpc_api_key, ip_addr=request.rpc_ip_addr)
200 api_user.user_id, request.rpc_api_key, ip_addr=request.rpc_ip_addr)
201 if not auth_u.ip_allowed:
201 if not auth_u.ip_allowed:
202 return jsonrpc_error(
202 return jsonrpc_error(
203 request, retid=request.rpc_id,
203 request, retid=request.rpc_id,
204 message='Request from IP:%s not allowed' % (
204 message='Request from IP:%s not allowed' % (
205 request.rpc_ip_addr,))
205 request.rpc_ip_addr,))
206 else:
206 else:
207 log.info('Access for IP:%s allowed' % (request.rpc_ip_addr,))
207 log.info('Access for IP:%s allowed' % (request.rpc_ip_addr,))
208
208
209 # register our auth-user
209 # register our auth-user
210 request.rpc_user = auth_u
210 request.rpc_user = auth_u
211
211
212 # now check if token is valid for API
212 # now check if token is valid for API
213 auth_token = request.rpc_api_key
213 auth_token = request.rpc_api_key
214 token_match = api_user.authenticate_by_token(
214 token_match = api_user.authenticate_by_token(
215 auth_token, roles=[UserApiKeys.ROLE_API])
215 auth_token, roles=[UserApiKeys.ROLE_API])
216 invalid_token = not token_match
216 invalid_token = not token_match
217
217
218 log.debug('Checking if API KEY is valid with proper role')
218 log.debug('Checking if API KEY is valid with proper role')
219 if invalid_token:
219 if invalid_token:
220 return jsonrpc_error(
220 return jsonrpc_error(
221 request, retid=request.rpc_id,
221 request, retid=request.rpc_id,
222 message='API KEY invalid or, has bad role for an API call')
222 message='API KEY invalid or, has bad role for an API call')
223
223
224 except Exception:
224 except Exception:
225 log.exception('Error on API AUTH')
225 log.exception('Error on API AUTH')
226 return jsonrpc_error(
226 return jsonrpc_error(
227 request, retid=request.rpc_id, message='Invalid API KEY')
227 request, retid=request.rpc_id, message='Invalid API KEY')
228
228
229 method = request.rpc_method
229 method = request.rpc_method
230 func = request.registry.jsonrpc_methods[method]
230 func = request.registry.jsonrpc_methods[method]
231
231
232 # now that we have a method, add request._req_params to
232 # now that we have a method, add request._req_params to
233 # self.kargs and dispatch control to WGIController
233 # self.kargs and dispatch control to WGIController
234 argspec = inspect.getargspec(func)
234 argspec = inspect.getargspec(func)
235 arglist = argspec[0]
235 arglist = argspec[0]
236 defaults = map(type, argspec[3] or [])
236 defaults = map(type, argspec[3] or [])
237 default_empty = types.NotImplementedType
237 default_empty = types.NotImplementedType
238
238
239 # kw arguments required by this method
239 # kw arguments required by this method
240 func_kwargs = dict(itertools.izip_longest(
240 func_kwargs = dict(itertools.izip_longest(
241 reversed(arglist), reversed(defaults), fillvalue=default_empty))
241 reversed(arglist), reversed(defaults), fillvalue=default_empty))
242
242
243 # This attribute will need to be first param of a method that uses
243 # This attribute will need to be first param of a method that uses
244 # api_key, which is translated to instance of user at that name
244 # api_key, which is translated to instance of user at that name
245 user_var = 'apiuser'
245 user_var = 'apiuser'
246 request_var = 'request'
246 request_var = 'request'
247
247
248 for arg in [user_var, request_var]:
248 for arg in [user_var, request_var]:
249 if arg not in arglist:
249 if arg not in arglist:
250 return jsonrpc_error(
250 return jsonrpc_error(
251 request,
251 request,
252 retid=request.rpc_id,
252 retid=request.rpc_id,
253 message='This method [%s] does not support '
253 message='This method [%s] does not support '
254 'required parameter `%s`' % (func.__name__, arg))
254 'required parameter `%s`' % (func.__name__, arg))
255
255
256 # get our arglist and check if we provided them as args
256 # get our arglist and check if we provided them as args
257 for arg, default in func_kwargs.items():
257 for arg, default in func_kwargs.items():
258 if arg in [user_var, request_var]:
258 if arg in [user_var, request_var]:
259 # user_var and request_var are pre-hardcoded parameters and we
259 # user_var and request_var are pre-hardcoded parameters and we
260 # don't need to do any translation
260 # don't need to do any translation
261 continue
261 continue
262
262
263 # skip the required param check if it's default value is
263 # skip the required param check if it's default value is
264 # NotImplementedType (default_empty)
264 # NotImplementedType (default_empty)
265 if default == default_empty and arg not in request.rpc_params:
265 if default == default_empty and arg not in request.rpc_params:
266 return jsonrpc_error(
266 return jsonrpc_error(
267 request,
267 request,
268 retid=request.rpc_id,
268 retid=request.rpc_id,
269 message=('Missing non optional `%s` arg in JSON DATA' % arg)
269 message=('Missing non optional `%s` arg in JSON DATA' % arg)
270 )
270 )
271
271
272 # sanitize extra passed arguments
272 # sanitize extra passed arguments
273 for k in request.rpc_params.keys()[:]:
273 for k in request.rpc_params.keys()[:]:
274 if k not in func_kwargs:
274 if k not in func_kwargs:
275 del request.rpc_params[k]
275 del request.rpc_params[k]
276
276
277 call_params = request.rpc_params
277 call_params = request.rpc_params
278 call_params.update({
278 call_params.update({
279 'request': request,
279 'request': request,
280 'apiuser': auth_u
280 'apiuser': auth_u
281 })
281 })
282
282
283 # register some common functions for usage
283 # register some common functions for usage
284 attach_context_attributes(TemplateArgs(), request, request.rpc_user.user_id,
284 attach_context_attributes(
285 attach_to_request=True)
285 TemplateArgs(), request, request.rpc_user.user_id)
286
286
287 try:
287 try:
288 ret_value = func(**call_params)
288 ret_value = func(**call_params)
289 return jsonrpc_response(request, ret_value)
289 return jsonrpc_response(request, ret_value)
290 except JSONRPCBaseError:
290 except JSONRPCBaseError:
291 raise
291 raise
292 except Exception:
292 except Exception:
293 log.exception('Unhandled exception occurred on api call: %s', func)
293 log.exception('Unhandled exception occurred on api call: %s', func)
294 return jsonrpc_error(request, retid=request.rpc_id,
294 return jsonrpc_error(request, retid=request.rpc_id,
295 message='Internal server error')
295 message='Internal server error')
296
296
297
297
298 def setup_request(request):
298 def setup_request(request):
299 """
299 """
300 Parse a JSON-RPC request body. It's used inside the predicates method
300 Parse a JSON-RPC request body. It's used inside the predicates method
301 to validate and bootstrap requests for usage in rpc calls.
301 to validate and bootstrap requests for usage in rpc calls.
302
302
303 We need to raise JSONRPCError here if we want to return some errors back to
303 We need to raise JSONRPCError here if we want to return some errors back to
304 user.
304 user.
305 """
305 """
306
306
307 log.debug('Executing setup request: %r', request)
307 log.debug('Executing setup request: %r', request)
308 request.rpc_ip_addr = get_ip_addr(request.environ)
308 request.rpc_ip_addr = get_ip_addr(request.environ)
309 # TODO(marcink): deprecate GET at some point
309 # TODO(marcink): deprecate GET at some point
310 if request.method not in ['POST', 'GET']:
310 if request.method not in ['POST', 'GET']:
311 log.debug('unsupported request method "%s"', request.method)
311 log.debug('unsupported request method "%s"', request.method)
312 raise JSONRPCError(
312 raise JSONRPCError(
313 'unsupported request method "%s". Please use POST' % request.method)
313 'unsupported request method "%s". Please use POST' % request.method)
314
314
315 if 'CONTENT_LENGTH' not in request.environ:
315 if 'CONTENT_LENGTH' not in request.environ:
316 log.debug("No Content-Length")
316 log.debug("No Content-Length")
317 raise JSONRPCError("Empty body, No Content-Length in request")
317 raise JSONRPCError("Empty body, No Content-Length in request")
318
318
319 else:
319 else:
320 length = request.environ['CONTENT_LENGTH']
320 length = request.environ['CONTENT_LENGTH']
321 log.debug('Content-Length: %s', length)
321 log.debug('Content-Length: %s', length)
322
322
323 if length == 0:
323 if length == 0:
324 log.debug("Content-Length is 0")
324 log.debug("Content-Length is 0")
325 raise JSONRPCError("Content-Length is 0")
325 raise JSONRPCError("Content-Length is 0")
326
326
327 raw_body = request.body
327 raw_body = request.body
328 try:
328 try:
329 json_body = json.loads(raw_body)
329 json_body = json.loads(raw_body)
330 except ValueError as e:
330 except ValueError as e:
331 # catch JSON errors Here
331 # catch JSON errors Here
332 raise JSONRPCError("JSON parse error ERR:%s RAW:%r" % (e, raw_body))
332 raise JSONRPCError("JSON parse error ERR:%s RAW:%r" % (e, raw_body))
333
333
334 request.rpc_id = json_body.get('id')
334 request.rpc_id = json_body.get('id')
335 request.rpc_method = json_body.get('method')
335 request.rpc_method = json_body.get('method')
336
336
337 # check required base parameters
337 # check required base parameters
338 try:
338 try:
339 api_key = json_body.get('api_key')
339 api_key = json_body.get('api_key')
340 if not api_key:
340 if not api_key:
341 api_key = json_body.get('auth_token')
341 api_key = json_body.get('auth_token')
342
342
343 if not api_key:
343 if not api_key:
344 raise KeyError('api_key or auth_token')
344 raise KeyError('api_key or auth_token')
345
345
346 # TODO(marcink): support passing in token in request header
346 # TODO(marcink): support passing in token in request header
347
347
348 request.rpc_api_key = api_key
348 request.rpc_api_key = api_key
349 request.rpc_id = json_body['id']
349 request.rpc_id = json_body['id']
350 request.rpc_method = json_body['method']
350 request.rpc_method = json_body['method']
351 request.rpc_params = json_body['args'] \
351 request.rpc_params = json_body['args'] \
352 if isinstance(json_body['args'], dict) else {}
352 if isinstance(json_body['args'], dict) else {}
353
353
354 log.debug(
354 log.debug(
355 'method: %s, params: %s' % (request.rpc_method, request.rpc_params))
355 'method: %s, params: %s' % (request.rpc_method, request.rpc_params))
356 except KeyError as e:
356 except KeyError as e:
357 raise JSONRPCError('Incorrect JSON data. Missing %s' % e)
357 raise JSONRPCError('Incorrect JSON data. Missing %s' % e)
358
358
359 log.debug('setup complete, now handling method:%s rpcid:%s',
359 log.debug('setup complete, now handling method:%s rpcid:%s',
360 request.rpc_method, request.rpc_id, )
360 request.rpc_method, request.rpc_id, )
361
361
362
362
363 class RoutePredicate(object):
363 class RoutePredicate(object):
364 def __init__(self, val, config):
364 def __init__(self, val, config):
365 self.val = val
365 self.val = val
366
366
367 def text(self):
367 def text(self):
368 return 'jsonrpc route = %s' % self.val
368 return 'jsonrpc route = %s' % self.val
369
369
370 phash = text
370 phash = text
371
371
372 def __call__(self, info, request):
372 def __call__(self, info, request):
373 if self.val:
373 if self.val:
374 # potentially setup and bootstrap our call
374 # potentially setup and bootstrap our call
375 setup_request(request)
375 setup_request(request)
376
376
377 # Always return True so that even if it isn't a valid RPC it
377 # Always return True so that even if it isn't a valid RPC it
378 # will fall through to the underlaying handlers like notfound_view
378 # will fall through to the underlaying handlers like notfound_view
379 return True
379 return True
380
380
381
381
382 class NotFoundPredicate(object):
382 class NotFoundPredicate(object):
383 def __init__(self, val, config):
383 def __init__(self, val, config):
384 self.val = val
384 self.val = val
385 self.methods = config.registry.jsonrpc_methods
385 self.methods = config.registry.jsonrpc_methods
386
386
387 def text(self):
387 def text(self):
388 return 'jsonrpc method not found = {}.'.format(self.val)
388 return 'jsonrpc method not found = {}.'.format(self.val)
389
389
390 phash = text
390 phash = text
391
391
392 def __call__(self, info, request):
392 def __call__(self, info, request):
393 return hasattr(request, 'rpc_method')
393 return hasattr(request, 'rpc_method')
394
394
395
395
396 class MethodPredicate(object):
396 class MethodPredicate(object):
397 def __init__(self, val, config):
397 def __init__(self, val, config):
398 self.method = val
398 self.method = val
399
399
400 def text(self):
400 def text(self):
401 return 'jsonrpc method = %s' % self.method
401 return 'jsonrpc method = %s' % self.method
402
402
403 phash = text
403 phash = text
404
404
405 def __call__(self, context, request):
405 def __call__(self, context, request):
406 # we need to explicitly return False here, so pyramid doesn't try to
406 # we need to explicitly return False here, so pyramid doesn't try to
407 # execute our view directly. We need our main handler to execute things
407 # execute our view directly. We need our main handler to execute things
408 return getattr(request, 'rpc_method') == self.method
408 return getattr(request, 'rpc_method') == self.method
409
409
410
410
411 def add_jsonrpc_method(config, view, **kwargs):
411 def add_jsonrpc_method(config, view, **kwargs):
412 # pop the method name
412 # pop the method name
413 method = kwargs.pop('method', None)
413 method = kwargs.pop('method', None)
414
414
415 if method is None:
415 if method is None:
416 raise ConfigurationError(
416 raise ConfigurationError(
417 'Cannot register a JSON-RPC method without specifying the '
417 'Cannot register a JSON-RPC method without specifying the '
418 '"method"')
418 '"method"')
419
419
420 # we define custom predicate, to enable to detect conflicting methods,
420 # we define custom predicate, to enable to detect conflicting methods,
421 # those predicates are kind of "translation" from the decorator variables
421 # those predicates are kind of "translation" from the decorator variables
422 # to internal predicates names
422 # to internal predicates names
423
423
424 kwargs['jsonrpc_method'] = method
424 kwargs['jsonrpc_method'] = method
425
425
426 # register our view into global view store for validation
426 # register our view into global view store for validation
427 config.registry.jsonrpc_methods[method] = view
427 config.registry.jsonrpc_methods[method] = view
428
428
429 # we're using our main request_view handler, here, so each method
429 # we're using our main request_view handler, here, so each method
430 # has a unified handler for itself
430 # has a unified handler for itself
431 config.add_view(request_view, route_name='apiv2', **kwargs)
431 config.add_view(request_view, route_name='apiv2', **kwargs)
432
432
433
433
434 class jsonrpc_method(object):
434 class jsonrpc_method(object):
435 """
435 """
436 decorator that works similar to @add_view_config decorator,
436 decorator that works similar to @add_view_config decorator,
437 but tailored for our JSON RPC
437 but tailored for our JSON RPC
438 """
438 """
439
439
440 venusian = venusian # for testing injection
440 venusian = venusian # for testing injection
441
441
442 def __init__(self, method=None, **kwargs):
442 def __init__(self, method=None, **kwargs):
443 self.method = method
443 self.method = method
444 self.kwargs = kwargs
444 self.kwargs = kwargs
445
445
446 def __call__(self, wrapped):
446 def __call__(self, wrapped):
447 kwargs = self.kwargs.copy()
447 kwargs = self.kwargs.copy()
448 kwargs['method'] = self.method or wrapped.__name__
448 kwargs['method'] = self.method or wrapped.__name__
449 depth = kwargs.pop('_depth', 0)
449 depth = kwargs.pop('_depth', 0)
450
450
451 def callback(context, name, ob):
451 def callback(context, name, ob):
452 config = context.config.with_package(info.module)
452 config = context.config.with_package(info.module)
453 config.add_jsonrpc_method(view=ob, **kwargs)
453 config.add_jsonrpc_method(view=ob, **kwargs)
454
454
455 info = venusian.attach(wrapped, callback, category='pyramid',
455 info = venusian.attach(wrapped, callback, category='pyramid',
456 depth=depth + 1)
456 depth=depth + 1)
457 if info.scope == 'class':
457 if info.scope == 'class':
458 # ensure that attr is set if decorating a class method
458 # ensure that attr is set if decorating a class method
459 kwargs.setdefault('attr', wrapped.__name__)
459 kwargs.setdefault('attr', wrapped.__name__)
460
460
461 kwargs['_info'] = info.codeinfo # fbo action_method
461 kwargs['_info'] = info.codeinfo # fbo action_method
462 return wrapped
462 return wrapped
463
463
464
464
465 class jsonrpc_deprecated_method(object):
465 class jsonrpc_deprecated_method(object):
466 """
466 """
467 Marks method as deprecated, adds log.warning, and inject special key to
467 Marks method as deprecated, adds log.warning, and inject special key to
468 the request variable to mark method as deprecated.
468 the request variable to mark method as deprecated.
469 Also injects special docstring that extract_docs will catch to mark
469 Also injects special docstring that extract_docs will catch to mark
470 method as deprecated.
470 method as deprecated.
471
471
472 :param use_method: specify which method should be used instead of
472 :param use_method: specify which method should be used instead of
473 the decorated one
473 the decorated one
474
474
475 Use like::
475 Use like::
476
476
477 @jsonrpc_method()
477 @jsonrpc_method()
478 @jsonrpc_deprecated_method(use_method='new_func', deprecated_at_version='3.0.0')
478 @jsonrpc_deprecated_method(use_method='new_func', deprecated_at_version='3.0.0')
479 def old_func(request, apiuser, arg1, arg2):
479 def old_func(request, apiuser, arg1, arg2):
480 ...
480 ...
481 """
481 """
482
482
483 def __init__(self, use_method, deprecated_at_version):
483 def __init__(self, use_method, deprecated_at_version):
484 self.use_method = use_method
484 self.use_method = use_method
485 self.deprecated_at_version = deprecated_at_version
485 self.deprecated_at_version = deprecated_at_version
486 self.deprecated_msg = ''
486 self.deprecated_msg = ''
487
487
488 def __call__(self, func):
488 def __call__(self, func):
489 self.deprecated_msg = 'Please use method `{method}` instead.'.format(
489 self.deprecated_msg = 'Please use method `{method}` instead.'.format(
490 method=self.use_method)
490 method=self.use_method)
491
491
492 docstring = """\n
492 docstring = """\n
493 .. deprecated:: {version}
493 .. deprecated:: {version}
494
494
495 {deprecation_message}
495 {deprecation_message}
496
496
497 {original_docstring}
497 {original_docstring}
498 """
498 """
499 func.__doc__ = docstring.format(
499 func.__doc__ = docstring.format(
500 version=self.deprecated_at_version,
500 version=self.deprecated_at_version,
501 deprecation_message=self.deprecated_msg,
501 deprecation_message=self.deprecated_msg,
502 original_docstring=func.__doc__)
502 original_docstring=func.__doc__)
503 return decorator.decorator(self.__wrapper, func)
503 return decorator.decorator(self.__wrapper, func)
504
504
505 def __wrapper(self, func, *fargs, **fkwargs):
505 def __wrapper(self, func, *fargs, **fkwargs):
506 log.warning('DEPRECATED API CALL on function %s, please '
506 log.warning('DEPRECATED API CALL on function %s, please '
507 'use `%s` instead', func, self.use_method)
507 'use `%s` instead', func, self.use_method)
508 # alter function docstring to mark as deprecated, this is picked up
508 # alter function docstring to mark as deprecated, this is picked up
509 # via fabric file that generates API DOC.
509 # via fabric file that generates API DOC.
510 result = func(*fargs, **fkwargs)
510 result = func(*fargs, **fkwargs)
511
511
512 request = fargs[0]
512 request = fargs[0]
513 request.rpc_deprecation = 'DEPRECATED METHOD ' + self.deprecated_msg
513 request.rpc_deprecation = 'DEPRECATED METHOD ' + self.deprecated_msg
514 return result
514 return result
515
515
516
516
517 def includeme(config):
517 def includeme(config):
518 plugin_module = 'rhodecode.api'
518 plugin_module = 'rhodecode.api'
519 plugin_settings = get_plugin_settings(
519 plugin_settings = get_plugin_settings(
520 plugin_module, config.registry.settings)
520 plugin_module, config.registry.settings)
521
521
522 if not hasattr(config.registry, 'jsonrpc_methods'):
522 if not hasattr(config.registry, 'jsonrpc_methods'):
523 config.registry.jsonrpc_methods = OrderedDict()
523 config.registry.jsonrpc_methods = OrderedDict()
524
524
525 # match filter by given method only
525 # match filter by given method only
526 config.add_view_predicate('jsonrpc_method', MethodPredicate)
526 config.add_view_predicate('jsonrpc_method', MethodPredicate)
527
527
528 config.add_renderer(DEFAULT_RENDERER, ExtJsonRenderer(
528 config.add_renderer(DEFAULT_RENDERER, ExtJsonRenderer(
529 serializer=json.dumps, indent=4))
529 serializer=json.dumps, indent=4))
530 config.add_directive('add_jsonrpc_method', add_jsonrpc_method)
530 config.add_directive('add_jsonrpc_method', add_jsonrpc_method)
531
531
532 config.add_route_predicate(
532 config.add_route_predicate(
533 'jsonrpc_call', RoutePredicate)
533 'jsonrpc_call', RoutePredicate)
534
534
535 config.add_route(
535 config.add_route(
536 'apiv2', plugin_settings.get('url', DEFAULT_URL), jsonrpc_call=True)
536 'apiv2', plugin_settings.get('url', DEFAULT_URL), jsonrpc_call=True)
537
537
538 config.scan(plugin_module, ignore='rhodecode.api.tests')
538 config.scan(plugin_module, ignore='rhodecode.api.tests')
539 # register some exception handling view
539 # register some exception handling view
540 config.add_view(exception_view, context=JSONRPCBaseError)
540 config.add_view(exception_view, context=JSONRPCBaseError)
541 config.add_view_predicate('jsonrpc_method_not_found', NotFoundPredicate)
541 config.add_view_predicate('jsonrpc_method_not_found', NotFoundPredicate)
542 config.add_notfound_view(exception_view, jsonrpc_method_not_found=True)
542 config.add_notfound_view(exception_view, jsonrpc_method_not_found=True)
@@ -1,52 +1,52 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2017 RhodeCode GmbH
3 # Copyright (C) 2010-2017 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 pytest
21 import pytest
22
22
23 from rhodecode.model.meta import Session
23 from rhodecode.model.meta import Session
24 from rhodecode.model.user import UserModel
24 from rhodecode.model.user import UserModel
25 from rhodecode.model.auth_token import AuthTokenModel
25 from rhodecode.model.auth_token import AuthTokenModel
26 from rhodecode.tests import TEST_USER_ADMIN_LOGIN
26 from rhodecode.tests import TEST_USER_ADMIN_LOGIN
27
27
28
28
29 @pytest.fixture(scope="class")
29 @pytest.fixture(scope="class")
30 def testuser_api(request, pylonsapp):
30 def testuser_api(request, pylonsapp):
31 cls = request.cls
31 cls = request.cls
32
32
33 # ADMIN USER
33 # ADMIN USER
34 cls.usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN)
34 cls.usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN)
35 cls.apikey = cls.usr.api_key
35 cls.apikey = cls.usr.api_key
36
36
37 # REGULAR USER
37 # REGULAR USER
38 cls.test_user = UserModel().create_or_update(
38 cls.test_user = UserModel().create_or_update(
39 username='test-api',
39 username='test-api',
40 password='test',
40 password='test',
41 email='test@api.rhodecode.org',
41 email='test@api.rhodecode.org',
42 firstname='first',
42 firstname='first',
43 lastname='last'
43 lastname='last'
44 )
44 )
45 # create TOKEN for user, if he doesn't have one
45 # create TOKEN for user, if he doesn't have one
46 if not cls.test_user.api_key:
46 if not cls.test_user.api_key:
47 AuthTokenModel().create(
47 AuthTokenModel().create(
48 user=cls.test_user, description='TEST_USER_TOKEN')
48 user=cls.test_user, description=u'TEST_USER_TOKEN')
49
49
50 Session().commit()
50 Session().commit()
51 cls.TEST_USER_LOGIN = cls.test_user.username
51 cls.TEST_USER_LOGIN = cls.test_user.username
52 cls.apikey_regular = cls.test_user.api_key
52 cls.apikey_regular = cls.test_user.api_key
@@ -1,101 +1,101 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2017 RhodeCode GmbH
3 # Copyright (C) 2010-2017 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 import pytest
22 import pytest
23
23
24 from rhodecode.model.db import Gist
24 from rhodecode.model.db import Gist
25 from rhodecode.api.tests.utils import (
25 from rhodecode.api.tests.utils import (
26 build_data, api_call, assert_error, assert_ok)
26 build_data, api_call, assert_error, assert_ok)
27
27
28
28
29 @pytest.mark.usefixtures("testuser_api", "app")
29 @pytest.mark.usefixtures("testuser_api", "app")
30 class TestApiGetGist(object):
30 class TestApiGetGist(object):
31 def test_api_get_gist(self, gist_util, http_host_stub):
31 def test_api_get_gist(self, gist_util, http_host_only_stub):
32 gist = gist_util.create_gist()
32 gist = gist_util.create_gist()
33 gist_id = gist.gist_access_id
33 gist_id = gist.gist_access_id
34 gist_created_on = gist.created_on
34 gist_created_on = gist.created_on
35 gist_modified_at = gist.modified_at
35 gist_modified_at = gist.modified_at
36 id_, params = build_data(
36 id_, params = build_data(
37 self.apikey, 'get_gist', gistid=gist_id, )
37 self.apikey, 'get_gist', gistid=gist_id, )
38 response = api_call(self.app, params)
38 response = api_call(self.app, params)
39
39
40 expected = {
40 expected = {
41 'access_id': gist_id,
41 'access_id': gist_id,
42 'created_on': gist_created_on,
42 'created_on': gist_created_on,
43 'modified_at': gist_modified_at,
43 'modified_at': gist_modified_at,
44 'description': 'new-gist',
44 'description': 'new-gist',
45 'expires': -1.0,
45 'expires': -1.0,
46 'gist_id': int(gist_id),
46 'gist_id': int(gist_id),
47 'type': 'public',
47 'type': 'public',
48 'url': 'http://%s/_admin/gists/%s' % (http_host_stub, gist_id,),
48 'url': 'http://%s/_admin/gists/%s' % (http_host_only_stub, gist_id,),
49 'acl_level': Gist.ACL_LEVEL_PUBLIC,
49 'acl_level': Gist.ACL_LEVEL_PUBLIC,
50 'content': None,
50 'content': None,
51 }
51 }
52
52
53 assert_ok(id_, expected, given=response.body)
53 assert_ok(id_, expected, given=response.body)
54
54
55 def test_api_get_gist_with_content(self, gist_util, http_host_stub):
55 def test_api_get_gist_with_content(self, gist_util, http_host_only_stub):
56 mapping = {
56 mapping = {
57 u'filename1.txt': {'content': u'hello world'},
57 u'filename1.txt': {'content': u'hello world'},
58 u'filename1ą.txt': {'content': u'hello worldę'}
58 u'filename1ą.txt': {'content': u'hello worldę'}
59 }
59 }
60 gist = gist_util.create_gist(gist_mapping=mapping)
60 gist = gist_util.create_gist(gist_mapping=mapping)
61 gist_id = gist.gist_access_id
61 gist_id = gist.gist_access_id
62 gist_created_on = gist.created_on
62 gist_created_on = gist.created_on
63 gist_modified_at = gist.modified_at
63 gist_modified_at = gist.modified_at
64 id_, params = build_data(
64 id_, params = build_data(
65 self.apikey, 'get_gist', gistid=gist_id, content=True)
65 self.apikey, 'get_gist', gistid=gist_id, content=True)
66 response = api_call(self.app, params)
66 response = api_call(self.app, params)
67
67
68 expected = {
68 expected = {
69 'access_id': gist_id,
69 'access_id': gist_id,
70 'created_on': gist_created_on,
70 'created_on': gist_created_on,
71 'modified_at': gist_modified_at,
71 'modified_at': gist_modified_at,
72 'description': 'new-gist',
72 'description': 'new-gist',
73 'expires': -1.0,
73 'expires': -1.0,
74 'gist_id': int(gist_id),
74 'gist_id': int(gist_id),
75 'type': 'public',
75 'type': 'public',
76 'url': 'http://%s/_admin/gists/%s' % (http_host_stub, gist_id,),
76 'url': 'http://%s/_admin/gists/%s' % (http_host_only_stub, gist_id,),
77 'acl_level': Gist.ACL_LEVEL_PUBLIC,
77 'acl_level': Gist.ACL_LEVEL_PUBLIC,
78 'content': {
78 'content': {
79 u'filename1.txt': u'hello world',
79 u'filename1.txt': u'hello world',
80 u'filename1ą.txt': u'hello worldę'
80 u'filename1ą.txt': u'hello worldę'
81 },
81 },
82 }
82 }
83
83
84 assert_ok(id_, expected, given=response.body)
84 assert_ok(id_, expected, given=response.body)
85
85
86 def test_api_get_gist_not_existing(self):
86 def test_api_get_gist_not_existing(self):
87 id_, params = build_data(
87 id_, params = build_data(
88 self.apikey_regular, 'get_gist', gistid='12345', )
88 self.apikey_regular, 'get_gist', gistid='12345', )
89 response = api_call(self.app, params)
89 response = api_call(self.app, params)
90 expected = 'gist `%s` does not exist' % ('12345',)
90 expected = 'gist `%s` does not exist' % ('12345',)
91 assert_error(id_, expected, given=response.body)
91 assert_error(id_, expected, given=response.body)
92
92
93 def test_api_get_gist_private_gist_without_permission(self, gist_util):
93 def test_api_get_gist_private_gist_without_permission(self, gist_util):
94 gist = gist_util.create_gist()
94 gist = gist_util.create_gist()
95 gist_id = gist.gist_access_id
95 gist_id = gist.gist_access_id
96 id_, params = build_data(
96 id_, params = build_data(
97 self.apikey_regular, 'get_gist', gistid=gist_id, )
97 self.apikey_regular, 'get_gist', gistid=gist_id, )
98 response = api_call(self.app, params)
98 response = api_call(self.app, params)
99
99
100 expected = 'gist `%s` does not exist' % (gist_id,)
100 expected = 'gist `%s` does not exist' % (gist_id,)
101 assert_error(id_, expected, given=response.body)
101 assert_error(id_, expected, given=response.body)
@@ -1,134 +1,134 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2017 RhodeCode GmbH
3 # Copyright (C) 2010-2017 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 import pytest
22 import pytest
23 import urlobject
23 import urlobject
24 from pylons import url
25
24
26 from rhodecode.api.tests.utils import (
25 from rhodecode.api.tests.utils import (
27 build_data, api_call, assert_error, assert_ok)
26 build_data, api_call, assert_error, assert_ok)
27 from rhodecode.lib import helpers as h
28 from rhodecode.lib.utils2 import safe_unicode
28 from rhodecode.lib.utils2 import safe_unicode
29
29
30 pytestmark = pytest.mark.backends("git", "hg")
30 pytestmark = pytest.mark.backends("git", "hg")
31
31
32
32
33 @pytest.mark.usefixtures("testuser_api", "app")
33 @pytest.mark.usefixtures("testuser_api", "app")
34 class TestGetPullRequest(object):
34 class TestGetPullRequest(object):
35
35
36 def test_api_get_pull_request(self, pr_util, http_host_only_stub):
36 def test_api_get_pull_request(self, pr_util, http_host_only_stub):
37 from rhodecode.model.pull_request import PullRequestModel
37 from rhodecode.model.pull_request import PullRequestModel
38 pull_request = pr_util.create_pull_request(mergeable=True)
38 pull_request = pr_util.create_pull_request(mergeable=True)
39 id_, params = build_data(
39 id_, params = build_data(
40 self.apikey, 'get_pull_request',
40 self.apikey, 'get_pull_request',
41 repoid=pull_request.target_repo.repo_name,
41 repoid=pull_request.target_repo.repo_name,
42 pullrequestid=pull_request.pull_request_id)
42 pullrequestid=pull_request.pull_request_id)
43
43
44 response = api_call(self.app, params)
44 response = api_call(self.app, params)
45
45
46 assert response.status == '200 OK'
46 assert response.status == '200 OK'
47
47
48 url_obj = urlobject.URLObject(
48 url_obj = urlobject.URLObject(
49 url(
49 h.route_url(
50 'pullrequest_show',
50 'pullrequest_show',
51 repo_name=pull_request.target_repo.repo_name,
51 repo_name=pull_request.target_repo.repo_name,
52 pull_request_id=pull_request.pull_request_id, qualified=True))
52 pull_request_id=pull_request.pull_request_id))
53
53
54 pr_url = safe_unicode(
54 pr_url = safe_unicode(
55 url_obj.with_netloc(http_host_only_stub))
55 url_obj.with_netloc(http_host_only_stub))
56 source_url = safe_unicode(
56 source_url = safe_unicode(
57 pull_request.source_repo.clone_url().with_netloc(http_host_only_stub))
57 pull_request.source_repo.clone_url().with_netloc(http_host_only_stub))
58 target_url = safe_unicode(
58 target_url = safe_unicode(
59 pull_request.target_repo.clone_url().with_netloc(http_host_only_stub))
59 pull_request.target_repo.clone_url().with_netloc(http_host_only_stub))
60 shadow_url = safe_unicode(
60 shadow_url = safe_unicode(
61 PullRequestModel().get_shadow_clone_url(pull_request))
61 PullRequestModel().get_shadow_clone_url(pull_request))
62
62
63 expected = {
63 expected = {
64 'pull_request_id': pull_request.pull_request_id,
64 'pull_request_id': pull_request.pull_request_id,
65 'url': pr_url,
65 'url': pr_url,
66 'title': pull_request.title,
66 'title': pull_request.title,
67 'description': pull_request.description,
67 'description': pull_request.description,
68 'status': pull_request.status,
68 'status': pull_request.status,
69 'created_on': pull_request.created_on,
69 'created_on': pull_request.created_on,
70 'updated_on': pull_request.updated_on,
70 'updated_on': pull_request.updated_on,
71 'commit_ids': pull_request.revisions,
71 'commit_ids': pull_request.revisions,
72 'review_status': pull_request.calculated_review_status(),
72 'review_status': pull_request.calculated_review_status(),
73 'mergeable': {
73 'mergeable': {
74 'status': True,
74 'status': True,
75 'message': 'This pull request can be automatically merged.',
75 'message': 'This pull request can be automatically merged.',
76 },
76 },
77 'source': {
77 'source': {
78 'clone_url': source_url,
78 'clone_url': source_url,
79 'repository': pull_request.source_repo.repo_name,
79 'repository': pull_request.source_repo.repo_name,
80 'reference': {
80 'reference': {
81 'name': pull_request.source_ref_parts.name,
81 'name': pull_request.source_ref_parts.name,
82 'type': pull_request.source_ref_parts.type,
82 'type': pull_request.source_ref_parts.type,
83 'commit_id': pull_request.source_ref_parts.commit_id,
83 'commit_id': pull_request.source_ref_parts.commit_id,
84 },
84 },
85 },
85 },
86 'target': {
86 'target': {
87 'clone_url': target_url,
87 'clone_url': target_url,
88 'repository': pull_request.target_repo.repo_name,
88 'repository': pull_request.target_repo.repo_name,
89 'reference': {
89 'reference': {
90 'name': pull_request.target_ref_parts.name,
90 'name': pull_request.target_ref_parts.name,
91 'type': pull_request.target_ref_parts.type,
91 'type': pull_request.target_ref_parts.type,
92 'commit_id': pull_request.target_ref_parts.commit_id,
92 'commit_id': pull_request.target_ref_parts.commit_id,
93 },
93 },
94 },
94 },
95 'merge': {
95 'merge': {
96 'clone_url': shadow_url,
96 'clone_url': shadow_url,
97 'reference': {
97 'reference': {
98 'name': pull_request.shadow_merge_ref.name,
98 'name': pull_request.shadow_merge_ref.name,
99 'type': pull_request.shadow_merge_ref.type,
99 'type': pull_request.shadow_merge_ref.type,
100 'commit_id': pull_request.shadow_merge_ref.commit_id,
100 'commit_id': pull_request.shadow_merge_ref.commit_id,
101 },
101 },
102 },
102 },
103 'author': pull_request.author.get_api_data(include_secrets=False,
103 'author': pull_request.author.get_api_data(include_secrets=False,
104 details='basic'),
104 details='basic'),
105 'reviewers': [
105 'reviewers': [
106 {
106 {
107 'user': reviewer.get_api_data(include_secrets=False,
107 'user': reviewer.get_api_data(include_secrets=False,
108 details='basic'),
108 details='basic'),
109 'reasons': reasons,
109 'reasons': reasons,
110 'review_status': st[0][1].status if st else 'not_reviewed',
110 'review_status': st[0][1].status if st else 'not_reviewed',
111 }
111 }
112 for reviewer, reasons, mandatory, st in
112 for reviewer, reasons, mandatory, st in
113 pull_request.reviewers_statuses()
113 pull_request.reviewers_statuses()
114 ]
114 ]
115 }
115 }
116 assert_ok(id_, expected, response.body)
116 assert_ok(id_, expected, response.body)
117
117
118 def test_api_get_pull_request_repo_error(self):
118 def test_api_get_pull_request_repo_error(self):
119 id_, params = build_data(
119 id_, params = build_data(
120 self.apikey, 'get_pull_request',
120 self.apikey, 'get_pull_request',
121 repoid=666, pullrequestid=1)
121 repoid=666, pullrequestid=1)
122 response = api_call(self.app, params)
122 response = api_call(self.app, params)
123
123
124 expected = 'repository `666` does not exist'
124 expected = 'repository `666` does not exist'
125 assert_error(id_, expected, given=response.body)
125 assert_error(id_, expected, given=response.body)
126
126
127 def test_api_get_pull_request_pull_request_error(self):
127 def test_api_get_pull_request_pull_request_error(self):
128 id_, params = build_data(
128 id_, params = build_data(
129 self.apikey, 'get_pull_request',
129 self.apikey, 'get_pull_request',
130 repoid=1, pullrequestid=666)
130 repoid=1, pullrequestid=666)
131 response = api_call(self.app, params)
131 response = api_call(self.app, params)
132
132
133 expected = 'pull request `666` does not exist'
133 expected = 'pull request `666` does not exist'
134 assert_error(id_, expected, given=response.body)
134 assert_error(id_, expected, given=response.body)
@@ -1,129 +1,129 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2017 RhodeCode GmbH
3 # Copyright (C) 2010-2017 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 import pytest
22 import pytest
23
23
24 from rhodecode.model.repo import RepoModel
24 from rhodecode.model.repo import RepoModel
25 from rhodecode.api.tests.utils import (
25 from rhodecode.api.tests.utils import (
26 build_data, api_call, assert_ok, assert_error, jsonify)
26 build_data, api_call, assert_ok, assert_error, jsonify)
27 from rhodecode.model.db import User
27 from rhodecode.model.db import User
28
28
29
29
30 @pytest.mark.usefixtures("testuser_api", "app")
30 @pytest.mark.usefixtures("testuser_api", "app")
31 class TestGetRepos(object):
31 class TestGetRepos(object):
32 def test_api_get_repos(self):
32 def test_api_get_repos(self):
33 id_, params = build_data(self.apikey, 'get_repos')
33 id_, params = build_data(self.apikey, 'get_repos')
34 response = api_call(self.app, params)
34 response = api_call(self.app, params)
35
35
36 result = []
36 result = []
37 for repo in RepoModel().get_all():
37 for repo in RepoModel().get_all():
38 result.append(repo.get_api_data(include_secrets=True))
38 result.append(repo.get_api_data(include_secrets=True))
39 ret = jsonify(result)
39 ret = jsonify(result)
40
40
41 expected = ret
41 expected = ret
42 assert_ok(id_, expected, given=response.body)
42 assert_ok(id_, expected, given=response.body)
43
43
44 def test_api_get_repos_only_toplevel(self, user_util):
44 def test_api_get_repos_only_toplevel(self, user_util):
45 repo_group = user_util.create_repo_group(auto_cleanup=True)
45 repo_group = user_util.create_repo_group(auto_cleanup=True)
46 user_util.create_repo(parent=repo_group)
46 user_util.create_repo(parent=repo_group)
47
47
48 id_, params = build_data(self.apikey, 'get_repos', traverse=0)
48 id_, params = build_data(self.apikey, 'get_repos', traverse=0)
49 response = api_call(self.app, params)
49 response = api_call(self.app, params)
50
50
51 result = []
51 result = []
52 for repo in RepoModel().get_repos_for_root(root=None):
52 for repo in RepoModel().get_repos_for_root(root=None):
53 result.append(repo.get_api_data(include_secrets=True))
53 result.append(repo.get_api_data(include_secrets=True))
54 expected = jsonify(result)
54 expected = jsonify(result)
55
55
56 assert_ok(id_, expected, given=response.body)
56 assert_ok(id_, expected, given=response.body)
57
57
58 def test_api_get_repos_with_wrong_root(self):
58 def test_api_get_repos_with_wrong_root(self):
59 id_, params = build_data(self.apikey, 'get_repos', root='abracadabra')
59 id_, params = build_data(self.apikey, 'get_repos', root='abracadabra')
60 response = api_call(self.app, params)
60 response = api_call(self.app, params)
61
61
62 expected = 'Root repository group `abracadabra` does not exist'
62 expected = 'Root repository group `abracadabra` does not exist'
63 assert_error(id_, expected, given=response.body)
63 assert_error(id_, expected, given=response.body)
64
64
65 def test_api_get_repos_with_root(self, user_util):
65 def test_api_get_repos_with_root(self, user_util):
66 repo_group = user_util.create_repo_group(auto_cleanup=True)
66 repo_group = user_util.create_repo_group(auto_cleanup=True)
67 repo_group_name = repo_group.group_name
67 repo_group_name = repo_group.group_name
68
68
69 user_util.create_repo(parent=repo_group)
69 user_util.create_repo(parent=repo_group)
70 user_util.create_repo(parent=repo_group)
70 user_util.create_repo(parent=repo_group)
71
71
72 # nested, should not show up
72 # nested, should not show up
73 user_util._test_name = '{}/'.format(repo_group_name)
73 user_util._test_name = '{}/'.format(repo_group_name)
74 sub_repo_group = user_util.create_repo_group(auto_cleanup=True)
74 sub_repo_group = user_util.create_repo_group(auto_cleanup=True)
75 user_util.create_repo(parent=sub_repo_group)
75 user_util.create_repo(parent=sub_repo_group)
76
76
77 id_, params = build_data(self.apikey, 'get_repos',
77 id_, params = build_data(self.apikey, 'get_repos',
78 root=repo_group_name, traverse=0)
78 root=repo_group_name, traverse=0)
79 response = api_call(self.app, params)
79 response = api_call(self.app, params)
80
80
81 result = []
81 result = []
82 for repo in RepoModel().get_repos_for_root(repo_group):
82 for repo in RepoModel().get_repos_for_root(repo_group):
83 result.append(repo.get_api_data(include_secrets=True))
83 result.append(repo.get_api_data(include_secrets=True))
84
84
85 assert len(result) == 2
85 assert len(result) == 2
86 expected = jsonify(result)
86 expected = jsonify(result)
87 assert_ok(id_, expected, given=response.body)
87 assert_ok(id_, expected, given=response.body)
88
88
89 def test_api_get_repos_with_root_and_traverse(self, user_util):
89 def test_api_get_repos_with_root_and_traverse(self, user_util):
90 repo_group = user_util.create_repo_group(auto_cleanup=True)
90 repo_group = user_util.create_repo_group(auto_cleanup=True)
91 repo_group_name = repo_group.group_name
91 repo_group_name = repo_group.group_name
92
92
93 user_util.create_repo(parent=repo_group)
93 user_util.create_repo(parent=repo_group)
94 user_util.create_repo(parent=repo_group)
94 user_util.create_repo(parent=repo_group)
95
95
96 # nested, should not show up
96 # nested, should not show up
97 user_util._test_name = '{}/'.format(repo_group_name)
97 user_util._test_name = '{}/'.format(repo_group_name)
98 sub_repo_group = user_util.create_repo_group(auto_cleanup=True)
98 sub_repo_group = user_util.create_repo_group(auto_cleanup=True)
99 user_util.create_repo(parent=sub_repo_group)
99 user_util.create_repo(parent=sub_repo_group)
100
100
101 id_, params = build_data(self.apikey, 'get_repos',
101 id_, params = build_data(self.apikey, 'get_repos',
102 root=repo_group_name, traverse=1)
102 root=repo_group_name, traverse=1)
103 response = api_call(self.app, params)
103 response = api_call(self.app, params)
104
104
105 result = []
105 result = []
106 for repo in RepoModel().get_repos_for_root(
106 for repo in RepoModel().get_repos_for_root(
107 repo_group_name, traverse=True):
107 repo_group_name, traverse=True):
108 result.append(repo.get_api_data(include_secrets=True))
108 result.append(repo.get_api_data(include_secrets=True))
109
109
110 assert len(result) == 3
110 assert len(result) == 3
111 expected = jsonify(result)
111 expected = jsonify(result)
112 assert_ok(id_, expected, given=response.body)
112 assert_ok(id_, expected, given=response.body)
113
113
114 def test_api_get_repos_non_admin(self):
114 def test_api_get_repos_non_admin(self):
115 id_, params = build_data(self.apikey_regular, 'get_repos')
115 id_, params = build_data(self.apikey_regular, 'get_repos')
116 response = api_call(self.app, params)
116 response = api_call(self.app, params)
117
117
118 user = User.get_by_username(self.TEST_USER_LOGIN)
118 user = User.get_by_username(self.TEST_USER_LOGIN)
119 allowed_repos = user.AuthUser.permissions['repositories']
119 allowed_repos = user.AuthUser().permissions['repositories']
120
120
121 result = []
121 result = []
122 for repo in RepoModel().get_all():
122 for repo in RepoModel().get_all():
123 perm = allowed_repos[repo.repo_name]
123 perm = allowed_repos[repo.repo_name]
124 if perm in ['repository.read', 'repository.write', 'repository.admin']:
124 if perm in ['repository.read', 'repository.write', 'repository.admin']:
125 result.append(repo.get_api_data())
125 result.append(repo.get_api_data())
126 ret = jsonify(result)
126 ret = jsonify(result)
127
127
128 expected = ret
128 expected = ret
129 assert_ok(id_, expected, given=response.body)
129 assert_ok(id_, expected, given=response.body)
@@ -1,779 +1,780 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2017 RhodeCode GmbH
3 # Copyright (C) 2011-2017 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 import logging
22 import logging
23
23
24 from rhodecode import events
24 from rhodecode import events
25 from rhodecode.api import jsonrpc_method, JSONRPCError, JSONRPCValidationError
25 from rhodecode.api import jsonrpc_method, JSONRPCError, JSONRPCValidationError
26 from rhodecode.api.utils import (
26 from rhodecode.api.utils import (
27 has_superadmin_permission, Optional, OAttr, get_repo_or_error,
27 has_superadmin_permission, Optional, OAttr, get_repo_or_error,
28 get_pull_request_or_error, get_commit_or_error, get_user_or_error,
28 get_pull_request_or_error, get_commit_or_error, get_user_or_error,
29 validate_repo_permissions, resolve_ref_or_error)
29 validate_repo_permissions, resolve_ref_or_error)
30 from rhodecode.lib.auth import (HasRepoPermissionAnyApi)
30 from rhodecode.lib.auth import (HasRepoPermissionAnyApi)
31 from rhodecode.lib.base import vcs_operation_context
31 from rhodecode.lib.base import vcs_operation_context
32 from rhodecode.lib.utils2 import str2bool
32 from rhodecode.lib.utils2 import str2bool
33 from rhodecode.model.changeset_status import ChangesetStatusModel
33 from rhodecode.model.changeset_status import ChangesetStatusModel
34 from rhodecode.model.comment import CommentsModel
34 from rhodecode.model.comment import CommentsModel
35 from rhodecode.model.db import Session, ChangesetStatus, ChangesetComment
35 from rhodecode.model.db import Session, ChangesetStatus, ChangesetComment
36 from rhodecode.model.pull_request import PullRequestModel, MergeCheck
36 from rhodecode.model.pull_request import PullRequestModel, MergeCheck
37 from rhodecode.model.settings import SettingsModel
37 from rhodecode.model.settings import SettingsModel
38 from rhodecode.model.validation_schema import Invalid
38 from rhodecode.model.validation_schema import Invalid
39 from rhodecode.model.validation_schema.schemas.reviewer_schema import(
39 from rhodecode.model.validation_schema.schemas.reviewer_schema import(
40 ReviewerListSchema)
40 ReviewerListSchema)
41
41
42 log = logging.getLogger(__name__)
42 log = logging.getLogger(__name__)
43
43
44
44
45 @jsonrpc_method()
45 @jsonrpc_method()
46 def get_pull_request(request, apiuser, repoid, pullrequestid):
46 def get_pull_request(request, apiuser, repoid, pullrequestid):
47 """
47 """
48 Get a pull request based on the given ID.
48 Get a pull request based on the given ID.
49
49
50 :param apiuser: This is filled automatically from the |authtoken|.
50 :param apiuser: This is filled automatically from the |authtoken|.
51 :type apiuser: AuthUser
51 :type apiuser: AuthUser
52 :param repoid: Repository name or repository ID from where the pull
52 :param repoid: Repository name or repository ID from where the pull
53 request was opened.
53 request was opened.
54 :type repoid: str or int
54 :type repoid: str or int
55 :param pullrequestid: ID of the requested pull request.
55 :param pullrequestid: ID of the requested pull request.
56 :type pullrequestid: int
56 :type pullrequestid: int
57
57
58 Example output:
58 Example output:
59
59
60 .. code-block:: bash
60 .. code-block:: bash
61
61
62 "id": <id_given_in_input>,
62 "id": <id_given_in_input>,
63 "result":
63 "result":
64 {
64 {
65 "pull_request_id": "<pull_request_id>",
65 "pull_request_id": "<pull_request_id>",
66 "url": "<url>",
66 "url": "<url>",
67 "title": "<title>",
67 "title": "<title>",
68 "description": "<description>",
68 "description": "<description>",
69 "status" : "<status>",
69 "status" : "<status>",
70 "created_on": "<date_time_created>",
70 "created_on": "<date_time_created>",
71 "updated_on": "<date_time_updated>",
71 "updated_on": "<date_time_updated>",
72 "commit_ids": [
72 "commit_ids": [
73 ...
73 ...
74 "<commit_id>",
74 "<commit_id>",
75 "<commit_id>",
75 "<commit_id>",
76 ...
76 ...
77 ],
77 ],
78 "review_status": "<review_status>",
78 "review_status": "<review_status>",
79 "mergeable": {
79 "mergeable": {
80 "status": "<bool>",
80 "status": "<bool>",
81 "message": "<message>",
81 "message": "<message>",
82 },
82 },
83 "source": {
83 "source": {
84 "clone_url": "<clone_url>",
84 "clone_url": "<clone_url>",
85 "repository": "<repository_name>",
85 "repository": "<repository_name>",
86 "reference":
86 "reference":
87 {
87 {
88 "name": "<name>",
88 "name": "<name>",
89 "type": "<type>",
89 "type": "<type>",
90 "commit_id": "<commit_id>",
90 "commit_id": "<commit_id>",
91 }
91 }
92 },
92 },
93 "target": {
93 "target": {
94 "clone_url": "<clone_url>",
94 "clone_url": "<clone_url>",
95 "repository": "<repository_name>",
95 "repository": "<repository_name>",
96 "reference":
96 "reference":
97 {
97 {
98 "name": "<name>",
98 "name": "<name>",
99 "type": "<type>",
99 "type": "<type>",
100 "commit_id": "<commit_id>",
100 "commit_id": "<commit_id>",
101 }
101 }
102 },
102 },
103 "merge": {
103 "merge": {
104 "clone_url": "<clone_url>",
104 "clone_url": "<clone_url>",
105 "reference":
105 "reference":
106 {
106 {
107 "name": "<name>",
107 "name": "<name>",
108 "type": "<type>",
108 "type": "<type>",
109 "commit_id": "<commit_id>",
109 "commit_id": "<commit_id>",
110 }
110 }
111 },
111 },
112 "author": <user_obj>,
112 "author": <user_obj>,
113 "reviewers": [
113 "reviewers": [
114 ...
114 ...
115 {
115 {
116 "user": "<user_obj>",
116 "user": "<user_obj>",
117 "review_status": "<review_status>",
117 "review_status": "<review_status>",
118 }
118 }
119 ...
119 ...
120 ]
120 ]
121 },
121 },
122 "error": null
122 "error": null
123 """
123 """
124 get_repo_or_error(repoid)
124 get_repo_or_error(repoid)
125 pull_request = get_pull_request_or_error(pullrequestid)
125 pull_request = get_pull_request_or_error(pullrequestid)
126 if not PullRequestModel().check_user_read(
126 if not PullRequestModel().check_user_read(
127 pull_request, apiuser, api=True):
127 pull_request, apiuser, api=True):
128 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
128 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
129 data = pull_request.get_api_data()
129 data = pull_request.get_api_data()
130 return data
130 return data
131
131
132
132
133 @jsonrpc_method()
133 @jsonrpc_method()
134 def get_pull_requests(request, apiuser, repoid, status=Optional('new')):
134 def get_pull_requests(request, apiuser, repoid, status=Optional('new')):
135 """
135 """
136 Get all pull requests from the repository specified in `repoid`.
136 Get all pull requests from the repository specified in `repoid`.
137
137
138 :param apiuser: This is filled automatically from the |authtoken|.
138 :param apiuser: This is filled automatically from the |authtoken|.
139 :type apiuser: AuthUser
139 :type apiuser: AuthUser
140 :param repoid: Repository name or repository ID.
140 :param repoid: Repository name or repository ID.
141 :type repoid: str or int
141 :type repoid: str or int
142 :param status: Only return pull requests with the specified status.
142 :param status: Only return pull requests with the specified status.
143 Valid options are.
143 Valid options are.
144 * ``new`` (default)
144 * ``new`` (default)
145 * ``open``
145 * ``open``
146 * ``closed``
146 * ``closed``
147 :type status: str
147 :type status: str
148
148
149 Example output:
149 Example output:
150
150
151 .. code-block:: bash
151 .. code-block:: bash
152
152
153 "id": <id_given_in_input>,
153 "id": <id_given_in_input>,
154 "result":
154 "result":
155 [
155 [
156 ...
156 ...
157 {
157 {
158 "pull_request_id": "<pull_request_id>",
158 "pull_request_id": "<pull_request_id>",
159 "url": "<url>",
159 "url": "<url>",
160 "title" : "<title>",
160 "title" : "<title>",
161 "description": "<description>",
161 "description": "<description>",
162 "status": "<status>",
162 "status": "<status>",
163 "created_on": "<date_time_created>",
163 "created_on": "<date_time_created>",
164 "updated_on": "<date_time_updated>",
164 "updated_on": "<date_time_updated>",
165 "commit_ids": [
165 "commit_ids": [
166 ...
166 ...
167 "<commit_id>",
167 "<commit_id>",
168 "<commit_id>",
168 "<commit_id>",
169 ...
169 ...
170 ],
170 ],
171 "review_status": "<review_status>",
171 "review_status": "<review_status>",
172 "mergeable": {
172 "mergeable": {
173 "status": "<bool>",
173 "status": "<bool>",
174 "message: "<message>",
174 "message: "<message>",
175 },
175 },
176 "source": {
176 "source": {
177 "clone_url": "<clone_url>",
177 "clone_url": "<clone_url>",
178 "reference":
178 "reference":
179 {
179 {
180 "name": "<name>",
180 "name": "<name>",
181 "type": "<type>",
181 "type": "<type>",
182 "commit_id": "<commit_id>",
182 "commit_id": "<commit_id>",
183 }
183 }
184 },
184 },
185 "target": {
185 "target": {
186 "clone_url": "<clone_url>",
186 "clone_url": "<clone_url>",
187 "reference":
187 "reference":
188 {
188 {
189 "name": "<name>",
189 "name": "<name>",
190 "type": "<type>",
190 "type": "<type>",
191 "commit_id": "<commit_id>",
191 "commit_id": "<commit_id>",
192 }
192 }
193 },
193 },
194 "merge": {
194 "merge": {
195 "clone_url": "<clone_url>",
195 "clone_url": "<clone_url>",
196 "reference":
196 "reference":
197 {
197 {
198 "name": "<name>",
198 "name": "<name>",
199 "type": "<type>",
199 "type": "<type>",
200 "commit_id": "<commit_id>",
200 "commit_id": "<commit_id>",
201 }
201 }
202 },
202 },
203 "author": <user_obj>,
203 "author": <user_obj>,
204 "reviewers": [
204 "reviewers": [
205 ...
205 ...
206 {
206 {
207 "user": "<user_obj>",
207 "user": "<user_obj>",
208 "review_status": "<review_status>",
208 "review_status": "<review_status>",
209 }
209 }
210 ...
210 ...
211 ]
211 ]
212 }
212 }
213 ...
213 ...
214 ],
214 ],
215 "error": null
215 "error": null
216
216
217 """
217 """
218 repo = get_repo_or_error(repoid)
218 repo = get_repo_or_error(repoid)
219 if not has_superadmin_permission(apiuser):
219 if not has_superadmin_permission(apiuser):
220 _perms = (
220 _perms = (
221 'repository.admin', 'repository.write', 'repository.read',)
221 'repository.admin', 'repository.write', 'repository.read',)
222 validate_repo_permissions(apiuser, repoid, repo, _perms)
222 validate_repo_permissions(apiuser, repoid, repo, _perms)
223
223
224 status = Optional.extract(status)
224 status = Optional.extract(status)
225 pull_requests = PullRequestModel().get_all(repo, statuses=[status])
225 pull_requests = PullRequestModel().get_all(repo, statuses=[status])
226 data = [pr.get_api_data() for pr in pull_requests]
226 data = [pr.get_api_data() for pr in pull_requests]
227 return data
227 return data
228
228
229
229
230 @jsonrpc_method()
230 @jsonrpc_method()
231 def merge_pull_request(
231 def merge_pull_request(
232 request, apiuser, repoid, pullrequestid,
232 request, apiuser, repoid, pullrequestid,
233 userid=Optional(OAttr('apiuser'))):
233 userid=Optional(OAttr('apiuser'))):
234 """
234 """
235 Merge the pull request specified by `pullrequestid` into its target
235 Merge the pull request specified by `pullrequestid` into its target
236 repository.
236 repository.
237
237
238 :param apiuser: This is filled automatically from the |authtoken|.
238 :param apiuser: This is filled automatically from the |authtoken|.
239 :type apiuser: AuthUser
239 :type apiuser: AuthUser
240 :param repoid: The Repository name or repository ID of the
240 :param repoid: The Repository name or repository ID of the
241 target repository to which the |pr| is to be merged.
241 target repository to which the |pr| is to be merged.
242 :type repoid: str or int
242 :type repoid: str or int
243 :param pullrequestid: ID of the pull request which shall be merged.
243 :param pullrequestid: ID of the pull request which shall be merged.
244 :type pullrequestid: int
244 :type pullrequestid: int
245 :param userid: Merge the pull request as this user.
245 :param userid: Merge the pull request as this user.
246 :type userid: Optional(str or int)
246 :type userid: Optional(str or int)
247
247
248 Example output:
248 Example output:
249
249
250 .. code-block:: bash
250 .. code-block:: bash
251
251
252 "id": <id_given_in_input>,
252 "id": <id_given_in_input>,
253 "result": {
253 "result": {
254 "executed": "<bool>",
254 "executed": "<bool>",
255 "failure_reason": "<int>",
255 "failure_reason": "<int>",
256 "merge_commit_id": "<merge_commit_id>",
256 "merge_commit_id": "<merge_commit_id>",
257 "possible": "<bool>",
257 "possible": "<bool>",
258 "merge_ref": {
258 "merge_ref": {
259 "commit_id": "<commit_id>",
259 "commit_id": "<commit_id>",
260 "type": "<type>",
260 "type": "<type>",
261 "name": "<name>"
261 "name": "<name>"
262 }
262 }
263 },
263 },
264 "error": null
264 "error": null
265 """
265 """
266 repo = get_repo_or_error(repoid)
266 repo = get_repo_or_error(repoid)
267 if not isinstance(userid, Optional):
267 if not isinstance(userid, Optional):
268 if (has_superadmin_permission(apiuser) or
268 if (has_superadmin_permission(apiuser) or
269 HasRepoPermissionAnyApi('repository.admin')(
269 HasRepoPermissionAnyApi('repository.admin')(
270 user=apiuser, repo_name=repo.repo_name)):
270 user=apiuser, repo_name=repo.repo_name)):
271 apiuser = get_user_or_error(userid)
271 apiuser = get_user_or_error(userid)
272 else:
272 else:
273 raise JSONRPCError('userid is not the same as your user')
273 raise JSONRPCError('userid is not the same as your user')
274
274
275 pull_request = get_pull_request_or_error(pullrequestid)
275 pull_request = get_pull_request_or_error(pullrequestid)
276
276
277 check = MergeCheck.validate(pull_request, user=apiuser)
277 check = MergeCheck.validate(
278 pull_request, user=apiuser, translator=request.translate)
278 merge_possible = not check.failed
279 merge_possible = not check.failed
279
280
280 if not merge_possible:
281 if not merge_possible:
281 error_messages = []
282 error_messages = []
282 for err_type, error_msg in check.errors:
283 for err_type, error_msg in check.errors:
283 error_msg = request.translate(error_msg)
284 error_msg = request.translate(error_msg)
284 error_messages.append(error_msg)
285 error_messages.append(error_msg)
285
286
286 reasons = ','.join(error_messages)
287 reasons = ','.join(error_messages)
287 raise JSONRPCError(
288 raise JSONRPCError(
288 'merge not possible for following reasons: {}'.format(reasons))
289 'merge not possible for following reasons: {}'.format(reasons))
289
290
290 target_repo = pull_request.target_repo
291 target_repo = pull_request.target_repo
291 extras = vcs_operation_context(
292 extras = vcs_operation_context(
292 request.environ, repo_name=target_repo.repo_name,
293 request.environ, repo_name=target_repo.repo_name,
293 username=apiuser.username, action='push',
294 username=apiuser.username, action='push',
294 scm=target_repo.repo_type)
295 scm=target_repo.repo_type)
295 merge_response = PullRequestModel().merge(
296 merge_response = PullRequestModel().merge(
296 pull_request, apiuser, extras=extras)
297 pull_request, apiuser, extras=extras)
297 if merge_response.executed:
298 if merge_response.executed:
298 PullRequestModel().close_pull_request(
299 PullRequestModel().close_pull_request(
299 pull_request.pull_request_id, apiuser)
300 pull_request.pull_request_id, apiuser)
300
301
301 Session().commit()
302 Session().commit()
302
303
303 # In previous versions the merge response directly contained the merge
304 # In previous versions the merge response directly contained the merge
304 # commit id. It is now contained in the merge reference object. To be
305 # commit id. It is now contained in the merge reference object. To be
305 # backwards compatible we have to extract it again.
306 # backwards compatible we have to extract it again.
306 merge_response = merge_response._asdict()
307 merge_response = merge_response._asdict()
307 merge_response['merge_commit_id'] = merge_response['merge_ref'].commit_id
308 merge_response['merge_commit_id'] = merge_response['merge_ref'].commit_id
308
309
309 return merge_response
310 return merge_response
310
311
311
312
312 @jsonrpc_method()
313 @jsonrpc_method()
313 def comment_pull_request(
314 def comment_pull_request(
314 request, apiuser, repoid, pullrequestid, message=Optional(None),
315 request, apiuser, repoid, pullrequestid, message=Optional(None),
315 commit_id=Optional(None), status=Optional(None),
316 commit_id=Optional(None), status=Optional(None),
316 comment_type=Optional(ChangesetComment.COMMENT_TYPE_NOTE),
317 comment_type=Optional(ChangesetComment.COMMENT_TYPE_NOTE),
317 resolves_comment_id=Optional(None),
318 resolves_comment_id=Optional(None),
318 userid=Optional(OAttr('apiuser'))):
319 userid=Optional(OAttr('apiuser'))):
319 """
320 """
320 Comment on the pull request specified with the `pullrequestid`,
321 Comment on the pull request specified with the `pullrequestid`,
321 in the |repo| specified by the `repoid`, and optionally change the
322 in the |repo| specified by the `repoid`, and optionally change the
322 review status.
323 review status.
323
324
324 :param apiuser: This is filled automatically from the |authtoken|.
325 :param apiuser: This is filled automatically from the |authtoken|.
325 :type apiuser: AuthUser
326 :type apiuser: AuthUser
326 :param repoid: The repository name or repository ID.
327 :param repoid: The repository name or repository ID.
327 :type repoid: str or int
328 :type repoid: str or int
328 :param pullrequestid: The pull request ID.
329 :param pullrequestid: The pull request ID.
329 :type pullrequestid: int
330 :type pullrequestid: int
330 :param commit_id: Specify the commit_id for which to set a comment. If
331 :param commit_id: Specify the commit_id for which to set a comment. If
331 given commit_id is different than latest in the PR status
332 given commit_id is different than latest in the PR status
332 change won't be performed.
333 change won't be performed.
333 :type commit_id: str
334 :type commit_id: str
334 :param message: The text content of the comment.
335 :param message: The text content of the comment.
335 :type message: str
336 :type message: str
336 :param status: (**Optional**) Set the approval status of the pull
337 :param status: (**Optional**) Set the approval status of the pull
337 request. One of: 'not_reviewed', 'approved', 'rejected',
338 request. One of: 'not_reviewed', 'approved', 'rejected',
338 'under_review'
339 'under_review'
339 :type status: str
340 :type status: str
340 :param comment_type: Comment type, one of: 'note', 'todo'
341 :param comment_type: Comment type, one of: 'note', 'todo'
341 :type comment_type: Optional(str), default: 'note'
342 :type comment_type: Optional(str), default: 'note'
342 :param userid: Comment on the pull request as this user
343 :param userid: Comment on the pull request as this user
343 :type userid: Optional(str or int)
344 :type userid: Optional(str or int)
344
345
345 Example output:
346 Example output:
346
347
347 .. code-block:: bash
348 .. code-block:: bash
348
349
349 id : <id_given_in_input>
350 id : <id_given_in_input>
350 result : {
351 result : {
351 "pull_request_id": "<Integer>",
352 "pull_request_id": "<Integer>",
352 "comment_id": "<Integer>",
353 "comment_id": "<Integer>",
353 "status": {"given": <given_status>,
354 "status": {"given": <given_status>,
354 "was_changed": <bool status_was_actually_changed> },
355 "was_changed": <bool status_was_actually_changed> },
355 },
356 },
356 error : null
357 error : null
357 """
358 """
358 repo = get_repo_or_error(repoid)
359 repo = get_repo_or_error(repoid)
359 if not isinstance(userid, Optional):
360 if not isinstance(userid, Optional):
360 if (has_superadmin_permission(apiuser) or
361 if (has_superadmin_permission(apiuser) or
361 HasRepoPermissionAnyApi('repository.admin')(
362 HasRepoPermissionAnyApi('repository.admin')(
362 user=apiuser, repo_name=repo.repo_name)):
363 user=apiuser, repo_name=repo.repo_name)):
363 apiuser = get_user_or_error(userid)
364 apiuser = get_user_or_error(userid)
364 else:
365 else:
365 raise JSONRPCError('userid is not the same as your user')
366 raise JSONRPCError('userid is not the same as your user')
366
367
367 pull_request = get_pull_request_or_error(pullrequestid)
368 pull_request = get_pull_request_or_error(pullrequestid)
368 if not PullRequestModel().check_user_read(
369 if not PullRequestModel().check_user_read(
369 pull_request, apiuser, api=True):
370 pull_request, apiuser, api=True):
370 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
371 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
371 message = Optional.extract(message)
372 message = Optional.extract(message)
372 status = Optional.extract(status)
373 status = Optional.extract(status)
373 commit_id = Optional.extract(commit_id)
374 commit_id = Optional.extract(commit_id)
374 comment_type = Optional.extract(comment_type)
375 comment_type = Optional.extract(comment_type)
375 resolves_comment_id = Optional.extract(resolves_comment_id)
376 resolves_comment_id = Optional.extract(resolves_comment_id)
376
377
377 if not message and not status:
378 if not message and not status:
378 raise JSONRPCError(
379 raise JSONRPCError(
379 'Both message and status parameters are missing. '
380 'Both message and status parameters are missing. '
380 'At least one is required.')
381 'At least one is required.')
381
382
382 if (status not in (st[0] for st in ChangesetStatus.STATUSES) and
383 if (status not in (st[0] for st in ChangesetStatus.STATUSES) and
383 status is not None):
384 status is not None):
384 raise JSONRPCError('Unknown comment status: `%s`' % status)
385 raise JSONRPCError('Unknown comment status: `%s`' % status)
385
386
386 if commit_id and commit_id not in pull_request.revisions:
387 if commit_id and commit_id not in pull_request.revisions:
387 raise JSONRPCError(
388 raise JSONRPCError(
388 'Invalid commit_id `%s` for this pull request.' % commit_id)
389 'Invalid commit_id `%s` for this pull request.' % commit_id)
389
390
390 allowed_to_change_status = PullRequestModel().check_user_change_status(
391 allowed_to_change_status = PullRequestModel().check_user_change_status(
391 pull_request, apiuser)
392 pull_request, apiuser)
392
393
393 # if commit_id is passed re-validated if user is allowed to change status
394 # if commit_id is passed re-validated if user is allowed to change status
394 # based on latest commit_id from the PR
395 # based on latest commit_id from the PR
395 if commit_id:
396 if commit_id:
396 commit_idx = pull_request.revisions.index(commit_id)
397 commit_idx = pull_request.revisions.index(commit_id)
397 if commit_idx != 0:
398 if commit_idx != 0:
398 allowed_to_change_status = False
399 allowed_to_change_status = False
399
400
400 if resolves_comment_id:
401 if resolves_comment_id:
401 comment = ChangesetComment.get(resolves_comment_id)
402 comment = ChangesetComment.get(resolves_comment_id)
402 if not comment:
403 if not comment:
403 raise JSONRPCError(
404 raise JSONRPCError(
404 'Invalid resolves_comment_id `%s` for this pull request.'
405 'Invalid resolves_comment_id `%s` for this pull request.'
405 % resolves_comment_id)
406 % resolves_comment_id)
406 if comment.comment_type != ChangesetComment.COMMENT_TYPE_TODO:
407 if comment.comment_type != ChangesetComment.COMMENT_TYPE_TODO:
407 raise JSONRPCError(
408 raise JSONRPCError(
408 'Comment `%s` is wrong type for setting status to resolved.'
409 'Comment `%s` is wrong type for setting status to resolved.'
409 % resolves_comment_id)
410 % resolves_comment_id)
410
411
411 text = message
412 text = message
412 status_label = ChangesetStatus.get_status_lbl(status)
413 status_label = ChangesetStatus.get_status_lbl(status)
413 if status and allowed_to_change_status:
414 if status and allowed_to_change_status:
414 st_message = ('Status change %(transition_icon)s %(status)s'
415 st_message = ('Status change %(transition_icon)s %(status)s'
415 % {'transition_icon': '>', 'status': status_label})
416 % {'transition_icon': '>', 'status': status_label})
416 text = message or st_message
417 text = message or st_message
417
418
418 rc_config = SettingsModel().get_all_settings()
419 rc_config = SettingsModel().get_all_settings()
419 renderer = rc_config.get('rhodecode_markup_renderer', 'rst')
420 renderer = rc_config.get('rhodecode_markup_renderer', 'rst')
420
421
421 status_change = status and allowed_to_change_status
422 status_change = status and allowed_to_change_status
422 comment = CommentsModel().create(
423 comment = CommentsModel().create(
423 text=text,
424 text=text,
424 repo=pull_request.target_repo.repo_id,
425 repo=pull_request.target_repo.repo_id,
425 user=apiuser.user_id,
426 user=apiuser.user_id,
426 pull_request=pull_request.pull_request_id,
427 pull_request=pull_request.pull_request_id,
427 f_path=None,
428 f_path=None,
428 line_no=None,
429 line_no=None,
429 status_change=(status_label if status_change else None),
430 status_change=(status_label if status_change else None),
430 status_change_type=(status if status_change else None),
431 status_change_type=(status if status_change else None),
431 closing_pr=False,
432 closing_pr=False,
432 renderer=renderer,
433 renderer=renderer,
433 comment_type=comment_type,
434 comment_type=comment_type,
434 resolves_comment_id=resolves_comment_id
435 resolves_comment_id=resolves_comment_id
435 )
436 )
436
437
437 if allowed_to_change_status and status:
438 if allowed_to_change_status and status:
438 ChangesetStatusModel().set_status(
439 ChangesetStatusModel().set_status(
439 pull_request.target_repo.repo_id,
440 pull_request.target_repo.repo_id,
440 status,
441 status,
441 apiuser.user_id,
442 apiuser.user_id,
442 comment,
443 comment,
443 pull_request=pull_request.pull_request_id
444 pull_request=pull_request.pull_request_id
444 )
445 )
445 Session().flush()
446 Session().flush()
446
447
447 Session().commit()
448 Session().commit()
448 data = {
449 data = {
449 'pull_request_id': pull_request.pull_request_id,
450 'pull_request_id': pull_request.pull_request_id,
450 'comment_id': comment.comment_id if comment else None,
451 'comment_id': comment.comment_id if comment else None,
451 'status': {'given': status, 'was_changed': status_change},
452 'status': {'given': status, 'was_changed': status_change},
452 }
453 }
453 return data
454 return data
454
455
455
456
456 @jsonrpc_method()
457 @jsonrpc_method()
457 def create_pull_request(
458 def create_pull_request(
458 request, apiuser, source_repo, target_repo, source_ref, target_ref,
459 request, apiuser, source_repo, target_repo, source_ref, target_ref,
459 title, description=Optional(''), reviewers=Optional(None)):
460 title, description=Optional(''), reviewers=Optional(None)):
460 """
461 """
461 Creates a new pull request.
462 Creates a new pull request.
462
463
463 Accepts refs in the following formats:
464 Accepts refs in the following formats:
464
465
465 * branch:<branch_name>:<sha>
466 * branch:<branch_name>:<sha>
466 * branch:<branch_name>
467 * branch:<branch_name>
467 * bookmark:<bookmark_name>:<sha> (Mercurial only)
468 * bookmark:<bookmark_name>:<sha> (Mercurial only)
468 * bookmark:<bookmark_name> (Mercurial only)
469 * bookmark:<bookmark_name> (Mercurial only)
469
470
470 :param apiuser: This is filled automatically from the |authtoken|.
471 :param apiuser: This is filled automatically from the |authtoken|.
471 :type apiuser: AuthUser
472 :type apiuser: AuthUser
472 :param source_repo: Set the source repository name.
473 :param source_repo: Set the source repository name.
473 :type source_repo: str
474 :type source_repo: str
474 :param target_repo: Set the target repository name.
475 :param target_repo: Set the target repository name.
475 :type target_repo: str
476 :type target_repo: str
476 :param source_ref: Set the source ref name.
477 :param source_ref: Set the source ref name.
477 :type source_ref: str
478 :type source_ref: str
478 :param target_ref: Set the target ref name.
479 :param target_ref: Set the target ref name.
479 :type target_ref: str
480 :type target_ref: str
480 :param title: Set the pull request title.
481 :param title: Set the pull request title.
481 :type title: str
482 :type title: str
482 :param description: Set the pull request description.
483 :param description: Set the pull request description.
483 :type description: Optional(str)
484 :type description: Optional(str)
484 :param reviewers: Set the new pull request reviewers list.
485 :param reviewers: Set the new pull request reviewers list.
485 Reviewer defined by review rules will be added automatically to the
486 Reviewer defined by review rules will be added automatically to the
486 defined list.
487 defined list.
487 :type reviewers: Optional(list)
488 :type reviewers: Optional(list)
488 Accepts username strings or objects of the format:
489 Accepts username strings or objects of the format:
489
490
490 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
491 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
491 """
492 """
492
493
493 source_db_repo = get_repo_or_error(source_repo)
494 source_db_repo = get_repo_or_error(source_repo)
494 target_db_repo = get_repo_or_error(target_repo)
495 target_db_repo = get_repo_or_error(target_repo)
495 if not has_superadmin_permission(apiuser):
496 if not has_superadmin_permission(apiuser):
496 _perms = ('repository.admin', 'repository.write', 'repository.read',)
497 _perms = ('repository.admin', 'repository.write', 'repository.read',)
497 validate_repo_permissions(apiuser, source_repo, source_db_repo, _perms)
498 validate_repo_permissions(apiuser, source_repo, source_db_repo, _perms)
498
499
499 full_source_ref = resolve_ref_or_error(source_ref, source_db_repo)
500 full_source_ref = resolve_ref_or_error(source_ref, source_db_repo)
500 full_target_ref = resolve_ref_or_error(target_ref, target_db_repo)
501 full_target_ref = resolve_ref_or_error(target_ref, target_db_repo)
501 source_commit = get_commit_or_error(full_source_ref, source_db_repo)
502 source_commit = get_commit_or_error(full_source_ref, source_db_repo)
502 target_commit = get_commit_or_error(full_target_ref, target_db_repo)
503 target_commit = get_commit_or_error(full_target_ref, target_db_repo)
503 source_scm = source_db_repo.scm_instance()
504 source_scm = source_db_repo.scm_instance()
504 target_scm = target_db_repo.scm_instance()
505 target_scm = target_db_repo.scm_instance()
505
506
506 commit_ranges = target_scm.compare(
507 commit_ranges = target_scm.compare(
507 target_commit.raw_id, source_commit.raw_id, source_scm,
508 target_commit.raw_id, source_commit.raw_id, source_scm,
508 merge=True, pre_load=[])
509 merge=True, pre_load=[])
509
510
510 ancestor = target_scm.get_common_ancestor(
511 ancestor = target_scm.get_common_ancestor(
511 target_commit.raw_id, source_commit.raw_id, source_scm)
512 target_commit.raw_id, source_commit.raw_id, source_scm)
512
513
513 if not commit_ranges:
514 if not commit_ranges:
514 raise JSONRPCError('no commits found')
515 raise JSONRPCError('no commits found')
515
516
516 if not ancestor:
517 if not ancestor:
517 raise JSONRPCError('no common ancestor found')
518 raise JSONRPCError('no common ancestor found')
518
519
519 reviewer_objects = Optional.extract(reviewers) or []
520 reviewer_objects = Optional.extract(reviewers) or []
520
521
521 if reviewer_objects:
522 if reviewer_objects:
522 schema = ReviewerListSchema()
523 schema = ReviewerListSchema()
523 try:
524 try:
524 reviewer_objects = schema.deserialize(reviewer_objects)
525 reviewer_objects = schema.deserialize(reviewer_objects)
525 except Invalid as err:
526 except Invalid as err:
526 raise JSONRPCValidationError(colander_exc=err)
527 raise JSONRPCValidationError(colander_exc=err)
527
528
528 # validate users
529 # validate users
529 for reviewer_object in reviewer_objects:
530 for reviewer_object in reviewer_objects:
530 user = get_user_or_error(reviewer_object['username'])
531 user = get_user_or_error(reviewer_object['username'])
531 reviewer_object['user_id'] = user.user_id
532 reviewer_object['user_id'] = user.user_id
532
533
533 get_default_reviewers_data, get_validated_reviewers = \
534 get_default_reviewers_data, get_validated_reviewers = \
534 PullRequestModel().get_reviewer_functions()
535 PullRequestModel().get_reviewer_functions()
535
536
536 reviewer_rules = get_default_reviewers_data(
537 reviewer_rules = get_default_reviewers_data(
537 apiuser.get_instance(), source_db_repo,
538 apiuser.get_instance(), source_db_repo,
538 source_commit, target_db_repo, target_commit)
539 source_commit, target_db_repo, target_commit)
539
540
540 # specified rules are later re-validated, thus we can assume users will
541 # specified rules are later re-validated, thus we can assume users will
541 # eventually provide those that meet the reviewer criteria.
542 # eventually provide those that meet the reviewer criteria.
542 if not reviewer_objects:
543 if not reviewer_objects:
543 reviewer_objects = reviewer_rules['reviewers']
544 reviewer_objects = reviewer_rules['reviewers']
544
545
545 try:
546 try:
546 reviewers = get_validated_reviewers(
547 reviewers = get_validated_reviewers(
547 reviewer_objects, reviewer_rules)
548 reviewer_objects, reviewer_rules)
548 except ValueError as e:
549 except ValueError as e:
549 raise JSONRPCError('Reviewers Validation: {}'.format(e))
550 raise JSONRPCError('Reviewers Validation: {}'.format(e))
550
551
551 pull_request_model = PullRequestModel()
552 pull_request_model = PullRequestModel()
552 pull_request = pull_request_model.create(
553 pull_request = pull_request_model.create(
553 created_by=apiuser.user_id,
554 created_by=apiuser.user_id,
554 source_repo=source_repo,
555 source_repo=source_repo,
555 source_ref=full_source_ref,
556 source_ref=full_source_ref,
556 target_repo=target_repo,
557 target_repo=target_repo,
557 target_ref=full_target_ref,
558 target_ref=full_target_ref,
558 revisions=reversed(
559 revisions=reversed(
559 [commit.raw_id for commit in reversed(commit_ranges)]),
560 [commit.raw_id for commit in reversed(commit_ranges)]),
560 reviewers=reviewers,
561 reviewers=reviewers,
561 title=title,
562 title=title,
562 description=Optional.extract(description)
563 description=Optional.extract(description)
563 )
564 )
564
565
565 Session().commit()
566 Session().commit()
566 data = {
567 data = {
567 'msg': 'Created new pull request `{}`'.format(title),
568 'msg': 'Created new pull request `{}`'.format(title),
568 'pull_request_id': pull_request.pull_request_id,
569 'pull_request_id': pull_request.pull_request_id,
569 }
570 }
570 return data
571 return data
571
572
572
573
573 @jsonrpc_method()
574 @jsonrpc_method()
574 def update_pull_request(
575 def update_pull_request(
575 request, apiuser, repoid, pullrequestid, title=Optional(''),
576 request, apiuser, repoid, pullrequestid, title=Optional(''),
576 description=Optional(''), reviewers=Optional(None),
577 description=Optional(''), reviewers=Optional(None),
577 update_commits=Optional(None)):
578 update_commits=Optional(None)):
578 """
579 """
579 Updates a pull request.
580 Updates a pull request.
580
581
581 :param apiuser: This is filled automatically from the |authtoken|.
582 :param apiuser: This is filled automatically from the |authtoken|.
582 :type apiuser: AuthUser
583 :type apiuser: AuthUser
583 :param repoid: The repository name or repository ID.
584 :param repoid: The repository name or repository ID.
584 :type repoid: str or int
585 :type repoid: str or int
585 :param pullrequestid: The pull request ID.
586 :param pullrequestid: The pull request ID.
586 :type pullrequestid: int
587 :type pullrequestid: int
587 :param title: Set the pull request title.
588 :param title: Set the pull request title.
588 :type title: str
589 :type title: str
589 :param description: Update pull request description.
590 :param description: Update pull request description.
590 :type description: Optional(str)
591 :type description: Optional(str)
591 :param reviewers: Update pull request reviewers list with new value.
592 :param reviewers: Update pull request reviewers list with new value.
592 :type reviewers: Optional(list)
593 :type reviewers: Optional(list)
593 Accepts username strings or objects of the format:
594 Accepts username strings or objects of the format:
594
595
595 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
596 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
596
597
597 :param update_commits: Trigger update of commits for this pull request
598 :param update_commits: Trigger update of commits for this pull request
598 :type: update_commits: Optional(bool)
599 :type: update_commits: Optional(bool)
599
600
600 Example output:
601 Example output:
601
602
602 .. code-block:: bash
603 .. code-block:: bash
603
604
604 id : <id_given_in_input>
605 id : <id_given_in_input>
605 result : {
606 result : {
606 "msg": "Updated pull request `63`",
607 "msg": "Updated pull request `63`",
607 "pull_request": <pull_request_object>,
608 "pull_request": <pull_request_object>,
608 "updated_reviewers": {
609 "updated_reviewers": {
609 "added": [
610 "added": [
610 "username"
611 "username"
611 ],
612 ],
612 "removed": []
613 "removed": []
613 },
614 },
614 "updated_commits": {
615 "updated_commits": {
615 "added": [
616 "added": [
616 "<sha1_hash>"
617 "<sha1_hash>"
617 ],
618 ],
618 "common": [
619 "common": [
619 "<sha1_hash>",
620 "<sha1_hash>",
620 "<sha1_hash>",
621 "<sha1_hash>",
621 ],
622 ],
622 "removed": []
623 "removed": []
623 }
624 }
624 }
625 }
625 error : null
626 error : null
626 """
627 """
627
628
628 repo = get_repo_or_error(repoid)
629 repo = get_repo_or_error(repoid)
629 pull_request = get_pull_request_or_error(pullrequestid)
630 pull_request = get_pull_request_or_error(pullrequestid)
630 if not PullRequestModel().check_user_update(
631 if not PullRequestModel().check_user_update(
631 pull_request, apiuser, api=True):
632 pull_request, apiuser, api=True):
632 raise JSONRPCError(
633 raise JSONRPCError(
633 'pull request `%s` update failed, no permission to update.' % (
634 'pull request `%s` update failed, no permission to update.' % (
634 pullrequestid,))
635 pullrequestid,))
635 if pull_request.is_closed():
636 if pull_request.is_closed():
636 raise JSONRPCError(
637 raise JSONRPCError(
637 'pull request `%s` update failed, pull request is closed' % (
638 'pull request `%s` update failed, pull request is closed' % (
638 pullrequestid,))
639 pullrequestid,))
639
640
640 reviewer_objects = Optional.extract(reviewers) or []
641 reviewer_objects = Optional.extract(reviewers) or []
641
642
642 if reviewer_objects:
643 if reviewer_objects:
643 schema = ReviewerListSchema()
644 schema = ReviewerListSchema()
644 try:
645 try:
645 reviewer_objects = schema.deserialize(reviewer_objects)
646 reviewer_objects = schema.deserialize(reviewer_objects)
646 except Invalid as err:
647 except Invalid as err:
647 raise JSONRPCValidationError(colander_exc=err)
648 raise JSONRPCValidationError(colander_exc=err)
648
649
649 # validate users
650 # validate users
650 for reviewer_object in reviewer_objects:
651 for reviewer_object in reviewer_objects:
651 user = get_user_or_error(reviewer_object['username'])
652 user = get_user_or_error(reviewer_object['username'])
652 reviewer_object['user_id'] = user.user_id
653 reviewer_object['user_id'] = user.user_id
653
654
654 get_default_reviewers_data, get_validated_reviewers = \
655 get_default_reviewers_data, get_validated_reviewers = \
655 PullRequestModel().get_reviewer_functions()
656 PullRequestModel().get_reviewer_functions()
656
657
657 # re-use stored rules
658 # re-use stored rules
658 reviewer_rules = pull_request.reviewer_data
659 reviewer_rules = pull_request.reviewer_data
659 try:
660 try:
660 reviewers = get_validated_reviewers(
661 reviewers = get_validated_reviewers(
661 reviewer_objects, reviewer_rules)
662 reviewer_objects, reviewer_rules)
662 except ValueError as e:
663 except ValueError as e:
663 raise JSONRPCError('Reviewers Validation: {}'.format(e))
664 raise JSONRPCError('Reviewers Validation: {}'.format(e))
664 else:
665 else:
665 reviewers = []
666 reviewers = []
666
667
667 title = Optional.extract(title)
668 title = Optional.extract(title)
668 description = Optional.extract(description)
669 description = Optional.extract(description)
669 if title or description:
670 if title or description:
670 PullRequestModel().edit(
671 PullRequestModel().edit(
671 pull_request, title or pull_request.title,
672 pull_request, title or pull_request.title,
672 description or pull_request.description, apiuser)
673 description or pull_request.description, apiuser)
673 Session().commit()
674 Session().commit()
674
675
675 commit_changes = {"added": [], "common": [], "removed": []}
676 commit_changes = {"added": [], "common": [], "removed": []}
676 if str2bool(Optional.extract(update_commits)):
677 if str2bool(Optional.extract(update_commits)):
677 if PullRequestModel().has_valid_update_type(pull_request):
678 if PullRequestModel().has_valid_update_type(pull_request):
678 update_response = PullRequestModel().update_commits(
679 update_response = PullRequestModel().update_commits(
679 pull_request)
680 pull_request)
680 commit_changes = update_response.changes or commit_changes
681 commit_changes = update_response.changes or commit_changes
681 Session().commit()
682 Session().commit()
682
683
683 reviewers_changes = {"added": [], "removed": []}
684 reviewers_changes = {"added": [], "removed": []}
684 if reviewers:
685 if reviewers:
685 added_reviewers, removed_reviewers = \
686 added_reviewers, removed_reviewers = \
686 PullRequestModel().update_reviewers(pull_request, reviewers, apiuser)
687 PullRequestModel().update_reviewers(pull_request, reviewers, apiuser)
687
688
688 reviewers_changes['added'] = sorted(
689 reviewers_changes['added'] = sorted(
689 [get_user_or_error(n).username for n in added_reviewers])
690 [get_user_or_error(n).username for n in added_reviewers])
690 reviewers_changes['removed'] = sorted(
691 reviewers_changes['removed'] = sorted(
691 [get_user_or_error(n).username for n in removed_reviewers])
692 [get_user_or_error(n).username for n in removed_reviewers])
692 Session().commit()
693 Session().commit()
693
694
694 data = {
695 data = {
695 'msg': 'Updated pull request `{}`'.format(
696 'msg': 'Updated pull request `{}`'.format(
696 pull_request.pull_request_id),
697 pull_request.pull_request_id),
697 'pull_request': pull_request.get_api_data(),
698 'pull_request': pull_request.get_api_data(),
698 'updated_commits': commit_changes,
699 'updated_commits': commit_changes,
699 'updated_reviewers': reviewers_changes
700 'updated_reviewers': reviewers_changes
700 }
701 }
701
702
702 return data
703 return data
703
704
704
705
705 @jsonrpc_method()
706 @jsonrpc_method()
706 def close_pull_request(
707 def close_pull_request(
707 request, apiuser, repoid, pullrequestid,
708 request, apiuser, repoid, pullrequestid,
708 userid=Optional(OAttr('apiuser')), message=Optional('')):
709 userid=Optional(OAttr('apiuser')), message=Optional('')):
709 """
710 """
710 Close the pull request specified by `pullrequestid`.
711 Close the pull request specified by `pullrequestid`.
711
712
712 :param apiuser: This is filled automatically from the |authtoken|.
713 :param apiuser: This is filled automatically from the |authtoken|.
713 :type apiuser: AuthUser
714 :type apiuser: AuthUser
714 :param repoid: Repository name or repository ID to which the pull
715 :param repoid: Repository name or repository ID to which the pull
715 request belongs.
716 request belongs.
716 :type repoid: str or int
717 :type repoid: str or int
717 :param pullrequestid: ID of the pull request to be closed.
718 :param pullrequestid: ID of the pull request to be closed.
718 :type pullrequestid: int
719 :type pullrequestid: int
719 :param userid: Close the pull request as this user.
720 :param userid: Close the pull request as this user.
720 :type userid: Optional(str or int)
721 :type userid: Optional(str or int)
721 :param message: Optional message to close the Pull Request with. If not
722 :param message: Optional message to close the Pull Request with. If not
722 specified it will be generated automatically.
723 specified it will be generated automatically.
723 :type message: Optional(str)
724 :type message: Optional(str)
724
725
725 Example output:
726 Example output:
726
727
727 .. code-block:: bash
728 .. code-block:: bash
728
729
729 "id": <id_given_in_input>,
730 "id": <id_given_in_input>,
730 "result": {
731 "result": {
731 "pull_request_id": "<int>",
732 "pull_request_id": "<int>",
732 "close_status": "<str:status_lbl>,
733 "close_status": "<str:status_lbl>,
733 "closed": "<bool>"
734 "closed": "<bool>"
734 },
735 },
735 "error": null
736 "error": null
736
737
737 """
738 """
738 _ = request.translate
739 _ = request.translate
739
740
740 repo = get_repo_or_error(repoid)
741 repo = get_repo_or_error(repoid)
741 if not isinstance(userid, Optional):
742 if not isinstance(userid, Optional):
742 if (has_superadmin_permission(apiuser) or
743 if (has_superadmin_permission(apiuser) or
743 HasRepoPermissionAnyApi('repository.admin')(
744 HasRepoPermissionAnyApi('repository.admin')(
744 user=apiuser, repo_name=repo.repo_name)):
745 user=apiuser, repo_name=repo.repo_name)):
745 apiuser = get_user_or_error(userid)
746 apiuser = get_user_or_error(userid)
746 else:
747 else:
747 raise JSONRPCError('userid is not the same as your user')
748 raise JSONRPCError('userid is not the same as your user')
748
749
749 pull_request = get_pull_request_or_error(pullrequestid)
750 pull_request = get_pull_request_or_error(pullrequestid)
750
751
751 if pull_request.is_closed():
752 if pull_request.is_closed():
752 raise JSONRPCError(
753 raise JSONRPCError(
753 'pull request `%s` is already closed' % (pullrequestid,))
754 'pull request `%s` is already closed' % (pullrequestid,))
754
755
755 # only owner or admin or person with write permissions
756 # only owner or admin or person with write permissions
756 allowed_to_close = PullRequestModel().check_user_update(
757 allowed_to_close = PullRequestModel().check_user_update(
757 pull_request, apiuser, api=True)
758 pull_request, apiuser, api=True)
758
759
759 if not allowed_to_close:
760 if not allowed_to_close:
760 raise JSONRPCError(
761 raise JSONRPCError(
761 'pull request `%s` close failed, no permission to close.' % (
762 'pull request `%s` close failed, no permission to close.' % (
762 pullrequestid,))
763 pullrequestid,))
763
764
764 # message we're using to close the PR, else it's automatically generated
765 # message we're using to close the PR, else it's automatically generated
765 message = Optional.extract(message)
766 message = Optional.extract(message)
766
767
767 # finally close the PR, with proper message comment
768 # finally close the PR, with proper message comment
768 comment, status = PullRequestModel().close_pull_request_with_comment(
769 comment, status = PullRequestModel().close_pull_request_with_comment(
769 pull_request, apiuser, repo, message=message)
770 pull_request, apiuser, repo, message=message)
770 status_lbl = ChangesetStatus.get_status_lbl(status)
771 status_lbl = ChangesetStatus.get_status_lbl(status)
771
772
772 Session().commit()
773 Session().commit()
773
774
774 data = {
775 data = {
775 'pull_request_id': pull_request.pull_request_id,
776 'pull_request_id': pull_request.pull_request_id,
776 'close_status': status_lbl,
777 'close_status': status_lbl,
777 'closed': True,
778 'closed': True,
778 }
779 }
779 return data
780 return data
@@ -1,321 +1,351 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2017 RhodeCode GmbH
3 # Copyright (C) 2011-2017 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 inspect
21 import inspect
22 import logging
22 import logging
23 import itertools
23 import itertools
24
24
25 from rhodecode.api import (
25 from rhodecode.api import (
26 jsonrpc_method, JSONRPCError, JSONRPCForbidden, find_methods)
26 jsonrpc_method, JSONRPCError, JSONRPCForbidden, find_methods)
27
27
28 from rhodecode.api.utils import (
28 from rhodecode.api.utils import (
29 Optional, OAttr, has_superadmin_permission, get_user_or_error)
29 Optional, OAttr, has_superadmin_permission, get_user_or_error)
30 from rhodecode.lib.utils import repo2db_mapper
30 from rhodecode.lib.utils import repo2db_mapper
31 from rhodecode.lib import system_info
31 from rhodecode.lib import system_info
32 from rhodecode.lib import user_sessions
32 from rhodecode.lib import user_sessions
33 from rhodecode.lib.utils2 import safe_int
33 from rhodecode.lib.utils2 import safe_int
34 from rhodecode.model.db import UserIpMap
34 from rhodecode.model.db import UserIpMap
35 from rhodecode.model.scm import ScmModel
35 from rhodecode.model.scm import ScmModel
36 from rhodecode.model.settings import VcsSettingsModel
36
37
37 log = logging.getLogger(__name__)
38 log = logging.getLogger(__name__)
38
39
39
40
40 @jsonrpc_method()
41 @jsonrpc_method()
41 def get_server_info(request, apiuser):
42 def get_server_info(request, apiuser):
42 """
43 """
43 Returns the |RCE| server information.
44 Returns the |RCE| server information.
44
45
45 This includes the running version of |RCE| and all installed
46 This includes the running version of |RCE| and all installed
46 packages. This command takes the following options:
47 packages. This command takes the following options:
47
48
48 :param apiuser: This is filled automatically from the |authtoken|.
49 :param apiuser: This is filled automatically from the |authtoken|.
49 :type apiuser: AuthUser
50 :type apiuser: AuthUser
50
51
51 Example output:
52 Example output:
52
53
53 .. code-block:: bash
54 .. code-block:: bash
54
55
55 id : <id_given_in_input>
56 id : <id_given_in_input>
56 result : {
57 result : {
57 'modules': [<module name>,...]
58 'modules': [<module name>,...]
58 'py_version': <python version>,
59 'py_version': <python version>,
59 'platform': <platform type>,
60 'platform': <platform type>,
60 'rhodecode_version': <rhodecode version>
61 'rhodecode_version': <rhodecode version>
61 }
62 }
62 error : null
63 error : null
63 """
64 """
64
65
65 if not has_superadmin_permission(apiuser):
66 if not has_superadmin_permission(apiuser):
66 raise JSONRPCForbidden()
67 raise JSONRPCForbidden()
67
68
68 server_info = ScmModel().get_server_info(request.environ)
69 server_info = ScmModel().get_server_info(request.environ)
69 # rhodecode-index requires those
70 # rhodecode-index requires those
70
71
71 server_info['index_storage'] = server_info['search']['value']['location']
72 server_info['index_storage'] = server_info['search']['value']['location']
72 server_info['storage'] = server_info['storage']['value']['path']
73 server_info['storage'] = server_info['storage']['value']['path']
73
74
74 return server_info
75 return server_info
75
76
76
77
77 @jsonrpc_method()
78 @jsonrpc_method()
79 def get_repo_store(request, apiuser):
80 """
81 Returns the |RCE| repository storage information.
82
83 :param apiuser: This is filled automatically from the |authtoken|.
84 :type apiuser: AuthUser
85
86 Example output:
87
88 .. code-block:: bash
89
90 id : <id_given_in_input>
91 result : {
92 'modules': [<module name>,...]
93 'py_version': <python version>,
94 'platform': <platform type>,
95 'rhodecode_version': <rhodecode version>
96 }
97 error : null
98 """
99
100 if not has_superadmin_permission(apiuser):
101 raise JSONRPCForbidden()
102
103 path = VcsSettingsModel().get_repos_location()
104 return {"path": path}
105
106
107 @jsonrpc_method()
78 def get_ip(request, apiuser, userid=Optional(OAttr('apiuser'))):
108 def get_ip(request, apiuser, userid=Optional(OAttr('apiuser'))):
79 """
109 """
80 Displays the IP Address as seen from the |RCE| server.
110 Displays the IP Address as seen from the |RCE| server.
81
111
82 * This command displays the IP Address, as well as all the defined IP
112 * This command displays the IP Address, as well as all the defined IP
83 addresses for the specified user. If the ``userid`` is not set, the
113 addresses for the specified user. If the ``userid`` is not set, the
84 data returned is for the user calling the method.
114 data returned is for the user calling the method.
85
115
86 This command can only be run using an |authtoken| with admin rights to
116 This command can only be run using an |authtoken| with admin rights to
87 the specified repository.
117 the specified repository.
88
118
89 This command takes the following options:
119 This command takes the following options:
90
120
91 :param apiuser: This is filled automatically from |authtoken|.
121 :param apiuser: This is filled automatically from |authtoken|.
92 :type apiuser: AuthUser
122 :type apiuser: AuthUser
93 :param userid: Sets the userid for which associated IP Address data
123 :param userid: Sets the userid for which associated IP Address data
94 is returned.
124 is returned.
95 :type userid: Optional(str or int)
125 :type userid: Optional(str or int)
96
126
97 Example output:
127 Example output:
98
128
99 .. code-block:: bash
129 .. code-block:: bash
100
130
101 id : <id_given_in_input>
131 id : <id_given_in_input>
102 result : {
132 result : {
103 "server_ip_addr": "<ip_from_clien>",
133 "server_ip_addr": "<ip_from_clien>",
104 "user_ips": [
134 "user_ips": [
105 {
135 {
106 "ip_addr": "<ip_with_mask>",
136 "ip_addr": "<ip_with_mask>",
107 "ip_range": ["<start_ip>", "<end_ip>"],
137 "ip_range": ["<start_ip>", "<end_ip>"],
108 },
138 },
109 ...
139 ...
110 ]
140 ]
111 }
141 }
112
142
113 """
143 """
114 if not has_superadmin_permission(apiuser):
144 if not has_superadmin_permission(apiuser):
115 raise JSONRPCForbidden()
145 raise JSONRPCForbidden()
116
146
117 userid = Optional.extract(userid, evaluate_locals=locals())
147 userid = Optional.extract(userid, evaluate_locals=locals())
118 userid = getattr(userid, 'user_id', userid)
148 userid = getattr(userid, 'user_id', userid)
119
149
120 user = get_user_or_error(userid)
150 user = get_user_or_error(userid)
121 ips = UserIpMap.query().filter(UserIpMap.user == user).all()
151 ips = UserIpMap.query().filter(UserIpMap.user == user).all()
122 return {
152 return {
123 'server_ip_addr': request.rpc_ip_addr,
153 'server_ip_addr': request.rpc_ip_addr,
124 'user_ips': ips
154 'user_ips': ips
125 }
155 }
126
156
127
157
128 @jsonrpc_method()
158 @jsonrpc_method()
129 def rescan_repos(request, apiuser, remove_obsolete=Optional(False)):
159 def rescan_repos(request, apiuser, remove_obsolete=Optional(False)):
130 """
160 """
131 Triggers a rescan of the specified repositories.
161 Triggers a rescan of the specified repositories.
132
162
133 * If the ``remove_obsolete`` option is set, it also deletes repositories
163 * If the ``remove_obsolete`` option is set, it also deletes repositories
134 that are found in the database but not on the file system, so called
164 that are found in the database but not on the file system, so called
135 "clean zombies".
165 "clean zombies".
136
166
137 This command can only be run using an |authtoken| with admin rights to
167 This command can only be run using an |authtoken| with admin rights to
138 the specified repository.
168 the specified repository.
139
169
140 This command takes the following options:
170 This command takes the following options:
141
171
142 :param apiuser: This is filled automatically from the |authtoken|.
172 :param apiuser: This is filled automatically from the |authtoken|.
143 :type apiuser: AuthUser
173 :type apiuser: AuthUser
144 :param remove_obsolete: Deletes repositories from the database that
174 :param remove_obsolete: Deletes repositories from the database that
145 are not found on the filesystem.
175 are not found on the filesystem.
146 :type remove_obsolete: Optional(``True`` | ``False``)
176 :type remove_obsolete: Optional(``True`` | ``False``)
147
177
148 Example output:
178 Example output:
149
179
150 .. code-block:: bash
180 .. code-block:: bash
151
181
152 id : <id_given_in_input>
182 id : <id_given_in_input>
153 result : {
183 result : {
154 'added': [<added repository name>,...]
184 'added': [<added repository name>,...]
155 'removed': [<removed repository name>,...]
185 'removed': [<removed repository name>,...]
156 }
186 }
157 error : null
187 error : null
158
188
159 Example error output:
189 Example error output:
160
190
161 .. code-block:: bash
191 .. code-block:: bash
162
192
163 id : <id_given_in_input>
193 id : <id_given_in_input>
164 result : null
194 result : null
165 error : {
195 error : {
166 'Error occurred during rescan repositories action'
196 'Error occurred during rescan repositories action'
167 }
197 }
168
198
169 """
199 """
170 if not has_superadmin_permission(apiuser):
200 if not has_superadmin_permission(apiuser):
171 raise JSONRPCForbidden()
201 raise JSONRPCForbidden()
172
202
173 try:
203 try:
174 rm_obsolete = Optional.extract(remove_obsolete)
204 rm_obsolete = Optional.extract(remove_obsolete)
175 added, removed = repo2db_mapper(ScmModel().repo_scan(),
205 added, removed = repo2db_mapper(ScmModel().repo_scan(),
176 remove_obsolete=rm_obsolete)
206 remove_obsolete=rm_obsolete)
177 return {'added': added, 'removed': removed}
207 return {'added': added, 'removed': removed}
178 except Exception:
208 except Exception:
179 log.exception('Failed to run repo rescann')
209 log.exception('Failed to run repo rescann')
180 raise JSONRPCError(
210 raise JSONRPCError(
181 'Error occurred during rescan repositories action'
211 'Error occurred during rescan repositories action'
182 )
212 )
183
213
184
214
185 @jsonrpc_method()
215 @jsonrpc_method()
186 def cleanup_sessions(request, apiuser, older_then=Optional(60)):
216 def cleanup_sessions(request, apiuser, older_then=Optional(60)):
187 """
217 """
188 Triggers a session cleanup action.
218 Triggers a session cleanup action.
189
219
190 If the ``older_then`` option is set, only sessions that hasn't been
220 If the ``older_then`` option is set, only sessions that hasn't been
191 accessed in the given number of days will be removed.
221 accessed in the given number of days will be removed.
192
222
193 This command can only be run using an |authtoken| with admin rights to
223 This command can only be run using an |authtoken| with admin rights to
194 the specified repository.
224 the specified repository.
195
225
196 This command takes the following options:
226 This command takes the following options:
197
227
198 :param apiuser: This is filled automatically from the |authtoken|.
228 :param apiuser: This is filled automatically from the |authtoken|.
199 :type apiuser: AuthUser
229 :type apiuser: AuthUser
200 :param older_then: Deletes session that hasn't been accessed
230 :param older_then: Deletes session that hasn't been accessed
201 in given number of days.
231 in given number of days.
202 :type older_then: Optional(int)
232 :type older_then: Optional(int)
203
233
204 Example output:
234 Example output:
205
235
206 .. code-block:: bash
236 .. code-block:: bash
207
237
208 id : <id_given_in_input>
238 id : <id_given_in_input>
209 result: {
239 result: {
210 "backend": "<type of backend>",
240 "backend": "<type of backend>",
211 "sessions_removed": <number_of_removed_sessions>
241 "sessions_removed": <number_of_removed_sessions>
212 }
242 }
213 error : null
243 error : null
214
244
215 Example error output:
245 Example error output:
216
246
217 .. code-block:: bash
247 .. code-block:: bash
218
248
219 id : <id_given_in_input>
249 id : <id_given_in_input>
220 result : null
250 result : null
221 error : {
251 error : {
222 'Error occurred during session cleanup'
252 'Error occurred during session cleanup'
223 }
253 }
224
254
225 """
255 """
226 if not has_superadmin_permission(apiuser):
256 if not has_superadmin_permission(apiuser):
227 raise JSONRPCForbidden()
257 raise JSONRPCForbidden()
228
258
229 older_then = safe_int(Optional.extract(older_then)) or 60
259 older_then = safe_int(Optional.extract(older_then)) or 60
230 older_than_seconds = 60 * 60 * 24 * older_then
260 older_than_seconds = 60 * 60 * 24 * older_then
231
261
232 config = system_info.rhodecode_config().get_value()['value']['config']
262 config = system_info.rhodecode_config().get_value()['value']['config']
233 session_model = user_sessions.get_session_handler(
263 session_model = user_sessions.get_session_handler(
234 config.get('beaker.session.type', 'memory'))(config)
264 config.get('beaker.session.type', 'memory'))(config)
235
265
236 backend = session_model.SESSION_TYPE
266 backend = session_model.SESSION_TYPE
237 try:
267 try:
238 cleaned = session_model.clean_sessions(
268 cleaned = session_model.clean_sessions(
239 older_than_seconds=older_than_seconds)
269 older_than_seconds=older_than_seconds)
240 return {'sessions_removed': cleaned, 'backend': backend}
270 return {'sessions_removed': cleaned, 'backend': backend}
241 except user_sessions.CleanupCommand as msg:
271 except user_sessions.CleanupCommand as msg:
242 return {'cleanup_command': msg.message, 'backend': backend}
272 return {'cleanup_command': msg.message, 'backend': backend}
243 except Exception as e:
273 except Exception as e:
244 log.exception('Failed session cleanup')
274 log.exception('Failed session cleanup')
245 raise JSONRPCError(
275 raise JSONRPCError(
246 'Error occurred during session cleanup'
276 'Error occurred during session cleanup'
247 )
277 )
248
278
249
279
250 @jsonrpc_method()
280 @jsonrpc_method()
251 def get_method(request, apiuser, pattern=Optional('*')):
281 def get_method(request, apiuser, pattern=Optional('*')):
252 """
282 """
253 Returns list of all available API methods. By default match pattern
283 Returns list of all available API methods. By default match pattern
254 os "*" but any other pattern can be specified. eg *comment* will return
284 os "*" but any other pattern can be specified. eg *comment* will return
255 all methods with comment inside them. If just single method is matched
285 all methods with comment inside them. If just single method is matched
256 returned data will also include method specification
286 returned data will also include method specification
257
287
258 This command can only be run using an |authtoken| with admin rights to
288 This command can only be run using an |authtoken| with admin rights to
259 the specified repository.
289 the specified repository.
260
290
261 This command takes the following options:
291 This command takes the following options:
262
292
263 :param apiuser: This is filled automatically from the |authtoken|.
293 :param apiuser: This is filled automatically from the |authtoken|.
264 :type apiuser: AuthUser
294 :type apiuser: AuthUser
265 :param pattern: pattern to match method names against
295 :param pattern: pattern to match method names against
266 :type older_then: Optional("*")
296 :type older_then: Optional("*")
267
297
268 Example output:
298 Example output:
269
299
270 .. code-block:: bash
300 .. code-block:: bash
271
301
272 id : <id_given_in_input>
302 id : <id_given_in_input>
273 "result": [
303 "result": [
274 "changeset_comment",
304 "changeset_comment",
275 "comment_pull_request",
305 "comment_pull_request",
276 "comment_commit"
306 "comment_commit"
277 ]
307 ]
278 error : null
308 error : null
279
309
280 .. code-block:: bash
310 .. code-block:: bash
281
311
282 id : <id_given_in_input>
312 id : <id_given_in_input>
283 "result": [
313 "result": [
284 "comment_commit",
314 "comment_commit",
285 {
315 {
286 "apiuser": "<RequiredType>",
316 "apiuser": "<RequiredType>",
287 "comment_type": "<Optional:u'note'>",
317 "comment_type": "<Optional:u'note'>",
288 "commit_id": "<RequiredType>",
318 "commit_id": "<RequiredType>",
289 "message": "<RequiredType>",
319 "message": "<RequiredType>",
290 "repoid": "<RequiredType>",
320 "repoid": "<RequiredType>",
291 "request": "<RequiredType>",
321 "request": "<RequiredType>",
292 "resolves_comment_id": "<Optional:None>",
322 "resolves_comment_id": "<Optional:None>",
293 "status": "<Optional:None>",
323 "status": "<Optional:None>",
294 "userid": "<Optional:<OptionalAttr:apiuser>>"
324 "userid": "<Optional:<OptionalAttr:apiuser>>"
295 }
325 }
296 ]
326 ]
297 error : null
327 error : null
298 """
328 """
299 if not has_superadmin_permission(apiuser):
329 if not has_superadmin_permission(apiuser):
300 raise JSONRPCForbidden()
330 raise JSONRPCForbidden()
301
331
302 pattern = Optional.extract(pattern)
332 pattern = Optional.extract(pattern)
303
333
304 matches = find_methods(request.registry.jsonrpc_methods, pattern)
334 matches = find_methods(request.registry.jsonrpc_methods, pattern)
305
335
306 args_desc = []
336 args_desc = []
307 if len(matches) == 1:
337 if len(matches) == 1:
308 func = matches[matches.keys()[0]]
338 func = matches[matches.keys()[0]]
309
339
310 argspec = inspect.getargspec(func)
340 argspec = inspect.getargspec(func)
311 arglist = argspec[0]
341 arglist = argspec[0]
312 defaults = map(repr, argspec[3] or [])
342 defaults = map(repr, argspec[3] or [])
313
343
314 default_empty = '<RequiredType>'
344 default_empty = '<RequiredType>'
315
345
316 # kw arguments required by this method
346 # kw arguments required by this method
317 func_kwargs = dict(itertools.izip_longest(
347 func_kwargs = dict(itertools.izip_longest(
318 reversed(arglist), reversed(defaults), fillvalue=default_empty))
348 reversed(arglist), reversed(defaults), fillvalue=default_empty))
319 args_desc.append(func_kwargs)
349 args_desc.append(func_kwargs)
320
350
321 return matches.keys() + args_desc
351 return matches.keys() + args_desc
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/tests/functional/test_admin_defaults.py to rhodecode/apps/admin/tests/test_admin_defaults.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_defaults.py to rhodecode/apps/admin/tests/test_admin_defaults.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_permissions.py to rhodecode/apps/admin/tests/test_admin_permissions.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_permissions.py to rhodecode/apps/admin/tests/test_admin_permissions.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_repos.py to rhodecode/apps/admin/tests/test_admin_repos.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_repos.py to rhodecode/apps/admin/tests/test_admin_repos.py
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/tests/functional/test_admin_gists.py to rhodecode/apps/gist/tests/test_admin_gists.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_gists.py to rhodecode/apps/gist/tests/test_admin_gists.py
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/tests/functional/test_journal.py to rhodecode/apps/journal/tests/test_journal.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_journal.py to rhodecode/apps/journal/tests/test_journal.py
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/tests/functional/test_login.py to rhodecode/apps/login/tests/test_login.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_login.py to rhodecode/apps/login/tests/test_login.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_password_reset.py to rhodecode/apps/login/tests/test_password_reset.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_password_reset.py to rhodecode/apps/login/tests/test_password_reset.py
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/tests/functional/test_admin_notifications.py to rhodecode/apps/my_account/tests/test_my_account_notifications.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_notifications.py to rhodecode/apps/my_account/tests/test_my_account_notifications.py
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/apps/my_account/views.py to rhodecode/apps/my_account/views/my_account.py
NO CONTENT: file renamed from rhodecode/apps/my_account/views.py to rhodecode/apps/my_account/views/my_account.py
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/tests/functional/test_changelog.py to rhodecode/apps/repository/tests/test_repo_changelog.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_changelog.py to rhodecode/apps/repository/tests/test_repo_changelog.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_commit_comments.py to rhodecode/apps/repository/tests/test_repo_commit_comments.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_commit_comments.py to rhodecode/apps/repository/tests/test_repo_commit_comments.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_changeset.py to rhodecode/apps/repository/tests/test_repo_commits.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_changeset.py to rhodecode/apps/repository/tests/test_repo_commits.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_compare.py to rhodecode/apps/repository/tests/test_repo_compare.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_compare.py to rhodecode/apps/repository/tests/test_repo_compare.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_compare_local.py to rhodecode/apps/repository/tests/test_repo_compare_local.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_compare_local.py to rhodecode/apps/repository/tests/test_repo_compare_local.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_compare_on_single_file.py to rhodecode/apps/repository/tests/test_repo_compare_on_single_file.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_compare_on_single_file.py to rhodecode/apps/repository/tests/test_repo_compare_on_single_file.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_feed.py to rhodecode/apps/repository/tests/test_repo_feed.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_feed.py to rhodecode/apps/repository/tests/test_repo_feed.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_files.py to rhodecode/apps/repository/tests/test_repo_files.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_files.py to rhodecode/apps/repository/tests/test_repo_files.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_repos_issuetracker.py to rhodecode/apps/repository/tests/test_repo_issue_tracker.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_repos_issuetracker.py to rhodecode/apps/repository/tests/test_repo_issue_tracker.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/functional/test_pullrequests.py to rhodecode/apps/repository/tests/test_repo_pullrequests.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_pullrequests.py to rhodecode/apps/repository/tests/test_repo_pullrequests.py
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/tests/functional/test_admin_user_groups.py to rhodecode/apps/user_group/tests/test_user_groups.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_admin_user_groups.py to rhodecode/apps/user_group/tests/test_user_groups.py
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/tests/functional/test_integrations.py to rhodecode/integrations/tests/test_integrations.py
NO CONTENT: file renamed from rhodecode/tests/functional/test_integrations.py to rhodecode/integrations/tests/test_integrations.py
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: 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 chmod 100644 => 100755, binary diff hidden
NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
1 NO CONTENT: modified file chmod 100644 => 100755
NO CONTENT: modified file chmod 100644 => 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
1 NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
1 NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
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/public/js/excanvas.min.js to rhodecode/public/js/src/excanvas.min.js
NO CONTENT: file renamed from rhodecode/public/js/excanvas.min.js to rhodecode/public/js/src/excanvas.min.js
1 NO CONTENT: file renamed from rhodecode/public/js/jquery.commits-graph.js to rhodecode/public/js/src/plugins/jquery.commits-graph.js
NO CONTENT: file renamed from rhodecode/public/js/jquery.commits-graph.js to rhodecode/public/js/src/plugins/jquery.commits-graph.js
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/notifications/show_notification.mako to rhodecode/templates/admin/notifications/notifications_show.mako
NO CONTENT: file renamed from rhodecode/templates/admin/notifications/show_notification.mako to rhodecode/templates/admin/notifications/notifications_show.mako
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/templates/admin/notifications/notifications.mako to rhodecode/templates/admin/notifications/notifications_show_all.mako
NO CONTENT: file renamed from rhodecode/templates/admin/notifications/notifications.mako to rhodecode/templates/admin/notifications/notifications_show_all.mako
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/repo_groups/repo_group_edit_perms.mako to rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako
NO CONTENT: file renamed from rhodecode/templates/admin/repo_groups/repo_group_edit_perms.mako to rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako
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: 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: 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/summary/base.mako to rhodecode/templates/summary/summary_base.mako
NO CONTENT: file renamed from rhodecode/templates/summary/base.mako to rhodecode/templates/summary/summary_base.mako
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/tests/other/test_libs.py to rhodecode/tests/lib/test_libs.py
NO CONTENT: file renamed from rhodecode/tests/other/test_libs.py to rhodecode/tests/lib/test_libs.py
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
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
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
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
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
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
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